@idea1/cli 1.8.2 → 1.9.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 +205 -69
- 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 +24 -41
- 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 +27 -7
- 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 +17 -11
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/integrate.d.ts +13 -0
- package/dist/commands/integrate.d.ts.map +1 -0
- package/dist/commands/integrate.js +128 -0
- package/dist/commands/integrate.js.map +1 -0
- 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 +20 -21
- 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 +27 -19
- package/dist/commands/ready-for-approval.js.map +1 -1
- package/dist/commands/release.d.ts +6 -0
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +189 -25
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/ship-local-changes.d.ts +8 -0
- package/dist/commands/ship-local-changes.d.ts.map +1 -0
- package/dist/commands/ship-local-changes.js +34 -0
- package/dist/commands/ship-local-changes.js.map +1 -0
- 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-project-item.d.ts +27 -0
- package/dist/commands/start-project-item.d.ts.map +1 -0
- package/dist/commands/start-project-item.js +325 -0
- package/dist/commands/start-project-item.js.map +1 -0
- package/dist/commands/start.d.ts +8 -2
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +76 -35
- 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/claude-options.d.ts +3 -2
- package/dist/lib/claude-options.d.ts.map +1 -1
- package/dist/lib/claude-options.js +15 -4
- package/dist/lib/claude-options.js.map +1 -1
- 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/settings.d.ts +13 -3
- package/dist/lib/settings.d.ts.map +1 -1
- package/dist/lib/settings.js +12 -3
- package/dist/lib/settings.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 +41 -13
- package/dist/services/git.d.ts.map +1 -1
- package/dist/services/git.js +85 -46
- package/dist/services/git.js.map +1 -1
- package/dist/services/github.d.ts +28 -0
- package/dist/services/github.d.ts.map +1 -1
- package/dist/services/github.js +82 -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 +61 -37
- package/dist/services/setup.js.map +1 -1
- package/dist/services/workflow.d.ts +17 -0
- package/dist/services/workflow.d.ts.map +1 -0
- package/dist/services/workflow.js +39 -0
- package/dist/services/workflow.js.map +1 -0
- package/dist/services/worktree.js +1 -1
- package/dist/services/worktree.js.map +1 -1
- package/dist/types/index.d.ts +25 -24
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +2 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +3 -2
- package/dist/version.js.map +1 -1
- package/dist/workflow/engine/approval-flow.d.ts +10 -2
- package/dist/workflow/engine/approval-flow.d.ts.map +1 -1
- package/dist/workflow/engine/approval-flow.js +58 -9
- package/dist/workflow/engine/approval-flow.js.map +1 -1
- package/dist/workflow/engine/handlers/agent-implementation.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/agent-implementation.js +4 -11
- package/dist/workflow/engine/handlers/agent-implementation.js.map +1 -1
- package/dist/workflow/engine/handlers/approve-pr.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/approve-pr.js +9 -3
- package/dist/workflow/engine/handlers/approve-pr.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/handlers/ready-for-approval.d.ts +5 -0
- package/dist/workflow/engine/handlers/ready-for-approval.d.ts.map +1 -1
- package/dist/workflow/engine/handlers/ready-for-approval.js +11 -7
- package/dist/workflow/engine/handlers/ready-for-approval.js.map +1 -1
- package/dist/workflow/engine/{release-flow.d.ts → release-engine.d.ts} +83 -6
- package/dist/workflow/engine/release-engine.d.ts.map +1 -0
- package/dist/workflow/engine/{release-flow.js → release-engine.js} +291 -19
- package/dist/workflow/engine/release-engine.js.map +1 -0
- package/dist/workflow/engine/ship-flow.d.ts +87 -0
- package/dist/workflow/engine/ship-flow.d.ts.map +1 -0
- package/dist/workflow/engine/ship-flow.js +221 -0
- package/dist/workflow/engine/ship-flow.js.map +1 -0
- package/dist/workflow/engine/workflow-engine.d.ts +85 -15
- package/dist/workflow/engine/workflow-engine.d.ts.map +1 -1
- package/dist/workflow/engine/workflow-engine.js +195 -66
- package/dist/workflow/engine/workflow-engine.js.map +1 -1
- package/package.json +3 -3
- package/dist/workflow/engine/release-flow.d.ts.map +0 -1
- package/dist/workflow/engine/release-flow.js.map +0 -1
package/dist/commands/release.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { logger } from '../lib/logger.js';
|
|
2
|
-
import { readBranchSettings } from '../lib/settings.js';
|
|
3
|
-
import { promptInput } from '../lib/prompt.js';
|
|
4
|
-
import {
|
|
2
|
+
import { readBranchSettings, readReleaseSettings } from '../lib/settings.js';
|
|
3
|
+
import { promptInput, promptSelect } from '../lib/prompt.js';
|
|
4
|
+
import { deferredHandlerOptions } from '../workflow/engine/handlers/index.js';
|
|
5
5
|
import * as git from '../services/git.js';
|
|
6
6
|
import * as github from '../services/github.js';
|
|
7
|
-
import {
|
|
7
|
+
import { runJob } from '../jobs/job.js';
|
|
8
|
+
import { TARGET_OPTION_NAME, parseTargets, prepareTargetRuns, promptForTargets } from '../jobs/targets.js';
|
|
9
|
+
import { WorkflowStates } from '../workflow/data/workflow-states.js';
|
|
10
|
+
import { mergeConfirmationOption } from '../workflow/engine/approval-flow.js';
|
|
11
|
+
import { approvePrCommand } from './approve-pr.js';
|
|
12
|
+
import { PR_MODE_OPTION, RELEASE_KIND, VERSION_BUMP_TYPES, approveRelease, commitVersionBumps, createGatedPr, detectPendingVersionBumps, runPrMode, validateSourceBranch } from '../workflow/engine/release-engine.js';
|
|
8
13
|
/**
|
|
9
14
|
* Resolve the release branch (source branch)
|
|
10
15
|
*/
|
|
@@ -12,7 +17,7 @@ async function resolveReleaseBranch(cliBranch) {
|
|
|
12
17
|
if (cliBranch) {
|
|
13
18
|
return cliBranch;
|
|
14
19
|
}
|
|
15
|
-
return (await readBranchSettings(await git.getRepoRoot())).
|
|
20
|
+
return (await readBranchSettings(await git.getRepoRoot())).baseBranch;
|
|
16
21
|
}
|
|
17
22
|
/**
|
|
18
23
|
* Resolve the target branch
|
|
@@ -31,18 +36,132 @@ async function promptPrTitle() {
|
|
|
31
36
|
return promptInput('Enter PR title:', { default: defaultTitle });
|
|
32
37
|
}
|
|
33
38
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* run the release is gated on, already include whatever it committed.
|
|
39
|
+
* Why a `--bumps` value is malformed, or undefined when it is well formed: comma-separated
|
|
40
|
+
* `<package>=<patch|minor|major>` entries, e.g. `filekit=minor,cli=patch`.
|
|
37
41
|
*/
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
function bumpsOptionError(value) {
|
|
43
|
+
for (const entry of value.split(',').map(part => part.trim()).filter(part => part.length > 0)) {
|
|
44
|
+
const [name, type, ...rest] = entry.split('=').map(part => part.trim());
|
|
45
|
+
if (!name || rest.length > 0 || !VERSION_BUMP_TYPES.includes(type)) {
|
|
46
|
+
return `"${entry}" is not <package>=<${VERSION_BUMP_TYPES.join('|')}> (e.g. filekit=minor,cli=patch)`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
/** The bump types a well-formed `--bumps` value names, by package name. */
|
|
52
|
+
function parseBumpsOption(value) {
|
|
53
|
+
return new Map(value.split(',')
|
|
54
|
+
.map(part => part.trim())
|
|
55
|
+
.filter(part => part.length > 0)
|
|
56
|
+
.map(entry => {
|
|
57
|
+
const [name, type] = entry.split('=').map(part => part.trim());
|
|
58
|
+
return [name, type];
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The versioned packages that need a bump for the release, with the bump type of each: from
|
|
63
|
+
* `--bumps`, else asked. Counts the changes of `incomingBranches`, the branches approved into the
|
|
64
|
+
* release branch before it is released, as the release's own. None when the repository declares no
|
|
65
|
+
* versioned packages, or when a release PR is already open: a bump is never made onto an open
|
|
66
|
+
* release PR, which may already be approved.
|
|
67
|
+
*/
|
|
68
|
+
async function resolvePendingBumps(sourceBranch, targetBranch, requestedBumps, incomingBranches) {
|
|
69
|
+
const settings = await readReleaseSettings(await git.getRepoRoot());
|
|
70
|
+
if (settings.versionedPackages.length === 0) {
|
|
71
|
+
if (requestedBumps.size > 0) {
|
|
72
|
+
throw new Error('--bumps was given, but this repository declares no release.versionedPackages in .idea1/settings.json.');
|
|
73
|
+
}
|
|
74
|
+
return { pending: [], bumps: {} };
|
|
75
|
+
}
|
|
76
|
+
const knownNames = settings.versionedPackages.map(pkg => pkg.name);
|
|
77
|
+
const unknownNames = [...requestedBumps.keys()].filter(name => !knownNames.includes(name));
|
|
78
|
+
if (unknownNames.length > 0) {
|
|
79
|
+
throw new Error(`--bumps names unknown package(s): ${unknownNames.join(', ')}. ` +
|
|
80
|
+
`The versioned packages are: ${knownNames.join(', ')}.`);
|
|
81
|
+
}
|
|
82
|
+
if (await github.checkPrExists(sourceBranch, targetBranch)) {
|
|
83
|
+
logger.dim('A release PR is already open, so no version bump is made onto it');
|
|
84
|
+
logger.newline();
|
|
85
|
+
return { pending: [], bumps: {} };
|
|
86
|
+
}
|
|
87
|
+
logger.step('Checking which versioned packages changed since the last release...');
|
|
88
|
+
const pending = await detectPendingVersionBumps(settings.versionedPackages, sourceBranch, targetBranch, incomingBranches);
|
|
89
|
+
if (pending.length === 0) {
|
|
90
|
+
logger.success('No versioned package needs a version bump');
|
|
91
|
+
logger.newline();
|
|
92
|
+
return { pending, bumps: {} };
|
|
93
|
+
}
|
|
94
|
+
const bumps = {};
|
|
95
|
+
for (const pkg of pending) {
|
|
96
|
+
bumps[pkg.name] = requestedBumps.get(pkg.name) ?? await promptBumpType(pkg);
|
|
97
|
+
}
|
|
98
|
+
for (const name of requestedBumps.keys()) {
|
|
99
|
+
if (!(name in bumps)) {
|
|
100
|
+
logger.dim(`${name} is unchanged or already bumped for this release - ignoring its --bumps entry`);
|
|
101
|
+
}
|
|
44
102
|
}
|
|
45
103
|
logger.newline();
|
|
104
|
+
return { pending, bumps };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Bump the versions of the packages that changed since the last release, before the PR is opened,
|
|
108
|
+
* so the PR's head - and the one CI/CD run the release is gated on - already carries them. The
|
|
109
|
+
* bump is made here, in the local checkout: the packages' `package.json` and lockfiles are edited,
|
|
110
|
+
* committed and pushed to the release branch. Nothing is asked, and nothing is committed, when no
|
|
111
|
+
* versioned package needs a bump.
|
|
112
|
+
*/
|
|
113
|
+
async function bumpPendingVersions(sourceBranch, targetBranch, requestedBumps) {
|
|
114
|
+
const { pending, bumps } = await resolvePendingBumps(sourceBranch, targetBranch, requestedBumps, []);
|
|
115
|
+
if (pending.length === 0) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
await commitVersionBumps({ releaseBranch: sourceBranch, pending, bumps });
|
|
119
|
+
logger.newline();
|
|
120
|
+
}
|
|
121
|
+
async function promptBumpType(pkg) {
|
|
122
|
+
return await promptSelect(`The ${pkg.label} (${pkg.currentVersion}) changed since the last release - version bump:`, VERSION_BUMP_TYPES.map(type => ({ label: type, value: type })), { default: 'patch' });
|
|
123
|
+
}
|
|
124
|
+
const isApprove = (resolved) => resolved['approve'] === 'true';
|
|
125
|
+
/**
|
|
126
|
+
* Release the release branch once the given project items and branches are approved into it: every
|
|
127
|
+
* target's PR is approved - merged once its checks pass - in parallel, each in its own unattended
|
|
128
|
+
* run, and once all of them have merged the release itself runs, exactly as it does on its own.
|
|
129
|
+
* Every answer is asked before anything starts, so the whole sequence runs unattended. The first
|
|
130
|
+
* target that fails stops the others, and nothing is released.
|
|
131
|
+
*/
|
|
132
|
+
async function releaseWithApprovals(sourceBranch, targetBranch, targets, resolved) {
|
|
133
|
+
logger.header(`Release: ${sourceBranch} -> ${targetBranch}, once ${targets.length} target(s) are approved into ${sourceBranch}`);
|
|
134
|
+
logger.newline();
|
|
135
|
+
// The release runs in this checkout once the approvals have merged, so it must be fit for that now.
|
|
136
|
+
await validateSourceBranch(sourceBranch);
|
|
137
|
+
const { runs, summaries } = await prepareTargetRuns(approvePrCommand, targets, resolved, {
|
|
138
|
+
advancesTo: () => WorkflowStates.ApprovedAndMerged,
|
|
139
|
+
itemlessBranches: true
|
|
140
|
+
});
|
|
141
|
+
const { bumps } = await resolvePendingBumps(sourceBranch, targetBranch, parseBumpsOption(resolved['bumps']), summaries.flatMap(summary => summary.branchName ? [summary.branchName] : []));
|
|
142
|
+
const title = resolved['title'] || await promptPrTitle();
|
|
143
|
+
// Every bump the release may need: those asked for here, and any other the command line named.
|
|
144
|
+
const bumpsValue = Object.entries({ ...Object.fromEntries(parseBumpsOption(resolved['bumps'])), ...bumps })
|
|
145
|
+
.map(([name, type]) => `${name}=${type}`)
|
|
146
|
+
.join(',');
|
|
147
|
+
await runJob({
|
|
148
|
+
title: `release ${sourceBranch} -> ${targetBranch} once ${runs.length} target(s) are approved`,
|
|
149
|
+
runs,
|
|
150
|
+
followUp: {
|
|
151
|
+
label: `release ${sourceBranch} -> ${targetBranch}`,
|
|
152
|
+
args: [
|
|
153
|
+
releaseCommand.name,
|
|
154
|
+
'--branch', sourceBranch,
|
|
155
|
+
'--target-branch', targetBranch,
|
|
156
|
+
`--${TARGET_OPTION_NAME}`, '',
|
|
157
|
+
'--bumps', bumpsValue,
|
|
158
|
+
'--title', title,
|
|
159
|
+
'--pr-mode', resolved['pr-mode'],
|
|
160
|
+
`--${mergeConfirmationOption.longName}`
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
failFast: true
|
|
164
|
+
});
|
|
46
165
|
}
|
|
47
166
|
/**
|
|
48
167
|
* Stage 2 of change management (change-management-policy.md clause 2): the release PR from the
|
|
@@ -50,11 +169,18 @@ async function runPreReleaseHook() {
|
|
|
50
169
|
* releaser and the approver, and their merge is the recorded approval. No review is required:
|
|
51
170
|
* every change in the release was already approved on its own PR, and the body lists them. What
|
|
52
171
|
* this stage gates is the build - the required CI/CD checks must pass before the merge.
|
|
172
|
+
*
|
|
173
|
+
* Before the PR is opened, the packages that changed since the last release get their version
|
|
174
|
+
* bumps, committed and pushed to the release branch by this command. `--approve` instead approves
|
|
175
|
+
* and merges the release PR that is already open. With `--target`, the named project items and
|
|
176
|
+
* branches are approved into the release branch first, and the release follows once all of them
|
|
177
|
+
* have merged.
|
|
53
178
|
*/
|
|
54
179
|
export const releaseCommand = {
|
|
55
180
|
name: 'release',
|
|
56
181
|
aliases: ['r', 'rel'],
|
|
57
|
-
description: '
|
|
182
|
+
description: 'Bump the versions of changed packages, open the release PR from the release branch into main assigned to you, ' +
|
|
183
|
+
'and merge it once the checks pass - optionally approving items or branches into the release branch first (--approve merges the open release PR)',
|
|
58
184
|
options: [
|
|
59
185
|
{
|
|
60
186
|
longName: 'branch',
|
|
@@ -64,32 +190,69 @@ export const releaseCommand = {
|
|
|
64
190
|
promptWhenDefaultExists: false
|
|
65
191
|
},
|
|
66
192
|
{
|
|
67
|
-
longName: 'target',
|
|
193
|
+
longName: 'target-branch',
|
|
68
194
|
shortName: 't',
|
|
69
195
|
description: 'Target branch to release to',
|
|
70
196
|
defaultValue: '',
|
|
71
197
|
promptWhenDefaultExists: false
|
|
72
198
|
},
|
|
73
|
-
|
|
199
|
+
{
|
|
200
|
+
longName: 'approve',
|
|
201
|
+
description: 'Approve and merge the open release PR instead of opening one',
|
|
202
|
+
isFlag: true
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
longName: TARGET_OPTION_NAME,
|
|
206
|
+
description: 'Project items, branches or PR URLs to approve into the release branch first, releasing once all have merged (default: release the branch as it is)',
|
|
207
|
+
defaultValue: '',
|
|
208
|
+
// Releasing the branch as it is and approving work into it first are both picked here.
|
|
209
|
+
resolveValue: async () => (await promptForTargets('release the release branch as it is')).join(','),
|
|
210
|
+
dependsOn: resolved => !isApprove(resolved)
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
longName: 'bumps',
|
|
214
|
+
description: 'Version bump per changed package, e.g. filekit=minor,cli=patch (changed packages not named are prompted)',
|
|
215
|
+
defaultValue: '',
|
|
216
|
+
promptWhenDefaultExists: false,
|
|
217
|
+
validate: bumpsOptionError,
|
|
218
|
+
dependsOn: resolved => !isApprove(resolved)
|
|
219
|
+
},
|
|
220
|
+
{ ...PR_MODE_OPTION, dependsOn: resolved => !isApprove(resolved) },
|
|
74
221
|
{
|
|
75
222
|
longName: 'title',
|
|
76
223
|
description: 'PR title',
|
|
77
224
|
defaultValue: '',
|
|
78
|
-
promptWhenDefaultExists: false
|
|
79
|
-
|
|
225
|
+
promptWhenDefaultExists: false,
|
|
226
|
+
dependsOn: resolved => !isApprove(resolved)
|
|
227
|
+
},
|
|
228
|
+
{ ...mergeConfirmationOption, description: 'Merge the release PR without asking for confirmation, in merge mode (the merge still waits for the required checks)' },
|
|
229
|
+
// The approvals a release can start with ask for the options of the workflow states their
|
|
230
|
+
// items pass through on the way.
|
|
231
|
+
...deferredHandlerOptions([mergeConfirmationOption])
|
|
80
232
|
],
|
|
81
233
|
async execute(resolved) {
|
|
82
234
|
const branchArg = resolved['branch'] || undefined;
|
|
83
|
-
const targetArg = resolved['target'] || undefined;
|
|
84
|
-
const prMode = resolved['pr-mode'];
|
|
85
|
-
const titleArg = resolved['title'] || undefined;
|
|
235
|
+
const targetArg = resolved['target-branch'] || undefined;
|
|
86
236
|
const sourceBranch = await resolveReleaseBranch(branchArg);
|
|
87
237
|
const targetBranch = await resolveTargetBranch(targetArg);
|
|
238
|
+
await github.ensureGitHubCli();
|
|
239
|
+
if (isApprove(resolved)) {
|
|
240
|
+
logger.header(`Approve release: ${sourceBranch} -> ${targetBranch}`);
|
|
241
|
+
logger.newline();
|
|
242
|
+
await approveRelease(sourceBranch, targetBranch);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const targets = parseTargets(resolved[TARGET_OPTION_NAME] ?? '');
|
|
246
|
+
if (targets.length > 0) {
|
|
247
|
+
await releaseWithApprovals(sourceBranch, targetBranch, targets, resolved);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const prMode = resolved['pr-mode'];
|
|
251
|
+
const titleArg = resolved['title'] || undefined;
|
|
88
252
|
logger.header(`Release: ${sourceBranch} -> ${targetBranch}`);
|
|
89
253
|
logger.newline();
|
|
90
|
-
await github.ensureGitHubCli();
|
|
91
254
|
await validateSourceBranch(sourceBranch);
|
|
92
|
-
await
|
|
255
|
+
await bumpPendingVersions(sourceBranch, targetBranch, parseBumpsOption(resolved['bumps']));
|
|
93
256
|
const prTitle = titleArg ?? await promptPrTitle();
|
|
94
257
|
logger.info(`Using title: ${prTitle}`);
|
|
95
258
|
logger.info(`PR mode: ${prMode}`);
|
|
@@ -109,7 +272,8 @@ export const releaseCommand = {
|
|
|
109
272
|
targetBranch,
|
|
110
273
|
prUrl,
|
|
111
274
|
kind: RELEASE_KIND,
|
|
112
|
-
openActionsAfterMerge: true
|
|
275
|
+
openActionsAfterMerge: true,
|
|
276
|
+
confirmed: resolved[mergeConfirmationOption.longName] === 'true'
|
|
113
277
|
});
|
|
114
278
|
logger.newline();
|
|
115
279
|
logger.hint(`PR: ${prUrl}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Command } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* `start --carry-local-changes --approve-and-merge` with nothing asked beyond what a new item
|
|
4
|
+
* needs (its title and Project): the uncommitted changes of the base branch checkout become a
|
|
5
|
+
* project item's branch and PR, which merges into the base branch once the required checks pass.
|
|
6
|
+
*/
|
|
7
|
+
export declare const shipLocalChangesCommand: Command;
|
|
8
|
+
//# sourceMappingURL=ship-local-changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-local-changes.d.ts","sourceRoot":"","sources":["../../src/commands/ship-local-changes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAYjD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,OAuBrC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { isolationModeOption } from '../lib/isolation.js';
|
|
2
|
+
import { branchCreationOptions } from '../workflow/engine/branch-setup.js';
|
|
3
|
+
import { approveAndMergeOption, carryLocalChangesOption, commitMessageOption, unpromptedReviewersOption } from '../workflow/engine/ship-flow.js';
|
|
4
|
+
import { TARGET_OPTION_NAME } from '../jobs/targets.js';
|
|
5
|
+
import { projectItemTargetOptions, startProjectItem } from './start.js';
|
|
6
|
+
/**
|
|
7
|
+
* `start --carry-local-changes --approve-and-merge` with nothing asked beyond what a new item
|
|
8
|
+
* needs (its title and Project): the uncommitted changes of the base branch checkout become a
|
|
9
|
+
* project item's branch and PR, which merges into the base branch once the required checks pass.
|
|
10
|
+
*/
|
|
11
|
+
export const shipLocalChangesCommand = {
|
|
12
|
+
name: 'ship-local-changes',
|
|
13
|
+
aliases: ['ship'],
|
|
14
|
+
description: 'Ship the uncommitted changes of your base branch checkout: create a project item and its branch, commit and push the changes there, and advance it through approval, merging its PR once the checks pass',
|
|
15
|
+
options: [
|
|
16
|
+
...projectItemTargetOptions.map(option => option.longName === TARGET_OPTION_NAME
|
|
17
|
+
? { ...option, description: 'Project item URL, or its branch name or PR URL (default: create a new item)', promptWhenDefaultExists: false }
|
|
18
|
+
: option),
|
|
19
|
+
...branchCreationOptions
|
|
20
|
+
.filter(option => option.longName !== 'workflow-type')
|
|
21
|
+
.map(option => ({ ...option, defaultValue: '', promptWhenDefaultExists: false })),
|
|
22
|
+
commitMessageOption,
|
|
23
|
+
{ ...isolationModeOption, description: 'Where to work on the branch while it is shipped', defaultValue: 'worktree', promptWhenDefaultExists: false },
|
|
24
|
+
unpromptedReviewersOption
|
|
25
|
+
],
|
|
26
|
+
async execute(resolved) {
|
|
27
|
+
await startProjectItem({
|
|
28
|
+
...resolved,
|
|
29
|
+
[carryLocalChangesOption.longName]: 'true',
|
|
30
|
+
[approveAndMergeOption.longName]: 'true'
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=ship-local-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship-local-changes.js","sourceRoot":"","sources":["../../src/commands/ship-local-changes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExE;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAY;IAC9C,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,WAAW,EAAE,0MAA0M;IACvN,OAAO,EAAE;QACP,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,kBAAkB;YAC9E,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,6EAA6E,EAAE,uBAAuB,EAAE,KAAK,EAAE;YAC3I,CAAC,CAAC,MAAM,CAAC;QACX,GAAG,qBAAqB;aACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,eAAe,CAAC;aACrD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,mBAAmB;QACnB,EAAE,GAAG,mBAAmB,EAAE,WAAW,EAAE,iDAAiD,EAAE,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,KAAK,EAAE;QACpJ,yBAAyB;KAC1B;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,gBAAgB,CAAC;YACrB,GAAG,QAAQ;YACX,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,MAAM;YAC1C,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM;SACzC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -21,10 +21,10 @@ export const startAgentImplementationCommand = {
|
|
|
21
21
|
process.chdir(sourcePath);
|
|
22
22
|
}
|
|
23
23
|
const projectItemUrl = await resolveOrCreateProjectItem(resolved);
|
|
24
|
-
const transition = await resolveTransition({ projectItemUrl, options: resolved });
|
|
24
|
+
const transition = await resolveTransition({ target: projectItemUrl, options: resolved });
|
|
25
25
|
if (transition.currentState && isStateAtOrAfter(transition.currentState, WorkflowStates.DevImplementation)) {
|
|
26
26
|
throw new Error(`${projectItemUrl} is already past Agent Implementation (state: ${transition.currentState}). ` +
|
|
27
|
-
`Use 'idea1 join-project-item --
|
|
27
|
+
`Use 'idea1 join-project-item --target ${projectItemUrl}' to set up a working environment.`);
|
|
28
28
|
}
|
|
29
29
|
logger.section('Agent Implementation');
|
|
30
30
|
if (transition.currentState === WorkflowStates.AgentImplementation) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-agent-implementation.js","sourceRoot":"","sources":["../../src/commands/start-agent-implementation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC3G,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,CAAC,MAAM,+BAA+B,GAAY;IACtD,IAAI,EAAE,4BAA4B;IAClC,gFAAgF;IAChF,OAAO,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,oBAAoB,CAAC;IACnD,WAAW,EAAE,sKAAsK;IACnL,OAAO,EAAE;QACP,GAAG,wBAAwB;QAC3B,GAAG,qBAAqB;QACxB,GAAG,CAAC,0BAA0B,CAAC,OAAO,IAAI,EAAE,CAAC;KAC9C;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"start-agent-implementation.js","sourceRoot":"","sources":["../../src/commands/start-agent-implementation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC3G,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,CAAC,MAAM,+BAA+B,GAAY;IACtD,IAAI,EAAE,4BAA4B;IAClC,gFAAgF;IAChF,OAAO,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,oBAAoB,CAAC;IACnD,WAAW,EAAE,sKAAsK;IACnL,OAAO,EAAE;QACP,GAAG,wBAAwB;QAC3B,GAAG,qBAAqB;QACxB,GAAG,CAAC,0BAA0B,CAAC,OAAO,IAAI,EAAE,CAAC;KAC9C;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE1F,IAAI,UAAU,CAAC,YAAY,IAAI,gBAAgB,CAAC,UAAU,CAAC,YAAY,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3G,MAAM,IAAI,KAAK,CACb,GAAG,cAAc,iDAAiD,UAAU,CAAC,YAAY,KAAK;gBAC9F,yCAAyC,cAAc,oCAAoC,CAC5F,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAEvC,IAAI,UAAU,CAAC,YAAY,KAAK,cAAc,CAAC,mBAAmB,EAAE,CAAC;YACnE,mGAAmG;YACnG,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,GAAG,cAAc,sGAAsG,EACvH,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,MAAM,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC1E,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-dev-implementation.d.ts","sourceRoot":"","sources":["../../src/commands/start-dev-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"start-dev-implementation.d.ts","sourceRoot":"","sources":["../../src/commands/start-dev-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAMjD,eAAO,MAAM,6BAA6B,EAAE,OA4B3C,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { WorkflowStates } from '../workflow/data/workflow-states.js';
|
|
2
2
|
import { advanceAsNeededTo, resolveTransition } from '../workflow/engine/workflow-engine.js';
|
|
3
3
|
import { deferredHandlerOptions } from '../workflow/engine/handlers/index.js';
|
|
4
|
+
import { runForTargets, targetOption } from '../jobs/targets.js';
|
|
4
5
|
export const startDevImplementationCommand = {
|
|
5
6
|
name: 'start-dev-implementation',
|
|
6
7
|
aliases: ['dev'],
|
|
7
|
-
description: 'Advance
|
|
8
|
+
description: 'Advance project items to Dev Implementation (through every state before it) - commits and pushes the work, creates the PR and optionally closes the worktree; several run in parallel',
|
|
8
9
|
options: [
|
|
10
|
+
targetOption(false),
|
|
9
11
|
{
|
|
10
12
|
longName: 'source-path',
|
|
11
13
|
shortName: 'p',
|
|
@@ -20,8 +22,11 @@ export const startDevImplementationCommand = {
|
|
|
20
22
|
if (sourcePath) {
|
|
21
23
|
process.chdir(sourcePath);
|
|
22
24
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
await runForTargets(startDevImplementationCommand, resolved, {
|
|
26
|
+
advancesTo: () => WorkflowStates.DevImplementation,
|
|
27
|
+
itemlessBranches: false,
|
|
28
|
+
run: async (target) => advanceAsNeededTo(await resolveTransition({ target, options: resolved }), WorkflowStates.DevImplementation)
|
|
29
|
+
});
|
|
25
30
|
}
|
|
26
31
|
};
|
|
27
32
|
//# sourceMappingURL=start-dev-implementation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-dev-implementation.js","sourceRoot":"","sources":["../../src/commands/start-dev-implementation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"start-dev-implementation.js","sourceRoot":"","sources":["../../src/commands/start-dev-implementation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,CAAC,MAAM,6BAA6B,GAAY;IACpD,IAAI,EAAE,0BAA0B;IAChC,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,WAAW,EAAE,uLAAuL;IACpM,OAAO,EAAE;QACP,YAAY,CAAC,KAAK,CAAC;QACnB;YACE,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,4BAA4B;YACzC,YAAY,EAAE,EAAE;YAChB,uBAAuB,EAAE,KAAK;SAC/B;QACD,GAAG,sBAAsB,CAAC,EAAE,CAAC;KAC9B;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,aAAa,CAAC,6BAA6B,EAAE,QAAQ,EAAE;YAC3D,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,iBAAiB;YAClD,gBAAgB,EAAE,KAAK;YACvB,GAAG,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC;SACjI,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Command, ClaudePermissionMode, ClaudeEffortLevel } from '../types/index.js';
|
|
2
|
+
export declare const VALID_PERMISSION_MODES: ClaudePermissionMode[];
|
|
3
|
+
export declare const VALID_EFFORT_LEVELS: ClaudeEffortLevel[];
|
|
4
|
+
export declare const WORKFLOW_CHOICES: {
|
|
5
|
+
label: string;
|
|
6
|
+
value: string;
|
|
7
|
+
}[];
|
|
8
|
+
export interface IntegrationBranchSelection {
|
|
9
|
+
integrationName: string;
|
|
10
|
+
integrationBranchName: string;
|
|
11
|
+
isNew: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Prompt the user whether to stack this branch on another and resolve the
|
|
15
|
+
* chosen stack branch. Prompt-only: performs no branch writes. Returns the
|
|
16
|
+
* resolved stack branch name, or null when the user opts not to stack.
|
|
17
|
+
* Shared by start-project-item and attach-project-item.
|
|
18
|
+
*/
|
|
19
|
+
export declare function promptForStackBranch(): Promise<string | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Prompt the user for integration-branch selection. Prompt-only: does not
|
|
22
|
+
* perform any branch writes. Must be invoked before setWorkflowStatus so the
|
|
23
|
+
* user completes all setup questions up front.
|
|
24
|
+
*/
|
|
25
|
+
export declare function promptForIntegrationBranch(): Promise<IntegrationBranchSelection>;
|
|
26
|
+
export declare const startProjectItemCommand: Command;
|
|
27
|
+
//# sourceMappingURL=start-project-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-project-item.d.ts","sourceRoot":"","sources":["../../src/commands/start-project-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAwB,iBAAiB,EAAkC,MAAM,mBAAmB,CAAC;AAUhJ,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,EAAmF,CAAC;AAE7I,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,EAA8C,CAAC;AAQlG,eAAO,MAAM,gBAAgB;;;GAG5B,CAAC;AAkBF,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BnE;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAoBtF;AAED,eAAO,MAAM,uBAAuB,EAAE,OAqLrC,CAAC"}
|