@idea1/cli 1.5.2 → 1.6.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 +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 +3 -2
- package/dist/commands/close-worktree.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +17 -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/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/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.map +1 -1
- package/dist/lib/settings.js +5 -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 +116 -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/git.d.ts +66 -0
- package/dist/services/git.d.ts.map +1 -1
- package/dist/services/git.js +161 -6
- package/dist/services/git.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 +21 -23
- package/dist/services/worktree.d.ts.map +1 -1
- package/dist/services/worktree.js +35 -71
- 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,60 +1,21 @@
|
|
|
1
1
|
import { logger } from '../lib/logger.js';
|
|
2
|
+
import { WorkflowStates, isStateAtOrAfter, normalizeWorkflowState } from '../lib/workflow-states.js';
|
|
2
3
|
import * as git from '../services/git.js';
|
|
3
4
|
import * as github from '../services/github.js';
|
|
4
5
|
import * as claude from '../services/claude.js';
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import { isProjectItemUrl, validateProjectItemUrl } from '../lib/project-item-url.js';
|
|
8
|
-
import { WORKFLOW_CHOICES, promptForStackBranch, promptForIntegrationBranch } from './start-project-item.js';
|
|
6
|
+
import { branchCreationOptions, collectBranchCreationChoices } from '../services/branch-setup.js';
|
|
7
|
+
import { projectItemTargetOptions, resolveOrCreateProjectItem } from './start.js';
|
|
9
8
|
export const attachProjectItemCommand = {
|
|
10
9
|
name: 'attach-project-item',
|
|
11
10
|
aliases: ['a', 'attach'],
|
|
12
|
-
description: 'Attach the current branch to a project item
|
|
11
|
+
description: 'Attach the current branch to a project item, putting it under workflow management at the item\'s current state',
|
|
13
12
|
options: [
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
description: 'Project item URL (leave blank to create a new item)',
|
|
18
|
-
defaultValue: '',
|
|
19
|
-
promptWhenDefaultExists: true,
|
|
20
|
-
validate: (value) => (value ? validateProjectItemUrl(value) : undefined)
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
// Only prompted (and required) when no URL was given, i.e. creating a new item.
|
|
24
|
-
longName: 'title',
|
|
25
|
-
shortName: 't',
|
|
26
|
-
description: 'Title for the new project item',
|
|
27
|
-
dependsOn: (resolved) => !resolved['url'],
|
|
28
|
-
validate: (value) => value.trim() ? undefined : 'A title is required to create a project item'
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
longName: 'source-path',
|
|
32
|
-
shortName: 'p',
|
|
33
|
-
description: 'Path to source directory',
|
|
34
|
-
defaultValue: '',
|
|
35
|
-
promptWhenDefaultExists: false
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
longName: 'base-branch',
|
|
39
|
-
shortName: 'b',
|
|
40
|
-
description: 'Base branch (PR target for an independent feature)',
|
|
41
|
-
defaultValue: () => configService.getDefaultBaseBranch(),
|
|
42
|
-
promptWhenDefaultExists: false
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
longName: 'workflow-type',
|
|
46
|
-
shortName: 'w',
|
|
47
|
-
description: 'Development workflow type',
|
|
48
|
-
defaultValue: undefined,
|
|
49
|
-
choices: WORKFLOW_CHOICES
|
|
50
|
-
}
|
|
13
|
+
...projectItemTargetOptions,
|
|
14
|
+
// The current branch already has its name; only the base branch and workflow type apply.
|
|
15
|
+
...branchCreationOptions.filter(option => option.longName !== 'branch-name')
|
|
51
16
|
],
|
|
52
17
|
async execute(resolved) {
|
|
53
|
-
let projectItemUrl = resolved['url'];
|
|
54
18
|
const sourcePath = resolved['source-path'];
|
|
55
|
-
const baseBranch = resolved['base-branch'];
|
|
56
|
-
const workflowType = (resolved['workflow-type'] ?? 'independent');
|
|
57
|
-
// Navigate to source path if provided
|
|
58
19
|
if (sourcePath) {
|
|
59
20
|
process.chdir(sourcePath);
|
|
60
21
|
}
|
|
@@ -66,68 +27,56 @@ export const attachProjectItemCommand = {
|
|
|
66
27
|
// Attaching is only valid for a branch that has not already been wired up to
|
|
67
28
|
// a project item — re-attaching would clobber existing workflow state.
|
|
68
29
|
await ensureNotAlreadyAttached(currentBranch);
|
|
69
|
-
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
// any slow MCP or git writes.
|
|
79
|
-
const stackBranch = await promptForStackBranch();
|
|
80
|
-
let integrationSelection = null;
|
|
81
|
-
if (workflowType === 'integration') {
|
|
82
|
-
integrationSelection = await promptForIntegrationBranch();
|
|
83
|
-
}
|
|
84
|
-
// Determine the PR target branch exactly the way start-project-item does:
|
|
85
|
-
// the integration branch for integration work, otherwise the base branch.
|
|
86
|
-
let prTargetBranch = baseBranch;
|
|
87
|
-
if (integrationSelection) {
|
|
88
|
-
if (integrationSelection.isNew) {
|
|
89
|
-
await worktree.ensureIntegrationBranch(integrationSelection.integrationBranchName, baseBranch);
|
|
90
|
-
// ensureIntegrationBranch leaves the working tree on the base branch — return
|
|
91
|
-
// to the branch we are attaching so metadata is committed to the right place.
|
|
92
|
-
await git.checkoutBranch(currentBranch);
|
|
30
|
+
const projectItemUrl = await resolveOrCreateProjectItem(resolved);
|
|
31
|
+
// Collect every user decision up front, before any slow MCP or git writes.
|
|
32
|
+
const choices = await collectBranchCreationChoices(resolved);
|
|
33
|
+
// The PR target is the integration branch for integration work, otherwise the base branch.
|
|
34
|
+
let prTargetBranch = choices.baseBranch;
|
|
35
|
+
if (choices.integrationSelection) {
|
|
36
|
+
const { integrationBranchName, isNew } = choices.integrationSelection;
|
|
37
|
+
if (isNew && !await git.branchExists(integrationBranchName)) {
|
|
38
|
+
await git.createRemoteBranchFrom(integrationBranchName, `origin/${choices.baseBranch}`);
|
|
93
39
|
}
|
|
94
|
-
prTargetBranch =
|
|
40
|
+
prTargetBranch = integrationBranchName;
|
|
95
41
|
}
|
|
96
42
|
if (currentBranch === prTargetBranch) {
|
|
97
43
|
throw new Error(`Cannot attach branch '${currentBranch}' to itself as the PR base ('${prTargetBranch}').`);
|
|
98
44
|
}
|
|
45
|
+
// The branch joins the workflow at whatever state the item is already in.
|
|
46
|
+
const workflowState = normalizeWorkflowState(await claude.getWorkflowStatus(projectItemUrl)) ?? WorkflowStates.BuildSpecInProgress;
|
|
99
47
|
logger.section('Attach Project Item');
|
|
100
|
-
logger.info(`Attaching current branch '${currentBranch}' to ${projectItemUrl}`);
|
|
101
|
-
if (stackBranch) {
|
|
102
|
-
logger.info(`Stacked workflow recorded: stacked on ${stackBranch}, PR will target ${prTargetBranch}`);
|
|
48
|
+
logger.info(`Attaching current branch '${currentBranch}' to ${projectItemUrl} (state: ${workflowState})`);
|
|
49
|
+
if (choices.stackBranch) {
|
|
50
|
+
logger.info(`Stacked workflow recorded: stacked on ${choices.stackBranch}, PR will target ${prTargetBranch}`);
|
|
103
51
|
}
|
|
104
|
-
// Update the item's workflow status on idea1.ai.
|
|
105
|
-
await claude.setWorkflowStatus(projectItemUrl, 'Agent Implementation');
|
|
106
52
|
// Persist per-branch metadata (git config fast-path + committed JSON file).
|
|
107
53
|
// These must be stored before commitBranchMetadata so it gathers all values.
|
|
108
|
-
await git.storeWorkflowState(
|
|
109
|
-
await git.storeDevWorkflowType(workflowType, currentBranch);
|
|
110
|
-
if (stackBranch) {
|
|
111
|
-
await git.storeStackBranch(stackBranch, currentBranch);
|
|
54
|
+
await git.storeWorkflowState(workflowState, currentBranch);
|
|
55
|
+
await git.storeDevWorkflowType(choices.workflowType, currentBranch);
|
|
56
|
+
if (choices.stackBranch) {
|
|
57
|
+
await git.storeStackBranch(choices.stackBranch, currentBranch);
|
|
112
58
|
}
|
|
113
|
-
if (integrationSelection) {
|
|
114
|
-
await git.storeIntegrationBranch(integrationSelection.integrationBranchName, currentBranch);
|
|
59
|
+
if (choices.integrationSelection) {
|
|
60
|
+
await git.storeIntegrationBranch(choices.integrationSelection.integrationBranchName, currentBranch);
|
|
115
61
|
}
|
|
116
62
|
await git.storeProjectItemUrl(projectItemUrl, currentBranch);
|
|
117
63
|
await git.storeBaseBranch(prTargetBranch, currentBranch);
|
|
118
|
-
// Commit the metadata file on the branch and push so the branch is up to date
|
|
119
|
-
// with its metadata and visible on the remote for PR creation.
|
|
120
64
|
const repoRoot = await git.getRepoRoot();
|
|
121
65
|
await git.commitBranchMetadata(repoRoot, currentBranch, projectItemUrl);
|
|
122
66
|
await git.pushToRemote(currentBranch);
|
|
123
|
-
//
|
|
124
|
-
|
|
67
|
+
// Record the branch on the item so the web client can find it.
|
|
68
|
+
await claude.setWorkflowStatus(projectItemUrl, workflowState, currentBranch);
|
|
69
|
+
// A branch attached at an implementation state that already has a PR in the
|
|
70
|
+
// workflow gets one now, as entering Dev Implementation would have created it.
|
|
71
|
+
if (isStateAtOrAfter(workflowState, WorkflowStates.DevImplementation)) {
|
|
72
|
+
const prInfo = await github.createPrIfNeeded(currentBranch, prTargetBranch, projectItemUrl);
|
|
73
|
+
if (prInfo) {
|
|
74
|
+
logger.hint(`PR: ${prInfo.url}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
125
77
|
logger.success(`Attached ${currentBranch} to ${projectItemUrl}`);
|
|
126
78
|
logger.newline();
|
|
127
79
|
logger.hint('Use `idea1 next` to transition to the next workflow step when ready.');
|
|
128
|
-
if (prInfo) {
|
|
129
|
-
logger.hint(`PR: ${prInfo.url}`);
|
|
130
|
-
}
|
|
131
80
|
}
|
|
132
81
|
};
|
|
133
82
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-project-item.js","sourceRoot":"","sources":["../../src/commands/attach-project-item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"attach-project-item.js","sourceRoot":"","sources":["../../src/commands/attach-project-item.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-worktree.d.ts","sourceRoot":"","sources":["../../src/commands/close-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"close-worktree.d.ts","sourceRoot":"","sources":["../../src/commands/close-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AA+CjD,eAAO,MAAM,oBAAoB,EAAE,OAqIlC,CAAC"}
|
|
@@ -5,6 +5,7 @@ import * as claude from '../services/claude.js';
|
|
|
5
5
|
import { configService } from '../services/config.js';
|
|
6
6
|
import { removeCurrentWorktree } from '../services/worktree.js';
|
|
7
7
|
import { promptProjectItemUrl, promptConfirm } from '../lib/prompt.js';
|
|
8
|
+
import { WorkflowStates } from '../lib/workflow-states.js';
|
|
8
9
|
/**
|
|
9
10
|
* Resolve base branch using hierarchical resolution:
|
|
10
11
|
* 1. Command-line parameter (if provided)
|
|
@@ -107,7 +108,7 @@ export const closeWorktreeCommand = {
|
|
|
107
108
|
}
|
|
108
109
|
// Update workflow state and commit metadata before push
|
|
109
110
|
if (projectItemUrl) {
|
|
110
|
-
await git.storeWorkflowState(
|
|
111
|
+
await git.storeWorkflowState(WorkflowStates.DevImplementation, fullBranchName);
|
|
111
112
|
await git.commitBranchMetadataIfChanged(fullBranchName);
|
|
112
113
|
}
|
|
113
114
|
// Push all commits (code + metadata) to remote
|
|
@@ -130,7 +131,7 @@ export const closeWorktreeCommand = {
|
|
|
130
131
|
}
|
|
131
132
|
// Update idea1.ai workflow status to "Dev Implementation"
|
|
132
133
|
if (projectItemUrl) {
|
|
133
|
-
await claude.setWorkflowStatus(projectItemUrl,
|
|
134
|
+
await claude.setWorkflowStatus(projectItemUrl, WorkflowStates.DevImplementation);
|
|
134
135
|
}
|
|
135
136
|
// Remove the worktree and return to the main repo root
|
|
136
137
|
await removeCurrentWorktree(mainRepoRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-worktree.js","sourceRoot":"","sources":["../../src/commands/close-worktree.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,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"close-worktree.js","sourceRoot":"","sources":["../../src/commands/close-worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAMjD,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAMjD,eAAO,MAAM,WAAW,EAAE,OAwIzB,CAAC"}
|
package/dist/commands/help.js
CHANGED
|
@@ -12,21 +12,23 @@ export const helpCommand = {
|
|
|
12
12
|
// Print workflow overview
|
|
13
13
|
console.log(chalk.bold('WORKFLOW OVERVIEW:'));
|
|
14
14
|
console.log();
|
|
15
|
-
console.log('
|
|
15
|
+
console.log(' Every project item moves through these states, in order:');
|
|
16
16
|
console.log();
|
|
17
|
-
console.log(` ${chalk.
|
|
17
|
+
console.log(` ${chalk.gray('Build Spec in Progress')} → ${chalk.gray('Refinement - Build Spec')} → ${chalk.gray('Refinement - Implementation')} → ${chalk.cyan('Ready for Agent Implementation')}`);
|
|
18
|
+
console.log(` → ${chalk.yellow('Agent Implementation')} → ${chalk.blue('Dev Implementation')} → ${chalk.magenta('Needs Approval for Release')} → ${chalk.green('Approved and Merged')} → ${chalk.green('Released')}`);
|
|
18
19
|
console.log();
|
|
19
|
-
console.log(
|
|
20
|
-
console.log(
|
|
20
|
+
console.log(' An item under workflow management has a branch carrying .idea1/<branch>.json with its');
|
|
21
|
+
console.log(' current state, so the CLI and the idea1.ai web client stay in sync. Entering a state runs');
|
|
22
|
+
console.log(' that state\'s automation; only "Agent Implementation" launches Claude to write code.');
|
|
21
23
|
console.log();
|
|
22
|
-
console.log('
|
|
23
|
-
console.log();
|
|
24
|
-
console.log(` ${chalk.bold('start-
|
|
25
|
-
console.log(` ${chalk.bold('start-dev-implementation')}
|
|
26
|
-
console.log(` ${chalk.bold('ready-for-approval')}
|
|
27
|
-
console.log(` ${chalk.bold('approve-pr')}
|
|
28
|
-
console.log(` ${chalk.bold('
|
|
29
|
-
console.log(` ${chalk.bold('update-branch')}
|
|
24
|
+
console.log(` ${chalk.bold('start')} Put an item under workflow management (branch + metadata, no code)`);
|
|
25
|
+
console.log(` ${chalk.bold('next-workflow-step')} Advance to the next state and run its automation`);
|
|
26
|
+
console.log(` ${chalk.bold('start-agent-implementation')} Jump to Agent Implementation: worktree + Claude (alias: start-project-item)`);
|
|
27
|
+
console.log(` ${chalk.bold('start-dev-implementation')} Commit agent work, create PR, close worktree`);
|
|
28
|
+
console.log(` ${chalk.bold('ready-for-approval')} Mark PR ready for review, optionally assign + request reviewers`);
|
|
29
|
+
console.log(` ${chalk.bold('approve-pr')} Approve, merge PR, clean up branch`);
|
|
30
|
+
console.log(` ${chalk.bold('join-project-item')} Set up a working environment on an item\'s existing branch`);
|
|
31
|
+
console.log(` ${chalk.bold('update-branch')} Merge latest from source branch into current branch`);
|
|
30
32
|
console.log();
|
|
31
33
|
// Print branching workflows
|
|
32
34
|
console.log(chalk.bold('BRANCHING WORKFLOWS:'));
|
|
@@ -111,8 +113,9 @@ export const helpCommand = {
|
|
|
111
113
|
console.log();
|
|
112
114
|
console.log(chalk.bold('EXAMPLES:'));
|
|
113
115
|
console.log(' idea1 start --url https://app.idea1.ai/project/items/590');
|
|
114
|
-
console.log(' idea1
|
|
115
|
-
console.log(' idea1 start --url https://app.idea1.ai/project/items/590
|
|
116
|
+
console.log(' idea1 next --url https://app.idea1.ai/project/items/590');
|
|
117
|
+
console.log(' idea1 start-agent-implementation --url https://app.idea1.ai/project/items/590');
|
|
118
|
+
console.log(' idea1 start-agent-implementation --url https://app.idea1.ai/project/items/590 -w integration');
|
|
116
119
|
console.log(' idea1 update-branch');
|
|
117
120
|
console.log(' idea1 next');
|
|
118
121
|
console.log(' idea1 ready-for-approval --assignee octocat --reviewers octocat,hubot');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,uBAAuB;IAEpC,KAAK,CAAC,OAAO,CAAC,SAAiC;QAC7C,qBAAqB;QACrB,UAAU,EAAE,CAAC;QAEb,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,uBAAuB;IAEpC,KAAK,CAAC,OAAO,CAAC,SAAiC;QAC7C,qBAAqB;QACrB,UAAU,EAAE,CAAC;QAEb,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;QAC7M,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClO,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC;QACvG,OAAO,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC;QACtG,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,2FAA2F,CAAC,CAAC;QACnI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,4DAA4D,CAAC,CAAC;QACjH,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,+EAA+E,CAAC,CAAC;QAC5I,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,kDAAkD,CAAC,CAAC;QAC7G,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,2EAA2E,CAAC,CAAC;QAChI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,sDAAsD,CAAC,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,uEAAuE,CAAC,CAAC;QAC3H,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,oEAAoE,CAAC,CAAC;QACpH,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,4BAA4B;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,EAAE,CAAC,CAAC;QACzG,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,EAAE,CAAC,CAAC;QACjH,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,sBAAsB;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,2BAA2B;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;QAC3H,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEpF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAE5C,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;gBAExD,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAQ,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS;wBAC5B,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,OAAO,MAAM,CAAC,QAAQ,EAAE;wBAC9C,CAAC,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAE/B,IAAI,WAAW,GAAG,EAAE,CAAC;oBACrB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAClB,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBACrC,CAAC;yBAAM,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;wBAC7C,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;wBACzG,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrE,CAAC;yBAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBAC3B,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACzC,CAAC;oBAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,sEAAsE,CAAC,CAAC;QAC3H,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,kEAAkE,CAAC,CAAC;QACzH,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,4DAA4D,CAAC,CAAC;QAC9H,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,6CAA6C,CAAC,CAAC;QACjH,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,uCAAuC,CAAC,CAAC;QAC/G,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,2FAA2F,CAAC,CAAC;QAC3J,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAAC;QACpH,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAC;QAC9G,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACrF,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;CACF,CAAC"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Command } from '../types/index.js';
|
|
2
|
-
import {
|
|
2
|
+
import { startCommand } from './start.js';
|
|
3
|
+
import { startAgentImplementationCommand } from './start-agent-implementation.js';
|
|
3
4
|
import { joinProjectItemCommand } from './join-project-item.js';
|
|
4
5
|
import { attachProjectItemCommand } from './attach-project-item.js';
|
|
5
6
|
import { closeWorktreeCommand } from './close-worktree.js';
|
|
@@ -25,5 +26,5 @@ export declare function getAllCommands(): Command[];
|
|
|
25
26
|
* Get all command names and aliases for autocomplete
|
|
26
27
|
*/
|
|
27
28
|
export declare function getAllCommandNamesAndAliases(): string[];
|
|
28
|
-
export {
|
|
29
|
+
export { startCommand, startAgentImplementationCommand, joinProjectItemCommand, attachProjectItemCommand, closeWorktreeCommand, createWorktreeCommand, pushCommand, helpCommand, releaseCommand, startDevImplementationCommand, readyForApprovalCommand, approvePrCommand, nextWorkflowStepCommand, updateBranchCommand, getProjectItemUrlCommand };
|
|
29
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAyCrE;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEnE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,EAAE,CAM1C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,EAAE,CAEvD;AAED,OAAO,EACL,YAAY,EACZ,+BAA+B,EAC/B,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,cAAc,EACd,6BAA6B,EAC7B,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACzB,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { startCommand } from './start.js';
|
|
2
|
+
import { startAgentImplementationCommand } from './start-agent-implementation.js';
|
|
2
3
|
import { joinProjectItemCommand } from './join-project-item.js';
|
|
3
4
|
import { attachProjectItemCommand } from './attach-project-item.js';
|
|
4
5
|
import { closeWorktreeCommand } from './close-worktree.js';
|
|
@@ -29,7 +30,8 @@ function registerCommand(command) {
|
|
|
29
30
|
}
|
|
30
31
|
// Register all commands
|
|
31
32
|
registerCommand(helpCommand);
|
|
32
|
-
registerCommand(
|
|
33
|
+
registerCommand(startCommand);
|
|
34
|
+
registerCommand(startAgentImplementationCommand);
|
|
33
35
|
registerCommand(joinProjectItemCommand);
|
|
34
36
|
registerCommand(attachProjectItemCommand);
|
|
35
37
|
registerCommand(startDevImplementationCommand);
|
|
@@ -66,5 +68,5 @@ export function getAllCommands() {
|
|
|
66
68
|
export function getAllCommandNamesAndAliases() {
|
|
67
69
|
return Array.from(commandRegistry.keys());
|
|
68
70
|
}
|
|
69
|
-
export {
|
|
71
|
+
export { startCommand, startAgentImplementationCommand, joinProjectItemCommand, attachProjectItemCommand, closeWorktreeCommand, createWorktreeCommand, pushCommand, helpCommand, releaseCommand, startDevImplementationCommand, readyForApprovalCommand, approvePrCommand, nextWorkflowStepCommand, updateBranchCommand, getProjectItemUrlCommand };
|
|
70
72
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-project-item.d.ts","sourceRoot":"","sources":["../../src/commands/join-project-item.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"join-project-item.d.ts","sourceRoot":"","sources":["../../src/commands/join-project-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,mBAAmB,CAAC;AAYjE,eAAO,MAAM,sBAAsB,EAAE,OA8GpC,CAAC"}
|
|
@@ -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) {
|