@open-agent-toolkit/cli 0.2.40 → 0.2.45
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/assets/agents/oat-codebase-mapper.md +15 -3
- package/assets/agents/oat-phase-implementer.md +34 -9
- package/assets/agents/oat-reviewer.md +2 -2
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/configuration.md +11 -1
- package/assets/docs/cli-utilities/tool-packs.md +8 -0
- package/assets/docs/contributing/skills.md +67 -14
- package/assets/docs/quickstart.md +9 -0
- package/assets/docs/reference/cli-reference.md +56 -1
- package/assets/docs/reference/file-locations.md +18 -1
- package/assets/docs/reference/oat-directory-structure.md +20 -4
- package/assets/docs/workflows/projects/artifacts.md +27 -1
- package/assets/docs/workflows/projects/implementation-execution.md +22 -0
- package/assets/docs/workflows/projects/index.md +6 -0
- package/assets/docs/workflows/projects/lifecycle.md +19 -5
- package/assets/docs/workflows/projects/picking-up-projects.md +75 -0
- package/assets/docs/workflows/projects/pr-flow.md +22 -1
- package/assets/docs/workflows/projects/reviewing-oat-prs.md +60 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/analyze/SKILL.md +13 -5
- package/assets/skills/compare/SKILL.md +11 -2
- package/assets/skills/oat-brainstorm/SKILL.md +135 -32
- package/assets/skills/oat-brainstorm/references/destinations.md +9 -6
- package/assets/skills/oat-cursor-cloud-projects/SKILL.md +11 -1
- package/assets/skills/oat-dispatch-subagents/SKILL.md +19 -6
- package/assets/skills/oat-doctor/SKILL.md +8 -1
- package/assets/skills/oat-project-autonomous/SKILL.md +45 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +8 -8
- package/assets/skills/oat-project-capture/SKILL.md +29 -9
- package/assets/skills/oat-project-complete/SKILL.md +610 -38
- package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +265 -0
- package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +764 -0
- package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +134 -0
- package/assets/skills/oat-project-complete/scripts/validate-nonarchive-lifecycle-receipt.mjs +160 -0
- package/assets/skills/oat-project-design/SKILL.md +33 -9
- package/assets/skills/oat-project-discover/SKILL.md +16 -3
- package/assets/skills/oat-project-document/SKILL.md +10 -4
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-implement/SKILL.md +14 -3
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +18 -6
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-implement/references/phase-execution.md +9 -3
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +3 -0
- package/assets/skills/oat-project-import-plan/SKILL.md +15 -9
- package/assets/skills/oat-project-new/SKILL.md +7 -5
- package/assets/skills/oat-project-next/SKILL.md +32 -10
- package/assets/skills/oat-project-plan/SKILL.md +18 -3
- package/assets/skills/oat-project-pr-final/SKILL.md +23 -2
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-pr-progress/SKILL.md +23 -2
- package/assets/skills/oat-project-progress/SKILL.md +23 -9
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +20 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +48 -18
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-reconcile/SKILL.md +14 -10
- package/assets/skills/oat-project-retro/SKILL.md +3 -3
- package/assets/skills/oat-project-retro/references/apply-procedure.md +102 -6
- package/assets/skills/oat-project-retro-file/SKILL.md +57 -6
- package/assets/skills/oat-project-review-provide/SKILL.md +56 -6
- package/assets/skills/oat-project-review-receive/SKILL.md +16 -7
- package/assets/skills/oat-project-review-receive-remote/SKILL.md +9 -3
- package/assets/skills/oat-project-revise/SKILL.md +12 -3
- package/assets/skills/oat-project-spec/SKILL.md +16 -3
- package/assets/skills/oat-project-summary/SKILL.md +113 -13
- package/assets/skills/oat-repo-improve/SKILL.md +18 -7
- package/assets/skills/oat-review-provide-remote/SKILL.md +11 -2
- package/assets/skills/oat-wave-execute/SKILL.md +34 -2
- package/assets/skills/oat-worktree-bootstrap/SKILL.md +13 -1
- package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +13 -1
- package/dist/commands/config/index.d.ts +1 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +30 -2
- package/dist/commands/doctor/index.d.ts +2 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +27 -3
- package/dist/commands/doctor/synced-projects.d.ts +12 -0
- package/dist/commands/doctor/synced-projects.d.ts.map +1 -0
- package/dist/commands/doctor/synced-projects.js +208 -0
- package/dist/commands/init/gitattributes.d.ts +4 -0
- package/dist/commands/init/gitattributes.d.ts.map +1 -0
- package/dist/commands/init/gitattributes.js +12 -0
- package/dist/commands/init/gitignore.d.ts +8 -1
- package/dist/commands/init/gitignore.d.ts.map +1 -1
- package/dist/commands/init/gitignore.js +146 -41
- package/dist/commands/init/index.d.ts +2 -0
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +3 -0
- package/dist/commands/init/managed-block.d.ts +10 -0
- package/dist/commands/init/managed-block.d.ts.map +1 -0
- package/dist/commands/init/managed-block.js +40 -0
- package/dist/commands/init/tools/workflows/install-workflows.js +1 -1
- package/dist/commands/local/index.d.ts.map +1 -1
- package/dist/commands/local/index.js +5 -1
- package/dist/commands/local/sync.d.ts +4 -0
- package/dist/commands/local/sync.d.ts.map +1 -1
- package/dist/commands/local/sync.js +123 -2
- package/dist/commands/pjm/adoption.d.ts +2 -0
- package/dist/commands/pjm/adoption.d.ts.map +1 -1
- package/dist/commands/pjm/adoption.js +1 -1
- package/dist/commands/project/archive/archive-utils.d.ts +24 -0
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +349 -22
- package/dist/commands/project/archive/index.d.ts.map +1 -1
- package/dist/commands/project/archive/index.js +1 -0
- package/dist/commands/project/archive/push-runner.d.ts +5 -1
- package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
- package/dist/commands/project/archive/push-runner.js +33 -4
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +3 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +12 -0
- package/dist/commands/project/links/compute.d.ts +9 -0
- package/dist/commands/project/links/compute.d.ts.map +1 -0
- package/dist/commands/project/links/compute.js +27 -0
- package/dist/commands/project/links/index.d.ts +17 -0
- package/dist/commands/project/links/index.d.ts.map +1 -0
- package/dist/commands/project/links/index.js +72 -0
- package/dist/commands/project/links/refresh.d.ts +26 -0
- package/dist/commands/project/links/refresh.d.ts.map +1 -0
- package/dist/commands/project/links/refresh.js +92 -0
- package/dist/commands/project/links/render.d.ts +24 -0
- package/dist/commands/project/links/render.d.ts.map +1 -0
- package/dist/commands/project/links/render.js +68 -0
- package/dist/commands/project/list.d.ts +5 -0
- package/dist/commands/project/list.d.ts.map +1 -1
- package/dist/commands/project/list.js +182 -9
- package/dist/commands/project/migrate/index.d.ts +22 -0
- package/dist/commands/project/migrate/index.d.ts.map +1 -0
- package/dist/commands/project/migrate/index.js +79 -0
- package/dist/commands/project/new/index.d.ts +2 -0
- package/dist/commands/project/new/index.d.ts.map +1 -1
- package/dist/commands/project/new/index.js +14 -2
- package/dist/commands/project/new/scaffold.d.ts +22 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +287 -69
- package/dist/commands/project/open/index.d.ts +16 -0
- package/dist/commands/project/open/index.d.ts.map +1 -1
- package/dist/commands/project/open/index.js +151 -19
- package/dist/commands/project/pause/index.d.ts +8 -0
- package/dist/commands/project/pause/index.d.ts.map +1 -1
- package/dist/commands/project/pause/index.js +129 -19
- package/dist/commands/project/prune/index.d.ts +21 -0
- package/dist/commands/project/prune/index.d.ts.map +1 -0
- package/dist/commands/project/prune/index.js +95 -0
- package/dist/commands/project/pull/index.d.ts +28 -0
- package/dist/commands/project/pull/index.d.ts.map +1 -0
- package/dist/commands/project/pull/index.js +157 -0
- package/dist/commands/project/push/index.d.ts +22 -0
- package/dist/commands/project/push/index.d.ts.map +1 -0
- package/dist/commands/project/push/index.js +100 -0
- package/dist/commands/project/scope/index.d.ts +17 -0
- package/dist/commands/project/scope/index.d.ts.map +1 -0
- package/dist/commands/project/scope/index.js +107 -0
- package/dist/commands/project/split/run.d.ts +4 -0
- package/dist/commands/project/split/run.d.ts.map +1 -1
- package/dist/commands/project/split/run.js +48 -10
- package/dist/commands/project/sync/git.d.ts +18 -0
- package/dist/commands/project/sync/git.d.ts.map +1 -0
- package/dist/commands/project/sync/git.js +60 -0
- package/dist/commands/project/sync/record.d.ts +22 -0
- package/dist/commands/project/sync/record.d.ts.map +1 -0
- package/dist/commands/project/sync/record.js +133 -0
- package/dist/commands/project/sync/ref-sync.d.ts +120 -0
- package/dist/commands/project/sync/ref-sync.d.ts.map +1 -0
- package/dist/commands/project/sync/ref-sync.js +962 -0
- package/dist/commands/project/sync/resolve-target.d.ts +27 -0
- package/dist/commands/project/sync/resolve-target.d.ts.map +1 -0
- package/dist/commands/project/sync/resolve-target.js +159 -0
- package/dist/commands/shared/oat-paths.d.ts +4 -1
- package/dist/commands/shared/oat-paths.d.ts.map +1 -1
- package/dist/commands/shared/oat-paths.js +2 -2
- package/dist/commands/shared/project-scope.d.ts +23 -0
- package/dist/commands/shared/project-scope.d.ts.map +1 -0
- package/dist/commands/shared/project-scope.js +106 -0
- package/dist/commands/tools/migrate/index.js +1 -1
- package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-inventory.js +11 -0
- package/dist/commands/tools/shared/pack-lifecycle.js +1 -1
- package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-reconcile.js +4 -1
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +20 -10
- package/dist/commands/tools/update/update-tools.d.ts +2 -0
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/config/oat-config.d.ts +6 -3
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +41 -7
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +2 -1
- package/dist/fs/io.d.ts +2 -1
- package/dist/fs/io.d.ts.map +1 -1
- package/dist/fs/io.js +5 -2
- package/dist/projects/split/finalize.d.ts.map +1 -1
- package/dist/projects/split/finalize.js +55 -2
- package/dist/projects/split/resume.d.ts +3 -0
- package/dist/projects/split/resume.d.ts.map +1 -1
- package/dist/projects/split/resume.js +34 -7
- package/dist/projects/split/seed-children.d.ts.map +1 -1
- package/dist/projects/split/seed-children.js +6 -0
- package/dist/projects/split/write-parent.d.ts +7 -0
- package/dist/projects/split/write-parent.d.ts.map +1 -1
- package/dist/projects/split/write-parent.js +7 -4
- package/dist/release/public-package-contract.d.ts.map +1 -1
- package/dist/release/public-package-contract.js +1 -0
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +434 -0
- package/package.json +4 -4
- package/dist/__tests__/skills/split-flow-fixtures.d.ts +0 -50
- package/dist/__tests__/skills/split-flow-fixtures.d.ts.map +0 -1
- package/dist/__tests__/skills/split-flow-fixtures.js +0 -161
- package/dist/commands/__tests__/helpers.d.ts +0 -12
- package/dist/commands/__tests__/helpers.d.ts.map +0 -1
- package/dist/commands/__tests__/helpers.js +0 -36
|
@@ -1,19 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
|
+
import { basename, extname, isAbsolute, join, relative, resolve, sep, } from 'node:path';
|
|
2
3
|
import { buildCommandContext, } from '../../app/command-context.js';
|
|
4
|
+
import { defaultGitRunner } from '../project/sync/git.js';
|
|
5
|
+
import { listSyncedRecords } from '../project/sync/record.js';
|
|
3
6
|
import { parseFrontmatterField } from '../shared/frontmatter.js';
|
|
4
7
|
import { resolveProjectsRoot } from '../shared/oat-paths.js';
|
|
8
|
+
import { PROJECT_SCOPES, resolveScopeRoot, } from '../shared/project-scope.js';
|
|
5
9
|
import { readGlobalOptions } from '../shared/shared.utils.js';
|
|
10
|
+
import { CliError } from '../../errors/cli-error.js';
|
|
6
11
|
import { resolveProjectRoot } from '../../fs/paths.js';
|
|
7
12
|
import { listProjects, } from '@open-agent-toolkit/control-plane';
|
|
8
|
-
import { Command } from 'commander';
|
|
13
|
+
import { Command, Option } from 'commander';
|
|
9
14
|
const DEFAULT_DEPENDENCIES = {
|
|
10
15
|
buildCommandContext,
|
|
11
16
|
resolveProjectRoot,
|
|
12
17
|
resolveProjectsRoot,
|
|
13
18
|
listProjects,
|
|
19
|
+
listSyncedRecords,
|
|
20
|
+
directoryExists,
|
|
14
21
|
readProjectMetadata,
|
|
15
22
|
processEnv: process.env,
|
|
23
|
+
gitRunner: defaultGitRunner,
|
|
16
24
|
};
|
|
25
|
+
async function directoryExists(path) {
|
|
26
|
+
try {
|
|
27
|
+
return (await stat(path)).isDirectory();
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
17
36
|
async function readProjectMetadata(projectPath) {
|
|
18
37
|
const stateFile = join(projectPath, 'state.md');
|
|
19
38
|
const [kind, phase, phaseStatus] = await Promise.all([
|
|
@@ -50,44 +69,196 @@ function formatProjectTable(projects) {
|
|
|
50
69
|
}
|
|
51
70
|
const rows = projects.map((project) => ({
|
|
52
71
|
name: project.name,
|
|
53
|
-
|
|
54
|
-
|
|
72
|
+
scope: project.scope,
|
|
73
|
+
phase: project.phase === null
|
|
74
|
+
? '—'
|
|
75
|
+
: `${project.phase} (${project.phaseStatus})`,
|
|
76
|
+
progress: project.progress === null
|
|
77
|
+
? '—'
|
|
78
|
+
: `${project.progress.completed}/${project.progress.total}`,
|
|
55
79
|
recommendation: project.recommendation.skill,
|
|
80
|
+
hint: project.kind === 'materialized'
|
|
81
|
+
? project.recordError
|
|
82
|
+
? 'restore record from Git'
|
|
83
|
+
: '—'
|
|
84
|
+
: project.kind === 'recorded-invalid'
|
|
85
|
+
? 'restore record from Git'
|
|
86
|
+
: `oat project pull ${project.name}`,
|
|
56
87
|
}));
|
|
57
88
|
const widths = {
|
|
58
89
|
name: Math.max('NAME'.length, ...rows.map((row) => row.name.length)),
|
|
90
|
+
scope: Math.max('SCOPE'.length, ...rows.map((row) => row.scope.length)),
|
|
59
91
|
phase: Math.max('PHASE'.length, ...rows.map((row) => row.phase.length)),
|
|
60
92
|
progress: Math.max('PROGRESS'.length, ...rows.map((row) => row.progress.length)),
|
|
61
93
|
recommendation: Math.max('RECOMMENDATION'.length, ...rows.map((row) => row.recommendation.length)),
|
|
94
|
+
hint: Math.max('HINT'.length, ...rows.map((row) => row.hint.length)),
|
|
62
95
|
};
|
|
63
96
|
const header = [
|
|
64
97
|
'NAME'.padEnd(widths.name),
|
|
98
|
+
'SCOPE'.padEnd(widths.scope),
|
|
65
99
|
'PHASE'.padEnd(widths.phase),
|
|
66
100
|
'PROGRESS'.padEnd(widths.progress),
|
|
67
101
|
'RECOMMENDATION'.padEnd(widths.recommendation),
|
|
102
|
+
'HINT'.padEnd(widths.hint),
|
|
68
103
|
].join(' ');
|
|
69
104
|
const divider = [
|
|
70
105
|
'-'.repeat(widths.name),
|
|
106
|
+
'-'.repeat(widths.scope),
|
|
71
107
|
'-'.repeat(widths.phase),
|
|
72
108
|
'-'.repeat(widths.progress),
|
|
73
109
|
'-'.repeat(widths.recommendation),
|
|
110
|
+
'-'.repeat(widths.hint),
|
|
74
111
|
].join(' ');
|
|
75
112
|
const lines = rows.map((row) => [
|
|
76
113
|
row.name.padEnd(widths.name),
|
|
114
|
+
row.scope.padEnd(widths.scope),
|
|
77
115
|
row.phase.padEnd(widths.phase),
|
|
78
116
|
row.progress.padEnd(widths.progress),
|
|
79
117
|
row.recommendation.padEnd(widths.recommendation),
|
|
118
|
+
row.hint.padEnd(widths.hint),
|
|
80
119
|
].join(' '));
|
|
81
120
|
return [header, divider, ...lines];
|
|
82
121
|
}
|
|
122
|
+
function displayPath(repoRoot, absolutePath) {
|
|
123
|
+
return relative(repoRoot, absolutePath).split(sep).join('/');
|
|
124
|
+
}
|
|
125
|
+
async function collectProjectRows(repoRoot, projectsRoot, options, context, dependencies) {
|
|
126
|
+
const configuredSharedRoot = isAbsolute(projectsRoot)
|
|
127
|
+
? resolve(projectsRoot)
|
|
128
|
+
: resolve(repoRoot, projectsRoot);
|
|
129
|
+
const roots = [
|
|
130
|
+
{ scope: 'shared', path: configuredSharedRoot },
|
|
131
|
+
{
|
|
132
|
+
scope: 'synced',
|
|
133
|
+
path: resolveScopeRoot(repoRoot, projectsRoot, 'synced'),
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
scope: 'local',
|
|
137
|
+
path: resolveScopeRoot(repoRoot, projectsRoot, 'local'),
|
|
138
|
+
},
|
|
139
|
+
];
|
|
140
|
+
const selected = options.scope
|
|
141
|
+
? roots.filter((entry) => entry.scope === options.scope)
|
|
142
|
+
: roots;
|
|
143
|
+
const rows = [];
|
|
144
|
+
for (const root of selected) {
|
|
145
|
+
if (await dependencies.directoryExists(root.path)) {
|
|
146
|
+
const projects = await filterProjectsForList(await dependencies.listProjects(root.path), root.path, options.includeCoordination ?? false, dependencies);
|
|
147
|
+
rows.push(...projects.map((project) => ({
|
|
148
|
+
...project,
|
|
149
|
+
kind: 'materialized',
|
|
150
|
+
scope: root.scope,
|
|
151
|
+
checkout: 'present',
|
|
152
|
+
})));
|
|
153
|
+
}
|
|
154
|
+
if (root.scope === 'synced') {
|
|
155
|
+
const materialized = new Set(rows
|
|
156
|
+
.filter((row) => row.scope === 'synced' && row.kind === 'materialized')
|
|
157
|
+
.map((row) => row.name));
|
|
158
|
+
const records = await dependencies.listSyncedRecords(root.path, {
|
|
159
|
+
onInvalid: (path, error) => {
|
|
160
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
161
|
+
const name = basename(path, extname(path));
|
|
162
|
+
const materializedRow = rows.find((row) => row.scope === 'synced' &&
|
|
163
|
+
row.kind === 'materialized' &&
|
|
164
|
+
row.name === name);
|
|
165
|
+
if (materializedRow) {
|
|
166
|
+
materializedRow.recordError = message;
|
|
167
|
+
materializedRow.recommendation = {
|
|
168
|
+
skill: 'none',
|
|
169
|
+
reason: 'restore invalid record from a trusted Git revision',
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
rows.push({
|
|
174
|
+
kind: 'recorded-invalid',
|
|
175
|
+
name,
|
|
176
|
+
path: displayPath(repoRoot, path),
|
|
177
|
+
scope: 'synced',
|
|
178
|
+
checkout: 'invalid',
|
|
179
|
+
recordError: message,
|
|
180
|
+
phase: null,
|
|
181
|
+
phaseStatus: null,
|
|
182
|
+
workflowMode: null,
|
|
183
|
+
lifecycle: null,
|
|
184
|
+
progress: null,
|
|
185
|
+
recommendation: {
|
|
186
|
+
skill: 'none',
|
|
187
|
+
reason: 'restore invalid record from a trusted Git revision',
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
context.logger.warn(`Skipping invalid synced project record ${displayPath(repoRoot, path)}: ${message}`);
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
for (const record of records) {
|
|
195
|
+
if (!materialized.has(record.slug)) {
|
|
196
|
+
rows.push({
|
|
197
|
+
kind: 'recorded-absent',
|
|
198
|
+
name: record.slug,
|
|
199
|
+
path: displayPath(repoRoot, join(root.path, record.slug)),
|
|
200
|
+
scope: 'synced',
|
|
201
|
+
checkout: 'absent',
|
|
202
|
+
phase: null,
|
|
203
|
+
phaseStatus: null,
|
|
204
|
+
workflowMode: null,
|
|
205
|
+
lifecycle: null,
|
|
206
|
+
progress: null,
|
|
207
|
+
recommendation: {
|
|
208
|
+
skill: 'oat project pull',
|
|
209
|
+
reason: 'checkout absent',
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return rows.sort((left, right) => left.name.localeCompare(right.name) ||
|
|
217
|
+
left.scope.localeCompare(right.scope));
|
|
218
|
+
}
|
|
219
|
+
async function appendRemoteRows(rows, repoRoot, context, dependencies) {
|
|
220
|
+
const remote = await dependencies.gitRunner.run(['ls-remote', 'origin', 'refs/oat/projects/*'], { cwd: repoRoot, allowFailure: true });
|
|
221
|
+
if (remote.code !== 0) {
|
|
222
|
+
context.logger.warn(`Warning: unable to list remote synced projects: ${remote.stderr || remote.stdout || 'origin is unreachable'}`);
|
|
223
|
+
return rows;
|
|
224
|
+
}
|
|
225
|
+
const localSlugs = new Set(rows.filter((row) => row.scope === 'synced').map((row) => row.name));
|
|
226
|
+
for (const line of remote.stdout.split('\n')) {
|
|
227
|
+
const [, ref] = line.trim().split(/\s+/);
|
|
228
|
+
if (!ref?.startsWith('refs/oat/projects/'))
|
|
229
|
+
continue;
|
|
230
|
+
const name = ref.slice('refs/oat/projects/'.length);
|
|
231
|
+
if (!name || localSlugs.has(name))
|
|
232
|
+
continue;
|
|
233
|
+
rows.push({
|
|
234
|
+
kind: 'remote',
|
|
235
|
+
name,
|
|
236
|
+
scope: 'synced',
|
|
237
|
+
origin: 'remote',
|
|
238
|
+
checkout: 'absent',
|
|
239
|
+
ref,
|
|
240
|
+
phase: null,
|
|
241
|
+
phaseStatus: null,
|
|
242
|
+
workflowMode: null,
|
|
243
|
+
lifecycle: null,
|
|
244
|
+
progress: null,
|
|
245
|
+
recommendation: {
|
|
246
|
+
skill: 'oat project pull',
|
|
247
|
+
reason: 'not adopted on this branch',
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return rows.sort((left, right) => left.name.localeCompare(right.name) ||
|
|
252
|
+
left.scope.localeCompare(right.scope));
|
|
253
|
+
}
|
|
83
254
|
async function runProjectList(context, dependencies, options) {
|
|
84
255
|
try {
|
|
85
256
|
const repoRoot = await dependencies.resolveProjectRoot(context.cwd);
|
|
86
257
|
const projectsRoot = await dependencies.resolveProjectsRoot(repoRoot, dependencies.processEnv);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
258
|
+
let projects = await collectProjectRows(repoRoot, projectsRoot, options, context, dependencies);
|
|
259
|
+
if (options.remote && (!options.scope || options.scope === 'synced')) {
|
|
260
|
+
projects = await appendRemoteRows(projects, repoRoot, context, dependencies);
|
|
261
|
+
}
|
|
91
262
|
if (context.json) {
|
|
92
263
|
context.logger.json({ status: 'ok', projects });
|
|
93
264
|
}
|
|
@@ -106,7 +277,7 @@ async function runProjectList(context, dependencies, options) {
|
|
|
106
277
|
else {
|
|
107
278
|
context.logger.error(message);
|
|
108
279
|
}
|
|
109
|
-
process.exitCode =
|
|
280
|
+
process.exitCode = error instanceof CliError ? error.exitCode : 2;
|
|
110
281
|
}
|
|
111
282
|
}
|
|
112
283
|
export function createProjectListCommand(overrides = {}) {
|
|
@@ -117,6 +288,8 @@ export function createProjectListCommand(overrides = {}) {
|
|
|
117
288
|
return new Command('list')
|
|
118
289
|
.description('List tracked OAT projects')
|
|
119
290
|
.option('--include-coordination', 'Include completed coordination parent projects')
|
|
291
|
+
.addOption(new Option('--scope <scope>', 'Filter by project scope').choices(PROJECT_SCOPES))
|
|
292
|
+
.option('--remote', 'Include synced projects discovered on origin')
|
|
120
293
|
.action(async (options, command) => {
|
|
121
294
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
122
295
|
await runProjectList(context, dependencies, options);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type CommandContext, type GlobalOptions } from '../../../app/command-context.js';
|
|
2
|
+
import { type GitRunner } from '../../project/sync/git.js';
|
|
3
|
+
import { assertConfinedMigrationSource, type MigrateResult, type SyncTarget } from '../../project/sync/ref-sync.js';
|
|
4
|
+
import { resolveProjectsRoot } from '../../shared/oat-paths.js';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
interface ProjectMigrateDependencies {
|
|
7
|
+
buildCommandContext: (options: GlobalOptions) => CommandContext;
|
|
8
|
+
resolveProjectRoot: (cwd: string) => Promise<string>;
|
|
9
|
+
resolveProjectsRoot: typeof resolveProjectsRoot;
|
|
10
|
+
assertConfinedMigrationSource: typeof assertConfinedMigrationSource;
|
|
11
|
+
migrateSharedToSynced: (target: SyncTarget, git: GitRunner, options: {
|
|
12
|
+
sourcePath: string;
|
|
13
|
+
commit: boolean;
|
|
14
|
+
now: Date;
|
|
15
|
+
}) => Promise<MigrateResult>;
|
|
16
|
+
gitRunner: GitRunner;
|
|
17
|
+
processEnv: NodeJS.ProcessEnv;
|
|
18
|
+
now: () => Date;
|
|
19
|
+
}
|
|
20
|
+
export declare function createProjectMigrateCommand(overrides?: Partial<ProjectMigrateDependencies>): Command;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/migrate/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EACL,6BAA6B,EAG7B,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAUjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,UAAU,0BAA0B;IAClC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,6BAA6B,EAAE,OAAO,6BAA6B,CAAC;IACpE,qBAAqB,EAAE,CACrB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,KACxD,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;IAC9B,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AA+ED,wBAAgB,2BAA2B,CACzC,SAAS,GAAE,OAAO,CAAC,0BAA0B,CAAM,GAClD,OAAO,CAmBT"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { basename, dirname, isAbsolute, resolve } from 'node:path';
|
|
2
|
+
import { buildCommandContext, } from '../../../app/command-context.js';
|
|
3
|
+
import { defaultGitRunner } from '../../project/sync/git.js';
|
|
4
|
+
import { assertConfinedMigrationSource, buildSyncTarget, migrateSharedToSynced, } from '../../project/sync/ref-sync.js';
|
|
5
|
+
import { resolveProjectsRoot } from '../../shared/oat-paths.js';
|
|
6
|
+
import { assertValidProjectSlug, canonicalizePath, resolveProjectScope, resolveScopeRoot, } from '../../shared/project-scope.js';
|
|
7
|
+
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
8
|
+
import { CliError } from '../../../errors/cli-error.js';
|
|
9
|
+
import { resolveProjectRoot } from '../../../fs/paths.js';
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
const DEFAULT_DEPENDENCIES = {
|
|
12
|
+
buildCommandContext,
|
|
13
|
+
resolveProjectRoot,
|
|
14
|
+
resolveProjectsRoot,
|
|
15
|
+
assertConfinedMigrationSource,
|
|
16
|
+
migrateSharedToSynced,
|
|
17
|
+
gitRunner: defaultGitRunner,
|
|
18
|
+
processEnv: process.env,
|
|
19
|
+
now: () => new Date(),
|
|
20
|
+
};
|
|
21
|
+
async function runMigrate(context, projectPath, options, dependencies) {
|
|
22
|
+
try {
|
|
23
|
+
if (options.to !== 'synced') {
|
|
24
|
+
throw new CliError(`Migration to ${options.to} is not supported in v1; only --to synced is available.`, 1);
|
|
25
|
+
}
|
|
26
|
+
const repoRoot = await dependencies.resolveProjectRoot(context.cwd);
|
|
27
|
+
const projectsRoot = await dependencies.resolveProjectsRoot(repoRoot, dependencies.processEnv);
|
|
28
|
+
const sourcePath = isAbsolute(projectPath)
|
|
29
|
+
? resolve(projectPath)
|
|
30
|
+
: resolve(repoRoot, projectPath);
|
|
31
|
+
const sharedRoot = resolveScopeRoot(repoRoot, projectsRoot, 'shared');
|
|
32
|
+
if (canonicalizePath(dirname(sourcePath)) !== canonicalizePath(sharedRoot)) {
|
|
33
|
+
throw new CliError(`Project ${projectPath} must be a direct child in shared scope.`, 1);
|
|
34
|
+
}
|
|
35
|
+
const slug = basename(sourcePath);
|
|
36
|
+
assertValidProjectSlug(slug, 1);
|
|
37
|
+
const target = buildSyncTarget(repoRoot, projectsRoot, slug);
|
|
38
|
+
await dependencies.assertConfinedMigrationSource(target, sourcePath);
|
|
39
|
+
if (resolveProjectScope(sourcePath, sharedRoot, repoRoot) !== 'shared') {
|
|
40
|
+
throw new CliError(`Project ${projectPath} must be a direct child in shared scope.`, 1);
|
|
41
|
+
}
|
|
42
|
+
const result = await dependencies.migrateSharedToSynced(target, dependencies.gitRunner, {
|
|
43
|
+
sourcePath,
|
|
44
|
+
commit: options.commit,
|
|
45
|
+
now: dependencies.now(),
|
|
46
|
+
});
|
|
47
|
+
const payload = {
|
|
48
|
+
...result,
|
|
49
|
+
sourcePath,
|
|
50
|
+
projectPath: target.projectPath,
|
|
51
|
+
ref: target.ref,
|
|
52
|
+
};
|
|
53
|
+
if (context.json)
|
|
54
|
+
context.logger.json(payload);
|
|
55
|
+
else
|
|
56
|
+
context.logger.info(`Migrated ${slug} to synced scope.`);
|
|
57
|
+
process.exitCode = 0;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
61
|
+
if (context.json)
|
|
62
|
+
context.logger.json({ status: 'error', message });
|
|
63
|
+
else
|
|
64
|
+
context.logger.error(message);
|
|
65
|
+
process.exitCode = error instanceof CliError ? error.exitCode : 2;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function createProjectMigrateCommand(overrides = {}) {
|
|
69
|
+
const dependencies = { ...DEFAULT_DEPENDENCIES, ...overrides };
|
|
70
|
+
return new Command('migrate')
|
|
71
|
+
.description('Migrate a shared OAT project to synced scope')
|
|
72
|
+
.argument('<project-path>', 'Shared project path')
|
|
73
|
+
.requiredOption('--to <scope>', 'Destination scope')
|
|
74
|
+
.option('--no-commit', 'Do not commit parent-branch changes')
|
|
75
|
+
.action(async (projectPath, options, command) => {
|
|
76
|
+
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
77
|
+
await runMigrate(context, projectPath, options, dependencies);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CommandContext, type GlobalOptions } from '../../../app/command-context.js';
|
|
2
|
+
import { type ProjectScope } from '../../shared/project-scope.js';
|
|
2
3
|
import { Command } from 'commander';
|
|
3
4
|
import { type ProjectScaffoldMode, type ScaffoldProjectResult } from './scaffold.js';
|
|
4
5
|
interface ProjectNewDependencies {
|
|
@@ -12,6 +13,7 @@ interface ProjectNewDependencies {
|
|
|
12
13
|
refreshDashboard: boolean;
|
|
13
14
|
commit: boolean;
|
|
14
15
|
projectLog?: boolean;
|
|
16
|
+
scope?: ProjectScope;
|
|
15
17
|
}) => Promise<ScaffoldProjectResult>;
|
|
16
18
|
}
|
|
17
19
|
export declare function createProjectNewCommand(overrides?: Partial<ProjectNewDependencies>): Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/new/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/new/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAE5C,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAmBpB,UAAU,sBAAsB;IAC9B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,eAAe,EAAE,CAAC,OAAO,EAAE;QACzB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,mBAAmB,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;QACnB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,YAAY,CAAC;KACtB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACtC;AAmGD,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,OAAO,CAAC,sBAAsB,CAAM,GAC9C,OAAO,CAgDT"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { buildCommandContext, } from '../../../app/command-context.js';
|
|
2
|
+
import { PROJECT_SCOPES, } from '../../shared/project-scope.js';
|
|
2
3
|
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
4
|
+
import { CliError } from '../../../errors/cli-error.js';
|
|
3
5
|
import { Command, Option } from 'commander';
|
|
4
6
|
import { scaffoldProject as defaultScaffoldProject, } from './scaffold.js';
|
|
5
7
|
const COMMIT_STATUS_MESSAGES = {
|
|
@@ -17,6 +19,9 @@ function reportSuccess(context, projectName, result) {
|
|
|
17
19
|
status: 'ok',
|
|
18
20
|
projectName,
|
|
19
21
|
mode: result.mode,
|
|
22
|
+
scope: result.scope,
|
|
23
|
+
ref: result.ref,
|
|
24
|
+
sha: result.sha,
|
|
20
25
|
projectPath: result.projectPath,
|
|
21
26
|
projectsRoot: result.projectsRoot,
|
|
22
27
|
createdFiles: result.createdFiles,
|
|
@@ -24,6 +29,7 @@ function reportSuccess(context, projectName, result) {
|
|
|
24
29
|
activePointerUpdated: result.activePointerUpdated,
|
|
25
30
|
dashboardRefreshed: result.dashboardRefreshed,
|
|
26
31
|
committed: result.committed,
|
|
32
|
+
scaffoldCommit: result.commitSha,
|
|
27
33
|
commitSha: result.commitSha,
|
|
28
34
|
commitStatus: result.commitStatus,
|
|
29
35
|
commitError: result.commitError,
|
|
@@ -32,6 +38,10 @@ function reportSuccess(context, projectName, result) {
|
|
|
32
38
|
}
|
|
33
39
|
context.logger.info(`Created/updated OAT project: ${projectName}`);
|
|
34
40
|
context.logger.info(`Project path: ${result.projectPath}`);
|
|
41
|
+
context.logger.info(`Scope: ${result.scope}`);
|
|
42
|
+
if (result.ref) {
|
|
43
|
+
context.logger.info(`Ref: ${result.ref}`);
|
|
44
|
+
}
|
|
35
45
|
if (result.activePointerUpdated) {
|
|
36
46
|
context.logger.info('Active project updated in local config: .oat/config.local.json');
|
|
37
47
|
}
|
|
@@ -63,6 +73,7 @@ async function runProjectNew(projectName, options, context, dependencies) {
|
|
|
63
73
|
: options.projectLog === false
|
|
64
74
|
? false
|
|
65
75
|
: undefined,
|
|
76
|
+
scope: options.scope,
|
|
66
77
|
});
|
|
67
78
|
reportSuccess(context, projectName, result);
|
|
68
79
|
process.exitCode = 0;
|
|
@@ -75,7 +86,7 @@ async function runProjectNew(projectName, options, context, dependencies) {
|
|
|
75
86
|
else {
|
|
76
87
|
context.logger.error(message);
|
|
77
88
|
}
|
|
78
|
-
process.exitCode =
|
|
89
|
+
process.exitCode = error instanceof CliError ? error.exitCode : 2;
|
|
79
90
|
}
|
|
80
91
|
}
|
|
81
92
|
export function createProjectNewCommand(overrides = {}) {
|
|
@@ -89,7 +100,8 @@ export function createProjectNewCommand(overrides = {}) {
|
|
|
89
100
|
.addOption(new Option('--mode <mode>', 'Scaffold mode')
|
|
90
101
|
.choices(['spec-driven', 'quick', 'import'])
|
|
91
102
|
.default('spec-driven'))
|
|
92
|
-
.
|
|
103
|
+
.addOption(new Option('--scope <scope>', 'Project scope').choices(PROJECT_SCOPES))
|
|
104
|
+
.option('--force', 'Allow a duplicate slug in another scope; scaffold remains non-destructive')
|
|
93
105
|
.option('--no-set-active', 'Do not update active project in local config')
|
|
94
106
|
.option('--no-dashboard', 'Do not refresh .oat/state.md after scaffold')
|
|
95
107
|
.option('--no-commit', 'Do not git-commit the scaffolded project directory')
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
import { ensureScopedRootGitignore } from '../../init/gitignore.js';
|
|
2
|
+
import { type GitRunner } from '../../project/sync/git.js';
|
|
3
|
+
import { writeSyncedRecord } from '../../project/sync/record.js';
|
|
4
|
+
import { commitRecordChange, createSyncedProject, pushSynced, rollbackCreatedSyncedProject } from '../../project/sync/ref-sync.js';
|
|
5
|
+
import { resolveDefaultScope, type ProjectScope } from '../../shared/project-scope.js';
|
|
6
|
+
import { setActiveProject } from '../../../config/oat-config.js';
|
|
1
7
|
export type ProjectScaffoldMode = 'spec-driven' | 'quick' | 'import';
|
|
2
8
|
export interface ScaffoldProjectOptions {
|
|
3
9
|
repoRoot: string;
|
|
4
10
|
projectName: string;
|
|
11
|
+
scope?: ProjectScope;
|
|
5
12
|
mode?: ProjectScaffoldMode;
|
|
6
13
|
force?: boolean;
|
|
7
14
|
setActive?: boolean;
|
|
@@ -28,6 +35,7 @@ export interface ScaffoldProjectOptions {
|
|
|
28
35
|
export type CommitScaffoldStatus = 'committed' | 'skipped_disabled' | 'skipped_no_worktree' | 'skipped_nothing' | 'failed';
|
|
29
36
|
export interface ScaffoldProjectResult {
|
|
30
37
|
mode: ProjectScaffoldMode;
|
|
38
|
+
scope: ProjectScope;
|
|
31
39
|
projectsRoot: string;
|
|
32
40
|
projectPath: string;
|
|
33
41
|
createdFiles: string[];
|
|
@@ -38,6 +46,19 @@ export interface ScaffoldProjectResult {
|
|
|
38
46
|
commitSha?: string;
|
|
39
47
|
commitStatus: CommitScaffoldStatus;
|
|
40
48
|
commitError?: string;
|
|
49
|
+
ref?: string;
|
|
50
|
+
sha?: string;
|
|
41
51
|
}
|
|
42
|
-
export
|
|
52
|
+
export interface ScaffoldProjectDependencies {
|
|
53
|
+
resolveDefaultScope: typeof resolveDefaultScope;
|
|
54
|
+
gitRunner: GitRunner;
|
|
55
|
+
createSyncedProject: typeof createSyncedProject;
|
|
56
|
+
pushSynced: typeof pushSynced;
|
|
57
|
+
commitRecordChange: typeof commitRecordChange;
|
|
58
|
+
rollbackCreatedSyncedProject: typeof rollbackCreatedSyncedProject;
|
|
59
|
+
writeSyncedRecord: typeof writeSyncedRecord;
|
|
60
|
+
ensureScopedRootGitignore: typeof ensureScopedRootGitignore;
|
|
61
|
+
setActiveProject: typeof setActiveProject;
|
|
62
|
+
}
|
|
63
|
+
export declare function scaffoldProject(options: ScaffoldProjectOptions, overrides?: Partial<ScaffoldProjectDependencies>): Promise<ScaffoldProjectResult>;
|
|
43
64
|
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/new/scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/new/scaffold.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAEL,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,4BAA4B,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAGL,mBAAmB,EAGnB,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAOtD,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,WAAW,GACX,kBAAkB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,QAAQ,CAAC;AAEb,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,oBAAoB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,2BAA2B;IAC1C,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,SAAS,EAAE,SAAS,CAAC;IACrB,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,4BAA4B,EAAE,OAAO,4BAA4B,CAAC;IAClE,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,yBAAyB,EAAE,OAAO,yBAAyB,CAAC;IAC5D,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;CAC3C;AA6bD,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,EAC/B,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CAAC,qBAAqB,CAAC,CAsXhC"}
|