@idea1/cli 1.8.3 → 1.9.1
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 +121 -59
- package/dist/cli/resolver.d.ts +1 -0
- package/dist/cli/resolver.d.ts.map +1 -1
- package/dist/cli/resolver.js +5 -0
- package/dist/cli/resolver.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/approve-pr.d.ts.map +1 -1
- package/dist/commands/approve-pr.js +20 -37
- 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 +2 -5
- 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 +4 -3
- package/dist/commands/close-worktree.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +9 -5
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/join-project-item.d.ts.map +1 -1
- package/dist/commands/join-project-item.js +22 -48
- 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 +22 -23
- package/dist/commands/next-workflow-step.js.map +1 -1
- package/dist/commands/ready-for-approval.d.ts.map +1 -1
- package/dist/commands/ready-for-approval.js +26 -18
- package/dist/commands/ready-for-approval.js.map +1 -1
- package/dist/commands/release.d.ts +3 -1
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +98 -19
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/ship-local-changes.d.ts.map +1 -1
- package/dist/commands/ship-local-changes.js +4 -3
- package/dist/commands/ship-local-changes.js.map +1 -1
- package/dist/commands/start-agent-implementation.js +2 -2
- package/dist/commands/start-agent-implementation.js.map +1 -1
- package/dist/commands/start-dev-implementation.d.ts.map +1 -1
- package/dist/commands/start-dev-implementation.js +8 -3
- package/dist/commands/start-dev-implementation.js.map +1 -1
- package/dist/commands/start.d.ts +2 -2
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +27 -21
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +164 -0
- package/dist/interactive.js.map +1 -1
- package/dist/jobs/job.d.ts +81 -0
- package/dist/jobs/job.d.ts.map +1 -0
- package/dist/jobs/job.js +258 -0
- package/dist/jobs/job.js.map +1 -0
- package/dist/jobs/targets.d.ts +58 -0
- package/dist/jobs/targets.d.ts.map +1 -0
- package/dist/jobs/targets.js +215 -0
- package/dist/jobs/targets.js.map +1 -0
- package/dist/lib/logger.d.ts +10 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +16 -0
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/prompt.d.ts +7 -0
- package/dist/lib/prompt.d.ts.map +1 -1
- package/dist/lib/prompt.js +29 -0
- package/dist/lib/prompt.js.map +1 -1
- package/dist/lib/shell.d.ts +2 -1
- package/dist/lib/shell.d.ts.map +1 -1
- package/dist/lib/shell.js +17 -1
- package/dist/lib/shell.js.map +1 -1
- package/dist/services/git.d.ts +7 -0
- package/dist/services/git.d.ts.map +1 -1
- package/dist/services/git.js +10 -7
- package/dist/services/git.js.map +1 -1
- package/dist/services/github.d.ts +13 -0
- package/dist/services/github.d.ts.map +1 -1
- package/dist/services/github.js +35 -3
- package/dist/services/github.js.map +1 -1
- package/dist/services/setup.d.ts +4 -2
- package/dist/services/setup.d.ts.map +1 -1
- package/dist/services/setup.js +43 -13
- package/dist/services/setup.js.map +1 -1
- package/dist/services/worktree.js +1 -1
- package/dist/services/worktree.js.map +1 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/workflow/engine/approval-flow.d.ts +2 -1
- package/dist/workflow/engine/approval-flow.d.ts.map +1 -1
- package/dist/workflow/engine/approval-flow.js +35 -1
- package/dist/workflow/engine/approval-flow.js.map +1 -1
- package/dist/workflow/engine/branch-setup.d.ts +8 -2
- package/dist/workflow/engine/branch-setup.d.ts.map +1 -1
- package/dist/workflow/engine/branch-setup.js +16 -6
- package/dist/workflow/engine/branch-setup.js.map +1 -1
- package/dist/workflow/engine/handlers/agent-implementation.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/agent-implementation.js +3 -10
- package/dist/workflow/engine/handlers/agent-implementation.js.map +1 -1
- package/dist/workflow/engine/handlers/dev-implementation.d.ts +2 -2
- package/dist/workflow/engine/handlers/dev-implementation.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/dev-implementation.js +13 -7
- package/dist/workflow/engine/handlers/dev-implementation.js.map +1 -1
- package/dist/workflow/engine/release-engine.d.ts +7 -1
- package/dist/workflow/engine/release-engine.d.ts.map +1 -1
- package/dist/workflow/engine/release-engine.js +16 -6
- package/dist/workflow/engine/release-engine.js.map +1 -1
- package/dist/workflow/engine/ship-flow.d.ts +5 -4
- package/dist/workflow/engine/ship-flow.d.ts.map +1 -1
- package/dist/workflow/engine/ship-flow.js +8 -13
- package/dist/workflow/engine/ship-flow.js.map +1 -1
- package/dist/workflow/engine/workflow-engine.d.ts +67 -13
- package/dist/workflow/engine/workflow-engine.d.ts.map +1 -1
- package/dist/workflow/engine/workflow-engine.js +137 -47
- package/dist/workflow/engine/workflow-engine.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/integrate.d.ts +0 -13
- package/dist/commands/integrate.d.ts.map +0 -1
- package/dist/commands/integrate.js +0 -128
- package/dist/commands/integrate.js.map +0 -1
- 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
- package/dist/services/hooks.d.ts +0 -8
- package/dist/services/hooks.d.ts.map +0 -1
- package/dist/services/hooks.js +0 -72
- package/dist/services/hooks.js.map +0 -1
- package/dist/services/workflow.d.ts +0 -17
- package/dist/services/workflow.d.ts.map +0 -1
- package/dist/services/workflow.js +0 -39
- package/dist/services/workflow.js.map +0 -1
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
import { logger } from '../lib/logger.js';
|
|
2
|
-
import { promptInput, promptSelect } from '../lib/prompt.js';
|
|
3
|
-
import { isolationModeOption, resolveIsolationMode } from '../lib/isolation.js';
|
|
4
|
-
import * as git from '../services/git.js';
|
|
5
|
-
import * as claude from '../services/claude.js';
|
|
6
|
-
import * as worktree from '../services/worktree.js';
|
|
7
|
-
import { configService } from '../services/config.js';
|
|
8
|
-
import { isProjectItemUrl, validateProjectItemUrl } from '../lib/project-item-url.js';
|
|
9
|
-
export const VALID_PERMISSION_MODES = ['acceptEdits', 'bypassPermissions', 'default', 'delegate', 'dontAsk', 'plan'];
|
|
10
|
-
const VALID_ENTRY_POINT_MODES = ['launch', 'inline', 'none'];
|
|
11
|
-
export const VALID_EFFORT_LEVELS = ['low', 'medium', 'high', 'xhigh', 'max'];
|
|
12
|
-
const ENTRY_POINT_MODE_CHOICES = [
|
|
13
|
-
{ label: 'Launch new Claude session', value: 'launch' },
|
|
14
|
-
{ label: 'Output prompt for current Claude session', value: 'inline' },
|
|
15
|
-
{ label: 'Do not invoke Claude', value: 'none' }
|
|
16
|
-
];
|
|
17
|
-
export const WORKFLOW_CHOICES = [
|
|
18
|
-
{ label: 'Independent Feature', value: 'independent' },
|
|
19
|
-
{ label: 'Work for Integration', value: 'integration' }
|
|
20
|
-
];
|
|
21
|
-
const IMPLEMENT_AFTER_CREATE_CHOICES = [
|
|
22
|
-
{ label: 'Start implementing now', value: 'yes' },
|
|
23
|
-
{ label: 'Just set up the branch and automation (stop before Claude)', value: 'no' }
|
|
24
|
-
];
|
|
25
|
-
const STACK_CHOICES = [
|
|
26
|
-
{ label: 'No', value: 'no' },
|
|
27
|
-
{ label: 'Yes - specify a branch', value: 'branch' },
|
|
28
|
-
{ label: 'Yes - specify a project item URL', value: 'url' }
|
|
29
|
-
];
|
|
30
|
-
const INTEGRATION_BRANCH_CHOICES = [
|
|
31
|
-
{ label: 'Create new integration branch', value: 'new' },
|
|
32
|
-
{ label: 'Use existing integration branch', value: 'existing' }
|
|
33
|
-
];
|
|
34
|
-
/**
|
|
35
|
-
* Prompt the user whether to stack this branch on another and resolve the
|
|
36
|
-
* chosen stack branch. Prompt-only: performs no branch writes. Returns the
|
|
37
|
-
* resolved stack branch name, or null when the user opts not to stack.
|
|
38
|
-
* Shared by start-project-item and attach-project-item.
|
|
39
|
-
*/
|
|
40
|
-
export async function promptForStackBranch() {
|
|
41
|
-
const stackChoice = await promptSelect('Stack this branch on another?', STACK_CHOICES);
|
|
42
|
-
if (stackChoice === 'branch') {
|
|
43
|
-
const stackBranch = await promptInput('Branch to stack on');
|
|
44
|
-
if (!stackBranch) {
|
|
45
|
-
throw new Error('Stack branch is required when stacking');
|
|
46
|
-
}
|
|
47
|
-
const stackExists = await git.branchExists(stackBranch);
|
|
48
|
-
if (!stackExists) {
|
|
49
|
-
throw new Error(`Stack branch '${stackBranch}' does not exist locally or on origin`);
|
|
50
|
-
}
|
|
51
|
-
return stackBranch;
|
|
52
|
-
}
|
|
53
|
-
if (stackChoice === 'url') {
|
|
54
|
-
const stackUrl = await promptInput('Project item URL to stack on');
|
|
55
|
-
if (!stackUrl) {
|
|
56
|
-
throw new Error('Project item URL is required when stacking by URL');
|
|
57
|
-
}
|
|
58
|
-
const stackBranch = await git.resolveBranchFromProjectItemUrl(stackUrl);
|
|
59
|
-
if (!stackBranch) {
|
|
60
|
-
throw new Error(`No branch found for project item URL: ${stackUrl}. Make sure the project item has been started.`);
|
|
61
|
-
}
|
|
62
|
-
logger.info(`Resolved stack branch: ${stackBranch}`);
|
|
63
|
-
return stackBranch;
|
|
64
|
-
}
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Prompt the user for integration-branch selection. Prompt-only: does not
|
|
69
|
-
* perform any branch writes. Must be invoked before setWorkflowStatus so the
|
|
70
|
-
* user completes all setup questions up front.
|
|
71
|
-
*/
|
|
72
|
-
export async function promptForIntegrationBranch() {
|
|
73
|
-
const existingBranches = await worktree.listExistingIntegrationBranches();
|
|
74
|
-
const branchChoice = existingBranches.length > 0
|
|
75
|
-
? await promptSelect('Integration branch', INTEGRATION_BRANCH_CHOICES)
|
|
76
|
-
: 'new';
|
|
77
|
-
if (branchChoice === 'existing') {
|
|
78
|
-
const branchChoices = existingBranches.map(b => ({ label: b, value: b }));
|
|
79
|
-
const integrationBranchName = await promptSelect('Select integration branch', branchChoices);
|
|
80
|
-
const integrationName = await worktree.extractIntegrationName(integrationBranchName);
|
|
81
|
-
return { integrationName, integrationBranchName, isNew: false };
|
|
82
|
-
}
|
|
83
|
-
const integrationName = await promptInput('Integration name (e.g., my-cool-feature)');
|
|
84
|
-
if (!integrationName) {
|
|
85
|
-
throw new Error('Integration name is required');
|
|
86
|
-
}
|
|
87
|
-
const integrationBranchName = await worktree.buildIntegrationBranchName(integrationName);
|
|
88
|
-
return { integrationName, integrationBranchName, isNew: true };
|
|
89
|
-
}
|
|
90
|
-
export const startProjectItemCommand = {
|
|
91
|
-
name: 'start-project-item',
|
|
92
|
-
aliases: ['s', 'start'],
|
|
93
|
-
description: 'Start implementing a project item on a new branch, in a worktree or the main repo',
|
|
94
|
-
options: [
|
|
95
|
-
{
|
|
96
|
-
// Declared first so it's the very first thing prompted, before every
|
|
97
|
-
// other choice — later choices depend on whether it was provided.
|
|
98
|
-
longName: 'url',
|
|
99
|
-
description: 'Project item URL (leave blank to create a new item)',
|
|
100
|
-
defaultValue: '',
|
|
101
|
-
promptWhenDefaultExists: true,
|
|
102
|
-
// Allow blank (signals "create a new item"); validate format otherwise.
|
|
103
|
-
validate: (value) => (value ? validateProjectItemUrl(value) : undefined)
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
// Only prompted (and required) when no URL was given, i.e. the user is
|
|
107
|
-
// creating a new item. Declared after 'url' so it can read its value.
|
|
108
|
-
longName: 'title',
|
|
109
|
-
shortName: 't',
|
|
110
|
-
description: 'Title for the new project item',
|
|
111
|
-
dependsOn: (resolved) => !resolved['url'],
|
|
112
|
-
validate: (value) => value.trim() ? undefined : 'A title is required to create a project item'
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
// Only relevant when creating a new item. Declared after 'title' so it's
|
|
116
|
-
// asked once the item to create is named.
|
|
117
|
-
longName: 'implement-after-create',
|
|
118
|
-
shortName: 'ic',
|
|
119
|
-
description: 'After creating the new item, start implementing it now or just set up the branch?',
|
|
120
|
-
choices: IMPLEMENT_AFTER_CREATE_CHOICES,
|
|
121
|
-
dependsOn: (resolved) => !resolved['url'],
|
|
122
|
-
validate: (value) => value === 'yes' || value === 'no' ? undefined : 'Choose whether to start implementing'
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
longName: 'branch-name',
|
|
126
|
-
shortName: 'n',
|
|
127
|
-
description: 'Branch name (auto-generated if not provided)',
|
|
128
|
-
defaultValue: undefined,
|
|
129
|
-
promptWhenDefaultExists: true
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
longName: 'source-path',
|
|
133
|
-
shortName: 'p',
|
|
134
|
-
description: 'Path to source directory',
|
|
135
|
-
defaultValue: '',
|
|
136
|
-
promptWhenDefaultExists: false
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
longName: 'base-branch',
|
|
140
|
-
shortName: 'b',
|
|
141
|
-
description: 'Base branch',
|
|
142
|
-
defaultValue: () => configService.getDefaultBaseBranch(),
|
|
143
|
-
promptWhenDefaultExists: false
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
longName: 'permission-mode',
|
|
147
|
-
shortName: 'pm',
|
|
148
|
-
description: 'Claude permission mode',
|
|
149
|
-
defaultValue: 'plan',
|
|
150
|
-
promptWhenDefaultExists: true,
|
|
151
|
-
choices: VALID_PERMISSION_MODES.map(m => ({ label: m, value: m })),
|
|
152
|
-
validate: (value) => {
|
|
153
|
-
if (!VALID_PERMISSION_MODES.includes(value)) {
|
|
154
|
-
return `Must be one of: ${VALID_PERMISSION_MODES.join(', ')}`;
|
|
155
|
-
}
|
|
156
|
-
return undefined;
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
longName: 'workflow-type',
|
|
161
|
-
shortName: 'w',
|
|
162
|
-
description: 'Development workflow type',
|
|
163
|
-
defaultValue: undefined,
|
|
164
|
-
choices: WORKFLOW_CHOICES
|
|
165
|
-
},
|
|
166
|
-
isolationModeOption,
|
|
167
|
-
{
|
|
168
|
-
longName: 'effort',
|
|
169
|
-
shortName: 'e',
|
|
170
|
-
description: 'Claude effort level (reasoning depth)',
|
|
171
|
-
defaultValue: 'high',
|
|
172
|
-
promptWhenDefaultExists: true,
|
|
173
|
-
choices: VALID_EFFORT_LEVELS.map(l => ({ label: l, value: l })),
|
|
174
|
-
validate: (value) => {
|
|
175
|
-
if (!VALID_EFFORT_LEVELS.includes(value)) {
|
|
176
|
-
return `Must be one of: ${VALID_EFFORT_LEVELS.join(', ')}`;
|
|
177
|
-
}
|
|
178
|
-
return undefined;
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
longName: 'claude-entry-point',
|
|
183
|
-
shortName: 'im',
|
|
184
|
-
description: 'How to invoke Claude after setup',
|
|
185
|
-
defaultValue: 'launch',
|
|
186
|
-
promptWhenDefaultExists: false,
|
|
187
|
-
choices: ENTRY_POINT_MODE_CHOICES,
|
|
188
|
-
validate: (value) => {
|
|
189
|
-
if (!VALID_ENTRY_POINT_MODES.includes(value)) {
|
|
190
|
-
return `Must be one of: ${VALID_ENTRY_POINT_MODES.join(', ')}`;
|
|
191
|
-
}
|
|
192
|
-
return undefined;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
],
|
|
196
|
-
async execute(resolved) {
|
|
197
|
-
let projectItemUrl = resolved['url'];
|
|
198
|
-
const sourcePath = resolved['source-path'];
|
|
199
|
-
const baseBranch = resolved['base-branch'];
|
|
200
|
-
const permissionMode = resolved['permission-mode'];
|
|
201
|
-
const effort = (resolved['effort'] ?? 'high');
|
|
202
|
-
const workflowType = (resolved['workflow-type'] ?? 'independent');
|
|
203
|
-
const isolationMode = resolveIsolationMode(resolved);
|
|
204
|
-
let claudeEntryPointMode = (resolved['claude-entry-point'] ?? 'launch');
|
|
205
|
-
let shortBranchName = resolved['branch-name'] || undefined;
|
|
206
|
-
// Navigate to source path if provided
|
|
207
|
-
if (sourcePath) {
|
|
208
|
-
process.chdir(sourcePath);
|
|
209
|
-
}
|
|
210
|
-
// The URL is resolved up front (asked before any other choice). A blank
|
|
211
|
-
// value means the user wants to create a brand new item here; in that case
|
|
212
|
-
// the dependent 'title' and 'implement-after-create' options were also
|
|
213
|
-
// prompted and required.
|
|
214
|
-
if (!projectItemUrl) {
|
|
215
|
-
projectItemUrl = await claude.createProjectItem(resolved['title'].trim());
|
|
216
|
-
if (resolved['implement-after-create'] === 'no') {
|
|
217
|
-
// Stop before invoking Claude: set up the branch and all automation,
|
|
218
|
-
// but don't launch the implementation session.
|
|
219
|
-
claudeEntryPointMode = 'none';
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
// Validate URL format
|
|
223
|
-
if (!isProjectItemUrl(projectItemUrl)) {
|
|
224
|
-
logger.warning('URL does not appear to be an idea1.ai project item URL');
|
|
225
|
-
}
|
|
226
|
-
// Prompt for stack option (before MCP calls so all user questions are asked first)
|
|
227
|
-
const stackBranch = await promptForStackBranch();
|
|
228
|
-
// Collect integration-branch answers before the slow workflow status update,
|
|
229
|
-
// so every setup question is asked up front.
|
|
230
|
-
let integrationSelection = null;
|
|
231
|
-
if (workflowType === 'integration') {
|
|
232
|
-
integrationSelection = await promptForIntegrationBranch();
|
|
233
|
-
}
|
|
234
|
-
// Set workflow status to "Agent Implementation"
|
|
235
|
-
await claude.setWorkflowStatus(projectItemUrl, 'Agent Implementation');
|
|
236
|
-
// Generate branch name if not provided
|
|
237
|
-
if (!shortBranchName) {
|
|
238
|
-
shortBranchName = await claude.generateBranchName(projectItemUrl);
|
|
239
|
-
}
|
|
240
|
-
logger.info(`Using branch name: ${shortBranchName}`);
|
|
241
|
-
if (!shortBranchName) {
|
|
242
|
-
throw new Error('Failed to generate a branch name');
|
|
243
|
-
}
|
|
244
|
-
if (stackBranch) {
|
|
245
|
-
await git.ensureStackBranchReady(stackBranch);
|
|
246
|
-
}
|
|
247
|
-
if (workflowType === 'independent') {
|
|
248
|
-
await startIndependentFeature(projectItemUrl, shortBranchName, baseBranch, permissionMode, effort, claudeEntryPointMode, stackBranch, isolationMode);
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
if (!integrationSelection) {
|
|
252
|
-
throw new Error('Integration selection was not collected');
|
|
253
|
-
}
|
|
254
|
-
await startWorkForIntegration(projectItemUrl, shortBranchName, baseBranch, permissionMode, effort, claudeEntryPointMode, stackBranch, integrationSelection, isolationMode);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
/**
|
|
259
|
-
* Start an Independent Feature workflow
|
|
260
|
-
*/
|
|
261
|
-
async function startIndependentFeature(projectItemUrl, shortBranchName, baseBranch, permissionMode, effort, claudeEntryPointMode, stackBranch, isolationMode) {
|
|
262
|
-
logger.section('Independent Feature Workflow');
|
|
263
|
-
// Resolve branch prefix
|
|
264
|
-
const branchPrefix = await worktree.resolveBranchPrefix();
|
|
265
|
-
// Determine which branch to base off of
|
|
266
|
-
const sourceBranch = stackBranch ?? baseBranch;
|
|
267
|
-
// PR always targets baseBranch for independent features
|
|
268
|
-
const prTargetBranch = baseBranch;
|
|
269
|
-
const fullBranchName = `${branchPrefix}/${shortBranchName}`;
|
|
270
|
-
if (stackBranch) {
|
|
271
|
-
logger.info(`Stacked workflow: branching from ${stackBranch}, PR will target ${baseBranch}`);
|
|
272
|
-
}
|
|
273
|
-
// Prepare branch
|
|
274
|
-
await worktree.prepareBranchForWorktreeWithFullName(fullBranchName, shortBranchName, sourceBranch, prTargetBranch);
|
|
275
|
-
// Store workflow state in git config
|
|
276
|
-
await git.storeWorkflowState('Agent Implementation', fullBranchName);
|
|
277
|
-
await git.storeDevWorkflowType('independent', fullBranchName);
|
|
278
|
-
if (stackBranch) {
|
|
279
|
-
await git.storeStackBranch(stackBranch, fullBranchName);
|
|
280
|
-
}
|
|
281
|
-
await worktree.setupBranchEnvironment(isolationMode, fullBranchName, shortBranchName, prTargetBranch, {
|
|
282
|
-
projectItemUrl,
|
|
283
|
-
permissionMode,
|
|
284
|
-
effort,
|
|
285
|
-
claudeEntryPointMode
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Start a Work for Integration workflow
|
|
290
|
-
*/
|
|
291
|
-
async function startWorkForIntegration(projectItemUrl, shortBranchName, baseBranch, permissionMode, effort, claudeEntryPointMode, stackBranch, integrationSelection, isolationMode) {
|
|
292
|
-
logger.section('Work for Integration Workflow');
|
|
293
|
-
const { integrationName, integrationBranchName, isNew } = integrationSelection;
|
|
294
|
-
if (isNew) {
|
|
295
|
-
// Create the integration branch from baseBranch if it doesn't exist.
|
|
296
|
-
// Runs after setWorkflowStatus so the slow remote write is not blocking user prompts.
|
|
297
|
-
await worktree.ensureIntegrationBranch(integrationBranchName, baseBranch);
|
|
298
|
-
}
|
|
299
|
-
logger.info(`Integration branch: ${integrationBranchName}`);
|
|
300
|
-
// For integration workflow, the integration branch acts as the base for PRs
|
|
301
|
-
const prTargetBranch = integrationBranchName;
|
|
302
|
-
// Determine which branch to base off of
|
|
303
|
-
const sourceBranch = stackBranch ?? integrationBranchName;
|
|
304
|
-
// Build the full work branch name using integration template
|
|
305
|
-
const fullBranchName = await worktree.buildIntegrationWorkBranchName(integrationName, shortBranchName);
|
|
306
|
-
if (stackBranch) {
|
|
307
|
-
logger.info(`Stacked workflow: branching from ${stackBranch}, PR will target ${integrationBranchName}`);
|
|
308
|
-
}
|
|
309
|
-
// Prepare branch
|
|
310
|
-
await worktree.prepareBranchForWorktreeWithFullName(fullBranchName, shortBranchName, sourceBranch, prTargetBranch);
|
|
311
|
-
// Store workflow state in git config
|
|
312
|
-
await git.storeWorkflowState('Agent Implementation', fullBranchName);
|
|
313
|
-
await git.storeDevWorkflowType('integration', fullBranchName);
|
|
314
|
-
await git.storeIntegrationBranch(integrationBranchName, fullBranchName);
|
|
315
|
-
if (stackBranch) {
|
|
316
|
-
await git.storeStackBranch(stackBranch, fullBranchName);
|
|
317
|
-
}
|
|
318
|
-
await worktree.setupBranchEnvironment(isolationMode, fullBranchName, shortBranchName, prTargetBranch, {
|
|
319
|
-
projectItemUrl,
|
|
320
|
-
permissionMode,
|
|
321
|
-
effort,
|
|
322
|
-
claudeEntryPointMode
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
//# sourceMappingURL=start-project-item.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"start-project-item.js","sourceRoot":"","sources":["../../src/commands/start-project-item.ts"],"names":[],"mappings":"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"}
|
package/dist/services/hooks.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/services/hooks.ts"],"names":[],"mappings":"AAoDA;;GAEG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAqCjD"}
|
package/dist/services/hooks.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import { promptSelect, promptInput } from '../lib/prompt.js';
|
|
3
|
-
import { logger } from '../lib/logger.js';
|
|
4
|
-
import { execWithOutput, resolveBash, flushStdout } from '../lib/shell.js';
|
|
5
|
-
import { readSettings } from '../lib/settings.js';
|
|
6
|
-
/**
|
|
7
|
-
* Normalize a hook to HookConfig format
|
|
8
|
-
*/
|
|
9
|
-
function normalizeHook(hook) {
|
|
10
|
-
if (typeof hook === 'string') {
|
|
11
|
-
return { command: hook, inputs: [] };
|
|
12
|
-
}
|
|
13
|
-
return hook;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Collect inputs from user based on hook configuration
|
|
17
|
-
*/
|
|
18
|
-
async function collectHookInputs(inputs) {
|
|
19
|
-
const collected = {};
|
|
20
|
-
for (const input of inputs) {
|
|
21
|
-
if (input.type === 'select' && input.choices) {
|
|
22
|
-
collected[input.name] = await promptSelect(input.label, input.choices, { default: input.default });
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
collected[input.name] = await promptInput(input.label, { default: input.default });
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return collected;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Build command arguments from collected inputs
|
|
32
|
-
*/
|
|
33
|
-
function buildHookArgs(inputs) {
|
|
34
|
-
const args = [];
|
|
35
|
-
for (const [name, value] of Object.entries(inputs)) {
|
|
36
|
-
args.push(`--${name}`, value);
|
|
37
|
-
}
|
|
38
|
-
return args;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Run a hook with input collection
|
|
42
|
-
*/
|
|
43
|
-
export async function runHook(hookName, repoRoot) {
|
|
44
|
-
const settings = await readSettings(repoRoot);
|
|
45
|
-
const hook = settings?.hooks?.[hookName];
|
|
46
|
-
if (!hook) {
|
|
47
|
-
logger.dim(`No ${hookName} hook defined`);
|
|
48
|
-
return { success: true, skipped: true };
|
|
49
|
-
}
|
|
50
|
-
const config = normalizeHook(hook);
|
|
51
|
-
// Collect inputs if any
|
|
52
|
-
let args = [];
|
|
53
|
-
if (config.inputs && config.inputs.length > 0) {
|
|
54
|
-
logger.newline();
|
|
55
|
-
const inputs = await collectHookInputs(config.inputs);
|
|
56
|
-
args = buildHookArgs(inputs);
|
|
57
|
-
}
|
|
58
|
-
// Determine working directory (default to repo root)
|
|
59
|
-
const hookCwd = config.cwd ? path.join(repoRoot, config.cwd) : repoRoot;
|
|
60
|
-
logger.step(`Running ${hookName} hook: ${config.command}`);
|
|
61
|
-
const bash = resolveBash();
|
|
62
|
-
const exitCode = await execWithOutput(bash, [config.command, ...args], { cwd: hookCwd });
|
|
63
|
-
// Ensure terminal is ready before continuing with interactive prompts
|
|
64
|
-
await flushStdout();
|
|
65
|
-
if (exitCode !== 0) {
|
|
66
|
-
logger.error(`${hookName} hook failed with exit code ${exitCode}`);
|
|
67
|
-
return { success: false, skipped: false };
|
|
68
|
-
}
|
|
69
|
-
logger.success(`${hookName} hook completed`);
|
|
70
|
-
return { success: true, skipped: false };
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/services/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { WorkflowState, PrInfo } from '../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Get comprehensive workflow status for the current branch: the item it implements, the item's
|
|
4
|
-
* state and the branch record, from the platform (see `workflow-branch`). A branch this clone has
|
|
5
|
-
* never resolved as an item's is reported as unmanaged without a platform read, so the interactive
|
|
6
|
-
* header is instant on ordinary branches.
|
|
7
|
-
*/
|
|
8
|
-
export declare function getWorkflowStatus(options?: {
|
|
9
|
-
includePrInfo?: boolean;
|
|
10
|
-
}): Promise<{
|
|
11
|
-
branch: string;
|
|
12
|
-
baseBranch: string | null;
|
|
13
|
-
projectItemUrl: string | null;
|
|
14
|
-
workflowState: WorkflowState | null;
|
|
15
|
-
prInfo: PrInfo | null;
|
|
16
|
-
}>;
|
|
17
|
-
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/services/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAM/D;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC;IACtF,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC,CA4BD"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import * as git from './git.js';
|
|
2
|
-
import * as github from './github.js';
|
|
3
|
-
import * as workflowBranch from './workflow-branch.js';
|
|
4
|
-
import { normalizeWorkflowState } from '../lib/workflow-states.js';
|
|
5
|
-
/**
|
|
6
|
-
* Get comprehensive workflow status for the current branch: the item it implements, the item's
|
|
7
|
-
* state and the branch record, from the platform (see `workflow-branch`). A branch this clone has
|
|
8
|
-
* never resolved as an item's is reported as unmanaged without a platform read, so the interactive
|
|
9
|
-
* header is instant on ordinary branches.
|
|
10
|
-
*/
|
|
11
|
-
export async function getWorkflowStatus(options) {
|
|
12
|
-
let branch = '';
|
|
13
|
-
try {
|
|
14
|
-
branch = await git.getCurrentBranch();
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
// Not in a repository
|
|
18
|
-
}
|
|
19
|
-
const context = branch && branch !== 'HEAD' && await workflowBranch.getRememberedProjectItemUrl(branch)
|
|
20
|
-
? await workflowBranch.getBranchContext(branch).catch(() => null)
|
|
21
|
-
: null;
|
|
22
|
-
let prInfo = null;
|
|
23
|
-
if (options?.includePrInfo !== false && branch) {
|
|
24
|
-
try {
|
|
25
|
-
prInfo = await github.getPrInfo(branch);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
// Ignore error, prInfo will be null
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
branch,
|
|
33
|
-
baseBranch: context?.branch?.baseBranch ?? null,
|
|
34
|
-
projectItemUrl: context?.projectItem.url ?? null,
|
|
35
|
-
workflowState: normalizeWorkflowState(context?.projectItem.workflowStatus),
|
|
36
|
-
prInfo
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=workflow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/services/workflow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAqC;IAO3E,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC;QACrG,CAAC,CAAC,MAAM,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACjE,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,OAAO,EAAE,aAAa,KAAK,KAAK,IAAI,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;QAC/C,cAAc,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,IAAI;QAChD,aAAa,EAAE,sBAAsB,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC;QAC1E,MAAM;KACP,CAAC;AACJ,CAAC"}
|