@idea1/cli 1.7.6 → 1.8.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 +126 -60
- package/dist/cli/named-lists.d.ts.map +1 -1
- package/dist/cli/named-lists.js +5 -0
- package/dist/cli/named-lists.js.map +1 -1
- package/dist/commands/approve-pr.d.ts.map +1 -1
- package/dist/commands/approve-pr.js +94 -8
- 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 +28 -41
- 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 +50 -84
- 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 +1 -4
- package/dist/commands/create-worktree.js.map +1 -1
- package/dist/commands/get-project-item-url.d.ts.map +1 -1
- package/dist/commands/get-project-item-url.js +3 -1
- package/dist/commands/get-project-item-url.js.map +1 -1
- package/dist/commands/help.js +13 -13
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +1 -2
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -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 +18 -60
- 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 +16 -22
- package/dist/commands/next-workflow-step.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +4 -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 +94 -8
- package/dist/commands/ready-for-approval.js.map +1 -1
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +4 -15
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/start-agent-implementation.d.ts.map +1 -1
- package/dist/commands/start-agent-implementation.js +10 -13
- 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 +7 -8
- package/dist/commands/start-dev-implementation.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +21 -15
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/update-branch.d.ts.map +1 -1
- package/dist/commands/update-branch.js +28 -75
- package/dist/commands/update-branch.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +11 -23
- package/dist/interactive.js.map +1 -1
- package/dist/lib/claude-options.d.ts +11 -10
- package/dist/lib/claude-options.d.ts.map +1 -1
- package/dist/lib/claude-options.js +38 -39
- package/dist/lib/claude-options.js.map +1 -1
- package/dist/lib/settings.d.ts +23 -27
- package/dist/lib/settings.d.ts.map +1 -1
- package/dist/lib/settings.js +35 -50
- package/dist/lib/settings.js.map +1 -1
- package/dist/prompts/platform-prompts.d.ts +30 -0
- package/dist/prompts/platform-prompts.d.ts.map +1 -0
- package/dist/prompts/platform-prompts.js +38 -0
- package/dist/prompts/platform-prompts.js.map +1 -0
- package/dist/prompts/project-item-prompts.d.ts +44 -0
- package/dist/prompts/project-item-prompts.d.ts.map +1 -0
- package/dist/prompts/project-item-prompts.js +41 -0
- package/dist/prompts/project-item-prompts.js.map +1 -0
- package/dist/services/claude.d.ts +27 -33
- package/dist/services/claude.d.ts.map +1 -1
- package/dist/services/claude.js +40 -140
- package/dist/services/claude.js.map +1 -1
- package/dist/services/git.d.ts +24 -121
- package/dist/services/git.d.ts.map +1 -1
- package/dist/services/git.js +73 -470
- package/dist/services/git.js.map +1 -1
- package/dist/services/github.d.ts +20 -4
- package/dist/services/github.d.ts.map +1 -1
- package/dist/services/github.js +77 -6
- package/dist/services/github.js.map +1 -1
- package/dist/services/platform.d.ts +75 -0
- package/dist/services/platform.d.ts.map +1 -0
- package/dist/services/platform.js +237 -0
- package/dist/services/platform.js.map +1 -0
- package/dist/services/setup.d.ts +1 -1
- package/dist/services/setup.js +1 -1
- package/dist/services/template-renderer.d.ts +10 -0
- package/dist/services/template-renderer.d.ts.map +1 -0
- package/dist/services/template-renderer.js +20 -0
- package/dist/services/template-renderer.js.map +1 -0
- package/dist/services/worktree.d.ts +17 -16
- package/dist/services/worktree.d.ts.map +1 -1
- package/dist/services/worktree.js +41 -65
- package/dist/services/worktree.js.map +1 -1
- package/dist/types/index.d.ts +14 -58
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workflow/data/project-item.d.ts +21 -0
- package/dist/workflow/data/project-item.d.ts.map +1 -0
- package/dist/workflow/data/project-item.js +2 -0
- package/dist/workflow/data/project-item.js.map +1 -0
- package/dist/workflow/data/workflow-context.d.ts +46 -0
- package/dist/workflow/data/workflow-context.d.ts.map +1 -0
- package/dist/workflow/data/workflow-context.js +14 -0
- package/dist/workflow/data/workflow-context.js.map +1 -0
- package/dist/{lib → workflow/data}/workflow-states.d.ts +1 -1
- package/dist/workflow/data/workflow-states.d.ts.map +1 -0
- package/dist/{lib → workflow/data}/workflow-states.generated.d.ts +1 -1
- package/dist/workflow/data/workflow-states.generated.d.ts.map +1 -0
- package/dist/{lib → workflow/data}/workflow-states.generated.js +1 -1
- package/dist/workflow/data/workflow-states.generated.js.map +1 -0
- package/dist/{lib → workflow/data}/workflow-states.js +1 -1
- package/dist/workflow/data/workflow-states.js.map +1 -0
- package/dist/workflow/engine/approval-flow.d.ts +53 -0
- package/dist/workflow/engine/approval-flow.d.ts.map +1 -0
- package/dist/workflow/engine/approval-flow.js +111 -0
- package/dist/workflow/engine/approval-flow.js.map +1 -0
- package/dist/{services → workflow/engine}/branch-setup.d.ts +2 -1
- package/dist/workflow/engine/branch-setup.d.ts.map +1 -0
- package/dist/{services → workflow/engine}/branch-setup.js +6 -5
- package/dist/workflow/engine/branch-setup.js.map +1 -0
- package/dist/workflow/engine/handlers/agent-implementation.d.ts +10 -0
- package/dist/workflow/engine/handlers/agent-implementation.d.ts.map +1 -0
- package/dist/workflow/engine/handlers/agent-implementation.js +42 -0
- package/dist/workflow/engine/handlers/agent-implementation.js.map +1 -0
- package/dist/{services/workflow-handlers → workflow/engine/handlers}/approve-pr.d.ts +7 -4
- package/dist/workflow/engine/handlers/approve-pr.d.ts.map +1 -0
- package/dist/workflow/engine/handlers/approve-pr.js +63 -0
- package/dist/workflow/engine/handlers/approve-pr.js.map +1 -0
- package/dist/{services/workflow-handlers → workflow/engine/handlers}/dev-implementation.d.ts +3 -2
- package/dist/workflow/engine/handlers/dev-implementation.d.ts.map +1 -0
- package/dist/workflow/engine/handlers/dev-implementation.js +36 -0
- package/dist/workflow/engine/handlers/dev-implementation.js.map +1 -0
- package/dist/workflow/engine/handlers/index.d.ts +21 -0
- package/dist/workflow/engine/handlers/index.d.ts.map +1 -0
- package/dist/{services/workflow-handlers → workflow/engine/handlers}/index.js +10 -6
- package/dist/workflow/engine/handlers/index.js.map +1 -0
- package/dist/workflow/engine/handlers/ready-for-approval.d.ts +11 -0
- package/dist/workflow/engine/handlers/ready-for-approval.d.ts.map +1 -0
- package/dist/workflow/engine/handlers/ready-for-approval.js +56 -0
- package/dist/workflow/engine/handlers/ready-for-approval.js.map +1 -0
- package/dist/{services → workflow/engine}/release-flow.d.ts +19 -10
- package/dist/workflow/engine/release-flow.d.ts.map +1 -0
- package/dist/{services → workflow/engine}/release-flow.js +33 -16
- package/dist/workflow/engine/release-flow.js.map +1 -0
- package/dist/workflow/engine/workflow-engine.d.ts +162 -0
- package/dist/workflow/engine/workflow-engine.d.ts.map +1 -0
- package/dist/workflow/engine/workflow-engine.js +405 -0
- package/dist/workflow/engine/workflow-engine.js.map +1 -0
- package/package.json +2 -1
- 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/lib/workflow-states.d.ts.map +0 -1
- package/dist/lib/workflow-states.generated.d.ts.map +0 -1
- package/dist/lib/workflow-states.generated.js.map +0 -1
- package/dist/lib/workflow-states.js.map +0 -1
- package/dist/services/branch-setup.d.ts.map +0 -1
- package/dist/services/branch-setup.js.map +0 -1
- package/dist/services/context.d.ts +0 -26
- package/dist/services/context.d.ts.map +0 -1
- package/dist/services/context.js +0 -304
- package/dist/services/context.js.map +0 -1
- package/dist/services/release-flow.d.ts.map +0 -1
- package/dist/services/release-flow.js.map +0 -1
- package/dist/services/workflow-engine.d.ts +0 -67
- package/dist/services/workflow-engine.d.ts.map +0 -1
- package/dist/services/workflow-engine.js +0 -371
- package/dist/services/workflow-engine.js.map +0 -1
- package/dist/services/workflow-handlers/agent-implementation.d.ts +0 -9
- package/dist/services/workflow-handlers/agent-implementation.d.ts.map +0 -1
- package/dist/services/workflow-handlers/agent-implementation.js +0 -38
- package/dist/services/workflow-handlers/agent-implementation.js.map +0 -1
- package/dist/services/workflow-handlers/approve-pr.d.ts.map +0 -1
- package/dist/services/workflow-handlers/approve-pr.js +0 -122
- package/dist/services/workflow-handlers/approve-pr.js.map +0 -1
- package/dist/services/workflow-handlers/dev-implementation.d.ts.map +0 -1
- package/dist/services/workflow-handlers/dev-implementation.js +0 -34
- package/dist/services/workflow-handlers/dev-implementation.js.map +0 -1
- package/dist/services/workflow-handlers/index.d.ts +0 -18
- package/dist/services/workflow-handlers/index.d.ts.map +0 -1
- package/dist/services/workflow-handlers/index.js.map +0 -1
- package/dist/services/workflow-handlers/ready-for-approval.d.ts +0 -10
- package/dist/services/workflow-handlers/ready-for-approval.d.ts.map +0 -1
- package/dist/services/workflow-handlers/ready-for-approval.js +0 -59
- package/dist/services/workflow-handlers/ready-for-approval.js.map +0 -1
- package/dist/services/workflow.d.ts +0 -14
- package/dist/services/workflow.d.ts.map +0 -1
- package/dist/services/workflow.js +0 -37
- package/dist/services/workflow.js.map +0 -1
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { logger } from '../lib/logger.js';
|
|
2
|
+
import { AgentErrorResponse, validateAgentResponse } from '../lib/agent-core.js';
|
|
3
|
+
import { isProjectItemUrl } from '../lib/project-item-url.js';
|
|
4
|
+
import { createProjectItemPrompt, generateBranchNamePrompt, getProjectItemSummaryForBranchPrompt, getProjectItemSummaryPrompt, listProjectsPrompt, setWorkflowStatusPrompt, upsertProjectItemWorkflowContextPrompt } from '../prompts/platform-prompts.js';
|
|
5
|
+
import * as claude from './claude.js';
|
|
6
|
+
/**
|
|
7
|
+
* The CLI's access to the Idea1 cloud platform (app.idea1.ai / api.idea1.ai): reading a project
|
|
8
|
+
* item's summary (by item or by branch), recording the item's workflow context, setting its workflow
|
|
9
|
+
* status, creating items, listing the team's Projects, deriving a branch name from an item. Callers use `platform.someFunction()` and know
|
|
10
|
+
* nothing about the transport.
|
|
11
|
+
*
|
|
12
|
+
* Today the transport is Claude Code driving the Idea1 MCP tools. That is an implementation detail
|
|
13
|
+
* of this module - it may be replaced by authenticated calls to the platform's HTTP API without
|
|
14
|
+
* touching any caller. Because these are simple tool calls rather than implementation sessions,
|
|
15
|
+
* every Claude run here uses PLATFORM_CALL_RUN_OPTIONS. The prompts are the templates in
|
|
16
|
+
* `src/prompts/platform-prompts.ts`; this module owns the output schemas their answers are read with.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Model and effort for every platform call: a small, fast model at medium effort is all a
|
|
20
|
+
* single MCP tool call needs, and pinning it keeps these calls consistent and cheap.
|
|
21
|
+
*/
|
|
22
|
+
export const PLATFORM_CALL_RUN_OPTIONS = { model: 'sonnet', effort: 'medium' };
|
|
23
|
+
/**
|
|
24
|
+
* Run a platform call with a JSON schema, returning the parsed structured output.
|
|
25
|
+
*/
|
|
26
|
+
async function callStructured(prompt, jsonSchema) {
|
|
27
|
+
return claude.runStructured(prompt, jsonSchema, PLATFORM_CALL_RUN_OPTIONS);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run a platform call whose answer is a single string; a model refusal throws AgentErrorResponse.
|
|
31
|
+
*/
|
|
32
|
+
async function callForResult(prompt) {
|
|
33
|
+
return claude.runWithPrompt(prompt, PLATFORM_CALL_RUN_OPTIONS);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Record a workflow state on an idea1.ai project item. The item must be under workflow management
|
|
37
|
+
* (have a workflow context); the workflow engine is the only caller, as the persist step of a
|
|
38
|
+
* transition.
|
|
39
|
+
*/
|
|
40
|
+
export async function setWorkflowStatus(itemUrl, status) {
|
|
41
|
+
const hasClaude = await claude.ensureClaudeCli();
|
|
42
|
+
if (!hasClaude) {
|
|
43
|
+
logger.warning('Claude CLI not available, skipping workflow status update');
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
logger.step(`Setting workflow status to "${status}"...`);
|
|
47
|
+
try {
|
|
48
|
+
await callForResult(setWorkflowStatusPrompt({ projectItemUrl: itemUrl, workflowStatus: status }));
|
|
49
|
+
logger.success(`Workflow status updated to "${status}"`);
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const message = error instanceof AgentErrorResponse
|
|
54
|
+
? `Model could not update workflow status: ${error.message}`
|
|
55
|
+
: `Could not update workflow status: ${error.message}`;
|
|
56
|
+
logger.warning(message);
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The summary of the project item a branch implements: null for a branch outside workflow
|
|
62
|
+
* management. The repository is always named; nothing defaults it.
|
|
63
|
+
*/
|
|
64
|
+
export async function getProjectItemSummaryForBranch(query) {
|
|
65
|
+
const hasClaude = await claude.ensureClaudeCli();
|
|
66
|
+
if (!hasClaude) {
|
|
67
|
+
throw new Error('Claude CLI is required to read the project item of a branch from idea1.ai');
|
|
68
|
+
}
|
|
69
|
+
logger.step(`Reading the project item of ${query.branchName} from idea1.ai...`);
|
|
70
|
+
const output = await callStructured(getProjectItemSummaryForBranchPrompt(query), projectItemSummaryOutputSchema);
|
|
71
|
+
return readProjectItemSummaryOutput(output, error => /not under workflow management/i.test(error));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The summary of a project item: its `workflowContext` is null while the item is outside workflow
|
|
75
|
+
* management.
|
|
76
|
+
*/
|
|
77
|
+
export async function getProjectItemSummary(itemUrl) {
|
|
78
|
+
const hasClaude = await claude.ensureClaudeCli();
|
|
79
|
+
if (!hasClaude) {
|
|
80
|
+
throw new Error('Claude CLI is required to read a project item from idea1.ai');
|
|
81
|
+
}
|
|
82
|
+
logger.step(`Reading ${itemUrl} from idea1.ai...`);
|
|
83
|
+
const output = await callStructured(getProjectItemSummaryPrompt({ projectItemUrl: itemUrl }), projectItemSummaryOutputSchema);
|
|
84
|
+
const summary = readProjectItemSummaryOutput(output, () => false);
|
|
85
|
+
if (!summary) {
|
|
86
|
+
throw new Error(`idea1.ai returned no project item for ${itemUrl}`);
|
|
87
|
+
}
|
|
88
|
+
return summary;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Record a branch in a project item's workflow context as the one implementing the item, putting
|
|
92
|
+
* the item under workflow management when it is not yet: a new context starts at the first
|
|
93
|
+
* workflow state, an existing one keeps its status and takes the branch as its live branch. The
|
|
94
|
+
* status is never set here. Idempotent for the same branch and item; a branch another item holds is
|
|
95
|
+
* refused by the platform, which surfaces here as an error.
|
|
96
|
+
*/
|
|
97
|
+
export async function upsertProjectItemWorkflowContext(input) {
|
|
98
|
+
const hasClaude = await claude.ensureClaudeCli();
|
|
99
|
+
if (!hasClaude) {
|
|
100
|
+
throw new Error('Claude CLI is required to record the workflow context on idea1.ai');
|
|
101
|
+
}
|
|
102
|
+
logger.step(`Recording ${input.branchName} as the branch of ${input.projectItemUrl} on idea1.ai...`);
|
|
103
|
+
const output = await callStructured(upsertProjectItemWorkflowContextPrompt(input), projectItemSummaryOutputSchema);
|
|
104
|
+
const summary = readProjectItemSummaryOutput(output, () => false);
|
|
105
|
+
if (!summary?.workflowContext) {
|
|
106
|
+
throw new Error('The platform returned no workflow context after recording the branch');
|
|
107
|
+
}
|
|
108
|
+
return summary;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The summary an output carries. An error `isAbsence` recognizes as "the platform has no such
|
|
112
|
+
* item" yields null; any other error is thrown.
|
|
113
|
+
*/
|
|
114
|
+
function readProjectItemSummaryOutput(output, isAbsence) {
|
|
115
|
+
if (typeof output.error === 'string' && output.error.trim().length > 0) {
|
|
116
|
+
if (isAbsence(output.error)) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
throw new Error(`idea1.ai: ${output.error.trim()}`);
|
|
120
|
+
}
|
|
121
|
+
const summary = output.projectItemSummary;
|
|
122
|
+
if (!summary || typeof summary.url !== 'string' || !isProjectItemUrl(summary.url)) {
|
|
123
|
+
throw new Error(`Claude did not return a valid project item summary: ${JSON.stringify(output.projectItemSummary)}`);
|
|
124
|
+
}
|
|
125
|
+
return summary;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* JSON schema for the project-item-summary structured output (`ProjectItemSummary` or an error).
|
|
129
|
+
*/
|
|
130
|
+
const projectItemSummaryOutputSchema = {
|
|
131
|
+
type: 'object',
|
|
132
|
+
properties: {
|
|
133
|
+
projectItemSummary: {
|
|
134
|
+
type: ['object', 'null'],
|
|
135
|
+
description: 'The project item summary the tool returned, or null when it returned an error',
|
|
136
|
+
properties: {
|
|
137
|
+
url: { type: 'string' },
|
|
138
|
+
externalId: { type: 'integer' },
|
|
139
|
+
title: { type: 'string' },
|
|
140
|
+
epicId: { type: ['string', 'null'] },
|
|
141
|
+
completionDate: { type: ['string', 'null'] },
|
|
142
|
+
legacyWorkflowStatus: { type: 'string' },
|
|
143
|
+
workflowContext: {
|
|
144
|
+
type: ['object', 'null'],
|
|
145
|
+
properties: {
|
|
146
|
+
workflowStatus: { type: 'string' },
|
|
147
|
+
codingAgentUrl: { type: 'string' },
|
|
148
|
+
pullRequestUrl: { type: 'string' },
|
|
149
|
+
repositoryFullName: { type: 'string' },
|
|
150
|
+
branchName: { type: 'string' },
|
|
151
|
+
baseBranch: { type: 'string' },
|
|
152
|
+
devWorkflowType: { type: 'string', enum: ['independent', 'integration'] },
|
|
153
|
+
stackBranch: { type: ['string', 'null'] },
|
|
154
|
+
integrationBranch: { type: ['string', 'null'] },
|
|
155
|
+
branchState: { type: 'integer', enum: [0, 1, 2], description: '0 Live, 1 Merged, 2 Deleted' }
|
|
156
|
+
},
|
|
157
|
+
required: ['workflowStatus', 'codingAgentUrl', 'pullRequestUrl', 'repositoryFullName', 'branchName', 'baseBranch', 'devWorkflowType', 'stackBranch', 'integrationBranch', 'branchState'],
|
|
158
|
+
additionalProperties: false
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
required: ['url', 'externalId', 'title', 'epicId', 'completionDate', 'legacyWorkflowStatus', 'workflowContext'],
|
|
162
|
+
additionalProperties: false
|
|
163
|
+
},
|
|
164
|
+
error: { type: ['string', 'null'], description: 'The error the tool returned, verbatim, or null on success' }
|
|
165
|
+
},
|
|
166
|
+
required: ['projectItemSummary', 'error'],
|
|
167
|
+
additionalProperties: false
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Generate a branch name from a project item description
|
|
171
|
+
*/
|
|
172
|
+
export async function generateBranchName(itemUrl) {
|
|
173
|
+
const hasClaude = await claude.ensureClaudeCli();
|
|
174
|
+
if (!hasClaude) {
|
|
175
|
+
throw new Error('Claude CLI is required to generate branch names');
|
|
176
|
+
}
|
|
177
|
+
logger.step('Generating branch name from item description...');
|
|
178
|
+
const branchName = await callForResult(generateBranchNamePrompt({ projectItemUrl: itemUrl }));
|
|
179
|
+
// Clean up any extra whitespace/newlines
|
|
180
|
+
const cleanedName = branchName.replace(/\n/g, '').trim();
|
|
181
|
+
logger.dim(`Generated branch name: ${cleanedName}`);
|
|
182
|
+
return cleanedName;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* The names of the team's live Projects, most recently created first.
|
|
186
|
+
*/
|
|
187
|
+
export async function listProjects() {
|
|
188
|
+
logger.step('Reading the team\'s projects from idea1.ai...');
|
|
189
|
+
const output = await callStructured(listProjectsPrompt({}), listProjectsSchema);
|
|
190
|
+
const projects = Array.isArray(output.projects)
|
|
191
|
+
? output.projects.filter((name) => typeof name === 'string' && name.trim().length > 0).map(name => name.trim())
|
|
192
|
+
: [];
|
|
193
|
+
return projects;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* JSON schema for the list-projects structured output.
|
|
197
|
+
*/
|
|
198
|
+
const listProjectsSchema = {
|
|
199
|
+
type: 'object',
|
|
200
|
+
properties: {
|
|
201
|
+
projects: {
|
|
202
|
+
type: 'array',
|
|
203
|
+
description: 'The names of the live Idea1 projects, most recently created first',
|
|
204
|
+
items: { type: 'string' }
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
required: ['projects'],
|
|
208
|
+
additionalProperties: false
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Create a new idea1 project item with the given title in the named Project.
|
|
212
|
+
* The item is created with description `# <title>`.
|
|
213
|
+
* Returns the created item's URL.
|
|
214
|
+
*/
|
|
215
|
+
export async function createProjectItem(title, projectName) {
|
|
216
|
+
logger.step(`Creating project item "${title}" in project "${projectName}"...`);
|
|
217
|
+
const output = validateAgentResponse(await callStructured(createProjectItemPrompt({ title, projectName }), createProjectItemSchema));
|
|
218
|
+
const url = typeof output.projectItemUrl === 'string' ? output.projectItemUrl.trim() : '';
|
|
219
|
+
if (!isProjectItemUrl(url)) {
|
|
220
|
+
throw new Error(`Claude did not return a valid project item URL: ${JSON.stringify(output.projectItemUrl)}`);
|
|
221
|
+
}
|
|
222
|
+
logger.success(`Created project item: ${url}`);
|
|
223
|
+
return url;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* JSON schema for the create-project-item structured output.
|
|
227
|
+
*/
|
|
228
|
+
const createProjectItemSchema = {
|
|
229
|
+
type: 'object',
|
|
230
|
+
properties: {
|
|
231
|
+
projectItemUrl: { type: 'string', description: 'The URL of the created idea1 project item, or an empty string on failure' },
|
|
232
|
+
error: { type: ['string', 'null'], description: 'The error returned by create_item, or null when the item was created' }
|
|
233
|
+
},
|
|
234
|
+
required: ['projectItemUrl', 'error'],
|
|
235
|
+
additionalProperties: false
|
|
236
|
+
};
|
|
237
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/services/platform.ts"],"names":[],"mappings":"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"}
|
package/dist/services/setup.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Whether the repository has been set up: the settings file itself has to exist,
|
|
3
|
-
* not just the `.idea1` folder — a repo carrying only
|
|
3
|
+
* not just the `.idea1` folder — a repo carrying only other `.idea1` files would
|
|
4
4
|
* otherwise look set up and never get settings written.
|
|
5
5
|
*/
|
|
6
6
|
export declare function isSetupComplete(repoRoot: string): boolean;
|
package/dist/services/setup.js
CHANGED
|
@@ -108,7 +108,7 @@ individually, so overriding one hook or default leaves the rest in place.
|
|
|
108
108
|
`;
|
|
109
109
|
/**
|
|
110
110
|
* Whether the repository has been set up: the settings file itself has to exist,
|
|
111
|
-
* not just the `.idea1` folder — a repo carrying only
|
|
111
|
+
* not just the `.idea1` folder — a repo carrying only other `.idea1` files would
|
|
112
112
|
* otherwise look set up and never get settings written.
|
|
113
113
|
*/
|
|
114
114
|
export function isSetupComplete(repoRoot) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A compiled template: renders its model to text.
|
|
3
|
+
*/
|
|
4
|
+
export type RenderTemplate<TModel extends object> = (model: TModel) => string;
|
|
5
|
+
/**
|
|
6
|
+
* Compile a Handlebars template for rendering against models of one shape. Compilation is lazy,
|
|
7
|
+
* so templates can be compiled once where they are defined and rendered on each use.
|
|
8
|
+
*/
|
|
9
|
+
export declare function compileTemplate<TModel extends object>(templateText: string): RenderTemplate<TModel>;
|
|
10
|
+
//# sourceMappingURL=template-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-renderer.d.ts","sourceRoot":"","sources":["../../src/services/template-renderer.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,MAAM,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAE9E;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,SAAS,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAEnG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import Handlebars from 'handlebars';
|
|
2
|
+
/**
|
|
3
|
+
* Renders Handlebars templates against a data model: every prompt the CLI gives Claude is a
|
|
4
|
+
* template rendered here, whether it is built in or comes from a repository's `.idea1` settings.
|
|
5
|
+
*
|
|
6
|
+
* Templates render as plain text, so values are never HTML-escaped. Rendering is strict: a
|
|
7
|
+
* template that outputs a field its model does not have throws instead of rendering it empty, so a
|
|
8
|
+
* misspelled variable in a repository's prompt surfaces as an error. Models therefore carry every
|
|
9
|
+
* field they declare, with null for a value that is absent, and templates test those with
|
|
10
|
+
* `{{#if}}` before outputting them.
|
|
11
|
+
*/
|
|
12
|
+
const engine = Handlebars.create();
|
|
13
|
+
/**
|
|
14
|
+
* Compile a Handlebars template for rendering against models of one shape. Compilation is lazy,
|
|
15
|
+
* so templates can be compiled once where they are defined and rendered on each use.
|
|
16
|
+
*/
|
|
17
|
+
export function compileTemplate(templateText) {
|
|
18
|
+
return engine.compile(templateText, { noEscape: true, strict: true });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=template-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/services/template-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC;;;;;;;;;GASG;AAEH,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;AAOnC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAwB,YAAoB;IACzE,OAAO,MAAM,CAAC,OAAO,CAAS,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAChF,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ClaudePermissionMode, ClaudeEntryPointMode, ClaudeEffortLevel, ClaudeModel, IsolationMode
|
|
1
|
+
import type { ClaudePermissionMode, ClaudeEntryPointMode, ClaudeEffortLevel, ClaudeModel, IsolationMode } from '../types/index.js';
|
|
2
|
+
import { type WorkflowState } from '../workflow/data/workflow-states.js';
|
|
2
3
|
/**
|
|
3
4
|
* Run the setup-worktree hook if defined in .idea1/settings.json
|
|
4
5
|
*/
|
|
@@ -56,21 +57,21 @@ export declare function extractIntegrationName(fullBranchName: string): Promise<
|
|
|
56
57
|
*/
|
|
57
58
|
export declare function ensureIntegrationBranch(integrationBranchName: string, baseBranchName: string): Promise<void>;
|
|
58
59
|
/**
|
|
59
|
-
*
|
|
60
|
+
* How a project item's implementation session is started on its branch.
|
|
60
61
|
*/
|
|
61
|
-
export interface
|
|
62
|
-
projectItemUrl
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
export interface ImplementationSessionOptions {
|
|
63
|
+
projectItemUrl: string;
|
|
64
|
+
/** The rendered prompt the session starts with. */
|
|
65
|
+
prompt: string;
|
|
66
|
+
permissionMode: ClaudePermissionMode;
|
|
67
|
+
model: ClaudeModel;
|
|
68
|
+
effort: ClaudeEffortLevel;
|
|
69
|
+
claudeEntryPointMode: ClaudeEntryPointMode;
|
|
69
70
|
}
|
|
70
71
|
/**
|
|
71
|
-
* Setup worktree isolation - creates worktree
|
|
72
|
+
* Setup worktree isolation - creates worktree and runs hooks
|
|
72
73
|
*/
|
|
73
|
-
export declare function setupWorktreeIsolation(fullBranchName: string, shortBranchName: string, baseBranchName: string
|
|
74
|
+
export declare function setupWorktreeIsolation(fullBranchName: string, shortBranchName: string, baseBranchName: string): Promise<string>;
|
|
74
75
|
/**
|
|
75
76
|
* Ensure a branch has a local working environment: reuse the checkout that
|
|
76
77
|
* already holds it, or create one — an isolated worktree, or the branch checked
|
|
@@ -84,11 +85,11 @@ export declare function ensureBranchEnvironment(isolationMode: IsolationMode, br
|
|
|
84
85
|
created: boolean;
|
|
85
86
|
}>;
|
|
86
87
|
/**
|
|
87
|
-
*
|
|
88
|
-
* print the directory path and next-step hint. This is the only place the
|
|
89
|
-
* starts a Claude session that writes code.
|
|
88
|
+
* Start a project item's implementation session on its branch's working directory per the
|
|
89
|
+
* entry-point mode, then print the directory path and next-step hint. This is the only place the
|
|
90
|
+
* CLI starts a Claude session that writes code.
|
|
90
91
|
*/
|
|
91
|
-
export declare function launchClaudeForBranch(workingPath: string, options
|
|
92
|
+
export declare function launchClaudeForBranch(workingPath: string, options: ImplementationSessionOptions): Promise<void>;
|
|
92
93
|
/**
|
|
93
94
|
* Tell the user where the branch is checked out and how to move the workflow on.
|
|
94
95
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/services/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/services/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOnI,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAE3F;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB1E;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAejF;AAED;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE;IAAE,wBAAwB,EAAE,OAAO,CAAA;CAAE,GAC7C,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAyBD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/E;AAED;;;;GAIG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtE;AAgBD;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMzF;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAAC,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtH;AAED;;GAEG;AACH,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAazE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBpF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,qBAAqB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAclH;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,oBAAoB,CAAC;IACrC,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAgBpD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAarH;AAkBD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAMpE;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { basename } from 'path';
|
|
2
2
|
import { logger } from '../lib/logger.js';
|
|
3
3
|
import { execWithOutput, resolveBash } from '../lib/shell.js';
|
|
4
|
-
import { DEFAULT_BRANCH_SETTINGS, getSetupWorktreeHook,
|
|
4
|
+
import { DEFAULT_BRANCH_SETTINGS, getSetupWorktreeHook, getRemoveWorktreeAtState, readBranchSettings } from '../lib/settings.js';
|
|
5
5
|
import * as git from './git.js';
|
|
6
6
|
import * as claude from './claude.js';
|
|
7
|
-
import { isStateAtOrAfter } from '../
|
|
8
|
-
const DEFAULT_INTEGRATION_BRANCH_TEMPLATE = DEFAULT_BRANCH_SETTINGS.integrationBranchTemplate;
|
|
9
|
-
const DEFAULT_INTEGRATION_WORK_BRANCH_TEMPLATE = DEFAULT_BRANCH_SETTINGS.integrationWorkBranchTemplate;
|
|
7
|
+
import { isStateAtOrAfter } from '../workflow/data/workflow-states.js';
|
|
10
8
|
/**
|
|
11
9
|
* Run the setup-worktree hook if defined in .idea1/settings.json
|
|
12
10
|
*/
|
|
@@ -80,33 +78,24 @@ export async function removeWorktreeForWorkflowState(state, branchName, projectI
|
|
|
80
78
|
* `draft` must not be forced onto this repository's `working/release` by a
|
|
81
79
|
* value left in the user's config store.
|
|
82
80
|
*/
|
|
83
|
-
async function resolveBranchSetting(cliValue,
|
|
81
|
+
async function resolveBranchSetting(cliValue, select) {
|
|
84
82
|
if (cliValue) {
|
|
85
83
|
return cliValue;
|
|
86
84
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const settingsValue = await readSetting(repoRoot);
|
|
90
|
-
if (settingsValue) {
|
|
91
|
-
return settingsValue;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
// Not in a repo, use the built-in default
|
|
96
|
-
}
|
|
97
|
-
return fallback;
|
|
85
|
+
const repoRoot = await git.getRepoRoot().catch(() => null);
|
|
86
|
+
return select(repoRoot ? await readBranchSettings(repoRoot) : DEFAULT_BRANCH_SETTINGS);
|
|
98
87
|
}
|
|
99
88
|
/**
|
|
100
89
|
* Resolve the prefix new branches are created under
|
|
101
90
|
*/
|
|
102
91
|
export async function resolveBranchPrefix(cliPrefix) {
|
|
103
|
-
return resolveBranchSetting(cliPrefix,
|
|
92
|
+
return resolveBranchSetting(cliPrefix, settings => settings.branchPrefix);
|
|
104
93
|
}
|
|
105
94
|
/**
|
|
106
95
|
* Resolve the branch new branches are cut from and their pull requests target
|
|
107
96
|
*/
|
|
108
97
|
export async function resolveBaseBranch(cliBaseBranch) {
|
|
109
|
-
return resolveBranchSetting(cliBaseBranch,
|
|
98
|
+
return resolveBranchSetting(cliBaseBranch, settings => settings.baseBranch);
|
|
110
99
|
}
|
|
111
100
|
/**
|
|
112
101
|
* Resolve the integration branch prefix using config hierarchy:
|
|
@@ -114,39 +103,19 @@ export async function resolveBaseBranch(cliBaseBranch) {
|
|
|
114
103
|
* 2. Hardcoded default
|
|
115
104
|
*/
|
|
116
105
|
export async function resolveIntegrationBranchPrefix() {
|
|
117
|
-
return resolveBranchSetting(undefined,
|
|
106
|
+
return resolveBranchSetting(undefined, settings => settings.integrationBranchPrefix);
|
|
118
107
|
}
|
|
119
108
|
/**
|
|
120
109
|
* Resolve the integration branch template using config hierarchy
|
|
121
110
|
*/
|
|
122
111
|
async function resolveIntegrationBranchTemplate() {
|
|
123
|
-
|
|
124
|
-
const repoRoot = await git.getRepoRoot();
|
|
125
|
-
const settingsTemplate = await getIntegrationBranchTemplate(repoRoot);
|
|
126
|
-
if (settingsTemplate) {
|
|
127
|
-
return settingsTemplate;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
catch {
|
|
131
|
-
// Not in a repo, use default
|
|
132
|
-
}
|
|
133
|
-
return DEFAULT_INTEGRATION_BRANCH_TEMPLATE;
|
|
112
|
+
return resolveBranchSetting(undefined, settings => settings.integrationBranchTemplate);
|
|
134
113
|
}
|
|
135
114
|
/**
|
|
136
115
|
* Resolve the integration work branch template using config hierarchy
|
|
137
116
|
*/
|
|
138
117
|
async function resolveIntegrationWorkBranchTemplate() {
|
|
139
|
-
|
|
140
|
-
const repoRoot = await git.getRepoRoot();
|
|
141
|
-
const settingsTemplate = await getIntegrationWorkBranchTemplate(repoRoot);
|
|
142
|
-
if (settingsTemplate) {
|
|
143
|
-
return settingsTemplate;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
147
|
-
// Not in a repo, use default
|
|
148
|
-
}
|
|
149
|
-
return DEFAULT_INTEGRATION_WORK_BRANCH_TEMPLATE;
|
|
118
|
+
return resolveBranchSetting(undefined, settings => settings.integrationWorkBranchTemplate);
|
|
150
119
|
}
|
|
151
120
|
/**
|
|
152
121
|
* Build the full integration branch name from a template
|
|
@@ -223,24 +192,16 @@ export async function ensureIntegrationBranch(integrationBranchName, baseBranchN
|
|
|
223
192
|
logger.success(`Integration branch ${integrationBranchName} created`);
|
|
224
193
|
}
|
|
225
194
|
/**
|
|
226
|
-
* Setup worktree isolation - creates worktree
|
|
195
|
+
* Setup worktree isolation - creates worktree and runs hooks
|
|
227
196
|
*/
|
|
228
|
-
export async function setupWorktreeIsolation(fullBranchName, shortBranchName, baseBranchName
|
|
197
|
+
export async function setupWorktreeIsolation(fullBranchName, shortBranchName, baseBranchName) {
|
|
229
198
|
logger.step('Setting up worktree isolation...');
|
|
230
199
|
// Create git worktree
|
|
231
200
|
const worktreePath = await git.createWorktree(fullBranchName, shortBranchName);
|
|
232
|
-
//
|
|
233
|
-
// These must happen BEFORE commitBranchMetadata so it can gather all values
|
|
234
|
-
if (options.projectItemUrl) {
|
|
235
|
-
await git.storeProjectItemUrl(options.projectItemUrl, fullBranchName);
|
|
236
|
-
}
|
|
237
|
-
await git.storeBaseBranch(baseBranchName, fullBranchName);
|
|
238
|
-
// Commit branch metadata JSON file so it's discoverable from any clone
|
|
239
|
-
await git.commitBranchMetadata(worktreePath, fullBranchName, options.projectItemUrl);
|
|
240
|
-
// Enter worktree and set up upstream (pushes the metadata commit)
|
|
201
|
+
// Enter worktree and set up upstream
|
|
241
202
|
await git.enterWorktreeAndSetup(worktreePath, fullBranchName);
|
|
242
203
|
await runSetupWorktreeHook(worktreePath);
|
|
243
|
-
|
|
204
|
+
printWorkingDirectoryHints(worktreePath);
|
|
244
205
|
return worktreePath;
|
|
245
206
|
}
|
|
246
207
|
/**
|
|
@@ -267,23 +228,38 @@ export async function ensureBranchEnvironment(isolationMode, branchName) {
|
|
|
267
228
|
return { workingPath: worktreePath, created: true };
|
|
268
229
|
}
|
|
269
230
|
/**
|
|
270
|
-
*
|
|
271
|
-
* print the directory path and next-step hint. This is the only place the
|
|
272
|
-
* starts a Claude session that writes code.
|
|
231
|
+
* Start a project item's implementation session on its branch's working directory per the
|
|
232
|
+
* entry-point mode, then print the directory path and next-step hint. This is the only place the
|
|
233
|
+
* CLI starts a Claude session that writes code.
|
|
273
234
|
*/
|
|
274
|
-
export async function launchClaudeForBranch(workingPath, options
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
const prompt = options.entryPointPrompt ?? claude.getImplementationPrompt(options.projectItemUrl);
|
|
278
|
-
claude.outputInlinePrompt(options.projectItemUrl, workingPath, prompt);
|
|
235
|
+
export async function launchClaudeForBranch(workingPath, options) {
|
|
236
|
+
if (options.claudeEntryPointMode === 'inline') {
|
|
237
|
+
outputInlinePrompt(options.projectItemUrl, workingPath, options.prompt);
|
|
279
238
|
}
|
|
280
|
-
else if (claudeEntryPointMode === 'launch') {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
239
|
+
else if (options.claudeEntryPointMode === 'launch') {
|
|
240
|
+
await claude.runInteractive(options.prompt, {
|
|
241
|
+
cwd: workingPath,
|
|
242
|
+
permissionMode: options.permissionMode,
|
|
243
|
+
model: options.model,
|
|
244
|
+
effort: options.effort
|
|
245
|
+
});
|
|
284
246
|
}
|
|
285
247
|
printWorkingDirectoryHints(workingPath);
|
|
286
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* Output the entry point prompt as structured output for an already-running Claude session.
|
|
251
|
+
*/
|
|
252
|
+
function outputInlinePrompt(itemUrl, worktreePath, prompt) {
|
|
253
|
+
const output = {
|
|
254
|
+
type: 'idea1-cli-prompt',
|
|
255
|
+
projectItemUrl: itemUrl,
|
|
256
|
+
worktreePath,
|
|
257
|
+
prompt,
|
|
258
|
+
instructions: 'Enter plan mode and implement the project item using the prompt above. The worktree is ready at the specified path.'
|
|
259
|
+
};
|
|
260
|
+
// Output as JSON for Claude to parse from the tool result
|
|
261
|
+
console.log(JSON.stringify(output, null, 2));
|
|
262
|
+
}
|
|
287
263
|
/**
|
|
288
264
|
* Tell the user where the branch is checked out and how to move the workflow on.
|
|
289
265
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/services/worktree.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/services/worktree.ts"],"names":[],"mappings":"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"}
|