@12ui/design 0.2.65 → 0.2.67
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 +45 -35
- package/SKILL.md +1 -1
- package/dist/branch-client.d.ts +4 -2
- package/dist/branch-client.d.ts.map +1 -1
- package/dist/branch-client.js +36 -21
- package/dist/branch-client.js.map +1 -1
- package/dist/branch-conversion-engine.d.ts +8 -0
- package/dist/branch-conversion-engine.d.ts.map +1 -0
- package/dist/branch-conversion-engine.js +43 -0
- package/dist/branch-conversion-engine.js.map +1 -0
- package/dist/branch-execution.d.ts +12 -0
- package/dist/branch-execution.d.ts.map +1 -1
- package/dist/branch-execution.js +62 -39
- package/dist/branch-execution.js.map +1 -1
- package/dist/branch-local-conversion.d.ts +27 -0
- package/dist/branch-local-conversion.d.ts.map +1 -0
- package/dist/branch-local-conversion.js +80 -0
- package/dist/branch-local-conversion.js.map +1 -0
- package/dist/branch-local-publication.d.ts +15 -0
- package/dist/branch-local-publication.d.ts.map +1 -0
- package/dist/branch-local-publication.js +111 -0
- package/dist/branch-local-publication.js.map +1 -0
- package/dist/branch-page-conversion.d.ts +7 -0
- package/dist/branch-page-conversion.d.ts.map +1 -1
- package/dist/branch-page-conversion.js +13 -0
- package/dist/branch-page-conversion.js.map +1 -1
- package/dist/branch-progress.d.ts +2 -0
- package/dist/branch-progress.d.ts.map +1 -1
- package/dist/branch-progress.js.map +1 -1
- package/dist/branch-run-record.d.ts +24 -2
- package/dist/branch-run-record.d.ts.map +1 -1
- package/dist/branch-run-record.js +3 -2
- package/dist/branch-run-record.js.map +1 -1
- package/dist/branch-status.d.ts.map +1 -1
- package/dist/branch-status.js +21 -3
- package/dist/branch-status.js.map +1 -1
- package/dist/branch-winner.d.ts.map +1 -1
- package/dist/branch-winner.js +1 -2
- package/dist/branch-winner.js.map +1 -1
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +1 -0
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +7 -2
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-capabilities.d.ts +37 -15
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +38 -22
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-codex-readiness.d.ts +11 -0
- package/dist/cli-codex-readiness.d.ts.map +1 -0
- package/dist/cli-codex-readiness.js +72 -0
- package/dist/cli-codex-readiness.js.map +1 -0
- package/dist/cli-conversion-engine.d.ts +11 -0
- package/dist/cli-conversion-engine.d.ts.map +1 -0
- package/dist/cli-conversion-engine.js +26 -0
- package/dist/cli-conversion-engine.js.map +1 -0
- package/dist/cli-conversion-receipt.d.ts +28 -0
- package/dist/cli-conversion-receipt.d.ts.map +1 -0
- package/dist/cli-conversion-receipt.js +130 -0
- package/dist/cli-conversion-receipt.js.map +1 -0
- package/dist/cli-convert-command.d.ts.map +1 -1
- package/dist/cli-convert-command.js +12 -5
- package/dist/cli-convert-command.js.map +1 -1
- package/dist/cli-corpus-command.d.ts.map +1 -1
- package/dist/cli-corpus-command.js +5 -7
- package/dist/cli-corpus-command.js.map +1 -1
- package/dist/cli-corpus-evidence.d.ts +0 -1
- package/dist/cli-corpus-evidence.d.ts.map +1 -1
- package/dist/cli-corpus-evidence.js +22 -49
- package/dist/cli-corpus-evidence.js.map +1 -1
- package/dist/cli-corpus-manifest.d.ts +18 -0
- package/dist/cli-corpus-manifest.d.ts.map +1 -0
- package/dist/cli-corpus-manifest.js +83 -0
- package/dist/cli-corpus-manifest.js.map +1 -0
- package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
- package/dist/cli-corpus-reference-downloads.js +5 -3
- package/dist/cli-corpus-reference-downloads.js.map +1 -1
- package/dist/cli-corpus-run.d.ts +2 -0
- package/dist/cli-corpus-run.d.ts.map +1 -1
- package/dist/cli-corpus-run.js +40 -16
- package/dist/cli-corpus-run.js.map +1 -1
- package/dist/cli-corpus-types.d.ts +10 -6
- package/dist/cli-corpus-types.d.ts.map +1 -1
- package/dist/cli-corpus-types.js.map +1 -1
- package/dist/cli-draft-command.d.ts +2 -0
- package/dist/cli-draft-command.d.ts.map +1 -1
- package/dist/cli-draft-command.js +20 -9
- package/dist/cli-draft-command.js.map +1 -1
- package/dist/cli-engine.d.ts +10 -0
- package/dist/cli-engine.d.ts.map +1 -0
- package/dist/cli-engine.js +28 -0
- package/dist/cli-engine.js.map +1 -0
- package/dist/cli-help/conversion.d.ts +10 -3
- package/dist/cli-help/conversion.d.ts.map +1 -1
- package/dist/cli-help/conversion.js +14 -6
- package/dist/cli-help/conversion.js.map +1 -1
- package/dist/cli-help/design.d.ts +7 -7
- package/dist/cli-help/design.d.ts.map +1 -1
- package/dist/cli-help/design.js +9 -7
- package/dist/cli-help/design.js.map +1 -1
- package/dist/cli-help/index.d.ts +19 -12
- package/dist/cli-help/index.d.ts.map +1 -1
- package/dist/cli-help/setup.d.ts +2 -2
- package/dist/cli-help/setup.js +3 -3
- package/dist/cli-help/setup.js.map +1 -1
- package/dist/cli-image-backend.d.ts +3 -0
- package/dist/cli-image-backend.d.ts.map +1 -0
- package/dist/cli-image-backend.js +12 -0
- package/dist/cli-image-backend.js.map +1 -0
- package/dist/cli-local-conversion.d.ts +17 -0
- package/dist/cli-local-conversion.d.ts.map +1 -0
- package/dist/cli-local-conversion.js +74 -0
- package/dist/cli-local-conversion.js.map +1 -0
- package/dist/cli-local-dispatch.d.ts +4 -0
- package/dist/cli-local-dispatch.d.ts.map +1 -0
- package/dist/cli-local-dispatch.js +102 -0
- package/dist/cli-local-dispatch.js.map +1 -0
- package/dist/cli-local-export.d.ts +7 -0
- package/dist/cli-local-export.d.ts.map +1 -0
- package/dist/cli-local-export.js +31 -0
- package/dist/cli-local-export.js.map +1 -0
- package/dist/cli-local-improve-context.d.ts +3 -0
- package/dist/cli-local-improve-context.d.ts.map +1 -0
- package/dist/cli-local-improve-context.js +47 -0
- package/dist/cli-local-improve-context.js.map +1 -0
- package/dist/cli-local-improve.d.ts +16 -0
- package/dist/cli-local-improve.d.ts.map +1 -0
- package/dist/cli-local-improve.js +214 -0
- package/dist/cli-local-improve.js.map +1 -0
- package/dist/cli-local-record.d.ts +8 -0
- package/dist/cli-local-record.d.ts.map +1 -0
- package/dist/cli-local-record.js +67 -0
- package/dist/cli-local-record.js.map +1 -0
- package/dist/cli-local-runtime.d.ts +7 -0
- package/dist/cli-local-runtime.d.ts.map +1 -0
- package/dist/cli-local-runtime.js +21 -0
- package/dist/cli-local-runtime.js.map +1 -0
- package/dist/cli-next-command.d.ts +1 -0
- package/dist/cli-next-command.d.ts.map +1 -1
- package/dist/cli-next-command.js +12 -9
- package/dist/cli-next-command.js.map +1 -1
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +3 -0
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-skill-command.d.ts +0 -3
- package/dist/cli-skill-command.d.ts.map +1 -1
- package/dist/cli-skill-command.js +9 -24
- package/dist/cli-skill-command.js.map +1 -1
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +21 -12
- package/dist/cli-usage.js.map +1 -1
- package/dist/concept-input.d.ts +1 -1
- package/dist/concept-input.d.ts.map +1 -1
- package/dist/concept-input.js +1 -1
- package/dist/concept-input.js.map +1 -1
- package/dist/conversion-status-contract.d.ts +13 -1
- package/dist/conversion-status-contract.d.ts.map +1 -1
- package/dist/conversion-status-contract.js +12 -11
- package/dist/conversion-status-contract.js.map +1 -1
- package/dist/corpus-client.d.ts +11 -7
- package/dist/corpus-client.d.ts.map +1 -1
- package/dist/corpus-client.js +36 -8
- package/dist/corpus-client.js.map +1 -1
- package/dist/corpus-inspiration-failure.d.ts +9 -0
- package/dist/corpus-inspiration-failure.d.ts.map +1 -0
- package/dist/corpus-inspiration-failure.js +49 -0
- package/dist/corpus-inspiration-failure.js.map +1 -0
- package/dist/corpus-request-error.d.ts +7 -13
- package/dist/corpus-request-error.d.ts.map +1 -1
- package/dist/corpus-request-error.js +3 -12
- package/dist/corpus-request-error.js.map +1 -1
- package/dist/draft-corpus-query.d.ts +5 -0
- package/dist/draft-corpus-query.d.ts.map +1 -0
- package/dist/draft-corpus-query.js +31 -0
- package/dist/draft-corpus-query.js.map +1 -0
- package/dist/draft-identity.d.ts +2 -0
- package/dist/draft-identity.d.ts.map +1 -1
- package/dist/draft-identity.js +1 -0
- package/dist/draft-identity.js.map +1 -1
- package/dist/draft-run.d.ts +5 -1
- package/dist/draft-run.d.ts.map +1 -1
- package/dist/draft-run.js +10 -4
- package/dist/draft-run.js.map +1 -1
- package/dist/draft-workspace.d.ts +2 -0
- package/dist/draft-workspace.d.ts.map +1 -1
- package/dist/draft-workspace.js.map +1 -1
- package/dist/http-response-diagnostic.d.ts +12 -0
- package/dist/http-response-diagnostic.d.ts.map +1 -0
- package/dist/http-response-diagnostic.js +58 -0
- package/dist/http-response-diagnostic.js.map +1 -0
- package/dist/improve-branch-stage.d.ts.map +1 -1
- package/dist/improve-branch-stage.js +6 -25
- package/dist/improve-branch-stage.js.map +1 -1
- package/dist/improve-concept.d.ts +1 -1
- package/dist/improve-concept.d.ts.map +1 -1
- package/dist/improve-concept.js +1 -1
- package/dist/improve-concept.js.map +1 -1
- package/dist/improve-core/concept-input.d.ts +2 -43
- package/dist/improve-core/concept-input.d.ts.map +1 -1
- package/dist/improve-core/concept-input.js +3 -53
- package/dist/improve-core/concept-input.js.map +1 -1
- package/dist/improve-core/improve-concept.d.ts +0 -6
- package/dist/improve-core/improve-concept.d.ts.map +1 -1
- package/dist/improve-core/improve-concept.js +4 -36
- package/dist/improve-core/improve-concept.js.map +1 -1
- package/dist/improve-core/improve-page-words.d.ts +2 -2
- package/dist/improve-core/improve-page-words.d.ts.map +1 -1
- package/dist/improve-core/improve-page-words.js +8 -6
- package/dist/improve-core/improve-page-words.js.map +1 -1
- package/dist/improve-generation-stages.d.ts.map +1 -1
- package/dist/improve-generation-stages.js +6 -24
- package/dist/improve-generation-stages.js.map +1 -1
- package/dist/improve-kit-readme.d.ts.map +1 -1
- package/dist/improve-kit-readme.js +1 -0
- package/dist/improve-kit-readme.js.map +1 -1
- package/dist/improve-source-words.d.ts +14 -0
- package/dist/improve-source-words.d.ts.map +1 -0
- package/dist/improve-source-words.js +66 -0
- package/dist/improve-source-words.js.map +1 -0
- package/dist/improve-workspace.d.ts +3 -0
- package/dist/improve-workspace.d.ts.map +1 -1
- package/dist/improve-workspace.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +44 -5
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/package-client.d.ts +3 -1
- package/dist/package-client.d.ts.map +1 -1
- package/dist/package-client.js +34 -11
- package/dist/package-client.js.map +1 -1
- package/dist/prototype-gates.d.ts.map +1 -1
- package/dist/prototype-gates.js +1 -1
- package/dist/prototype-gates.js.map +1 -1
- package/dist/prototype-poststep.js +1 -1
- package/dist/prototype-poststep.js.map +1 -1
- package/dist/prototype-requests.d.ts +1 -0
- package/dist/prototype-requests.d.ts.map +1 -1
- package/dist/prototype-requests.js.map +1 -1
- package/dist/prototype-revision.d.ts +1 -1
- package/dist/prototype-revision.js +1 -1
- package/dist/prototype-runner.d.ts.map +1 -1
- package/dist/prototype-runner.js +9 -3
- package/dist/prototype-runner.js.map +1 -1
- package/dist/reference-search-mode.d.ts +27 -2
- package/dist/reference-search-mode.d.ts.map +1 -1
- package/dist/reference-search-mode.js +29 -2
- package/dist/reference-search-mode.js.map +1 -1
- package/dist/review-page.js +2 -2
- package/dist/review-page.js.map +1 -1
- package/dist/review-prototype-gap.js +1 -1
- package/dist/review-prototype-gap.js.map +1 -1
- package/dist/run-journal-commands.d.ts.map +1 -1
- package/dist/run-journal-commands.js +1 -0
- package/dist/run-journal-commands.js.map +1 -1
- package/dist/skill-installer.d.ts +2 -1
- package/dist/skill-installer.d.ts.map +1 -1
- package/dist/skill-installer.js +3 -3
- package/dist/skill-installer.js.map +1 -1
- package/open-design.json +2 -2
- package/package.json +5 -4
- package/prototype-kit/analyze.mjs +4 -1
- package/prototype-kit/build.mjs +29 -4
- package/prototype-kit/inventory.mjs +11 -2
- package/prototype-kit/lib/local-page.mjs +50 -0
- package/prototype-kit/lib/static-server.mjs +1 -0
- package/skills/12ui-design/SKILL.md +35 -33
- package/skills/12ui-design/improve.md +48 -155
- package/skills/12ui-design/inspire.md +3 -1
- package/skills/12ui-design/outputs.md +22 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { stringFlag } from './cli-arguments.js';
|
|
6
|
+
import { launchLocalRuntime } from './cli-local-runtime.js';
|
|
7
|
+
import { prepareConversionReceipt, readConversionReceipt, updateConversionReceipt } from './cli-conversion-receipt.js';
|
|
8
|
+
import { readLocalJson } from './cli-local-record.js';
|
|
9
|
+
import { selectInitialImageBackend } from './cli-image-backend.js';
|
|
10
|
+
const hash = async (file) => createHash('sha256').update(await readFile(file)).digest('hex');
|
|
11
|
+
function settings(flags, selection) {
|
|
12
|
+
return { 'auth-home': path.resolve(selection.codexHome ?? process.env.CODEX_HOME ?? path.join(homedir(), '.codex')), 'codex-bin': selection.codexBin ?? 'codex', 'image-backend': selectInitialImageBackend(stringFlag(flags, 'image-backend')), 'clean-assets': stringFlag(flags, 'clean-assets') ?? 'enhance', reasoning: stringFlag(flags, 'reasoning') ?? 'low', 'timeout-ms': stringFlag(flags, 'timeout-ms') ?? '1800000' };
|
|
13
|
+
}
|
|
14
|
+
async function execute(receipt, mode, selection, dependencies) {
|
|
15
|
+
const args = [mode, '--run-dir', receipt.runDir];
|
|
16
|
+
if (mode === 'convert')
|
|
17
|
+
args.push('--source', receipt.source.path);
|
|
18
|
+
for (const [key, value] of Object.entries(receipt.settings))
|
|
19
|
+
if (mode === 'convert' || ['auth-home', 'codex-bin'].includes(key))
|
|
20
|
+
args.push('--' + key, value);
|
|
21
|
+
try {
|
|
22
|
+
await (dependencies.launch ?? launchLocalRuntime)('convert', args, { ...selection, output: 'ignore' });
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
try {
|
|
26
|
+
await updateConversionReceipt(receipt.runDir, 'failed');
|
|
27
|
+
}
|
|
28
|
+
catch { /* The original runtime failure remains primary. */ }
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const updated = await updateConversionReceipt(receipt.runDir);
|
|
33
|
+
if (!updated?.entrypoint || updated.status !== 'complete')
|
|
34
|
+
throw Error('Local runtime returned without a complete verified output manifest. Inspect the saved run.');
|
|
35
|
+
return updated;
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// A receipt write is not grounds to discard a successfully published artifact.
|
|
39
|
+
const result = await readLocalJson(path.join(receipt.runDir, 'result.json'));
|
|
40
|
+
if (result?.status === 'complete')
|
|
41
|
+
console.error(`Local output is complete; receipt refresh failed: ${error.message}`);
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function runLocalConversion(input, dependencies = {}) {
|
|
46
|
+
if (input.selection.engine !== 'codex')
|
|
47
|
+
throw Error('Local conversion requires the Codex engine');
|
|
48
|
+
if (await stat(input.runDir).catch(() => null))
|
|
49
|
+
throw Error('Local run directory already exists; resume it or choose a new directory');
|
|
50
|
+
const receipt = await prepareConversionReceipt({ source: path.resolve(input.source), runDir: path.resolve(input.runDir), settings: settings(input.flags, input.selection) });
|
|
51
|
+
return execute(receipt, 'convert', input.selection, dependencies);
|
|
52
|
+
}
|
|
53
|
+
export async function resumeLocalConversion(runDir, flags, selection, dependencies = {}) {
|
|
54
|
+
const receipt = await readConversionReceipt(runDir);
|
|
55
|
+
if (!receipt) {
|
|
56
|
+
await (dependencies.launch ?? launchLocalRuntime)('convert', ['resume', '--run-dir', path.resolve(runDir), '--auth-home', path.resolve(selection.codexHome ?? process.env.CODEX_HOME ?? path.join(homedir(), '.codex')), '--codex-bin', selection.codexBin ?? 'codex'], selection);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
for (const [flag, key] of [['codex-home', 'auth-home'], ['codex-bin', 'codex-bin']]) {
|
|
60
|
+
const explicit = stringFlag(flags, flag);
|
|
61
|
+
if (explicit && (flag === 'codex-home' ? path.resolve(explicit) : explicit) !== receipt.settings[key])
|
|
62
|
+
throw Error(`Saved local run uses a different --${flag}; retain its original setting.`);
|
|
63
|
+
}
|
|
64
|
+
const initialized = await readLocalJson(path.join(receipt.runDir, 'run.json'));
|
|
65
|
+
if (!initialized) {
|
|
66
|
+
if (await stat(receipt.runDir).catch(() => null))
|
|
67
|
+
throw Error('Local initialization is incomplete; inspect the existing run directory before retrying. No work was dispatched.');
|
|
68
|
+
if (await hash(receipt.source.path) !== receipt.source.sha256)
|
|
69
|
+
throw Error('Source changed since local dispatch preparation; use a new run directory.');
|
|
70
|
+
selectInitialImageBackend(receipt.settings['image-backend']);
|
|
71
|
+
}
|
|
72
|
+
return execute(receipt, initialized ? 'resume' : 'convert', selection, dependencies);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=cli-local-conversion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-conversion.js","sourceRoot":"","sources":["../src/cli-local-conversion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type CliFlags } from './cli-arguments.js';
|
|
2
|
+
/** Resolve routing before API authentication or journal directory creation. Runtime owns local durable records. */
|
|
3
|
+
export declare function dispatchLocalCommand(command: string[], flags: CliFlags): Promise<boolean>;
|
|
4
|
+
//# sourceMappingURL=cli-local-dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-dispatch.d.ts","sourceRoot":"","sources":["../src/cli-local-dispatch.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAY5E,mHAAmH;AACnH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CA6D/F"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { branchAttemptPath, readBranchAttempt } from './branch-run-record.js';
|
|
3
|
+
import { booleanFlag, stringFlag } from './cli-arguments.js';
|
|
4
|
+
import { selectEngine } from './cli-engine.js';
|
|
5
|
+
import { launchLocalRuntime } from './cli-local-runtime.js';
|
|
6
|
+
import { readLocalRecord, readLocalJson, printLocalStatus } from './cli-local-record.js';
|
|
7
|
+
import { localImproveSupported, runLocalImproveCommand, resumeLocalImproveCommand } from './cli-local-improve.js';
|
|
8
|
+
import { chooseConversionEngine, assertApiConversionFlags, localConversionDirectory } from './cli-conversion-engine.js';
|
|
9
|
+
import { runLocalConversion, resumeLocalConversion } from './cli-local-conversion.js';
|
|
10
|
+
import { isLocalOutput, runLocalExport } from './cli-local-export.js';
|
|
11
|
+
import { CliRefusal } from './cli-refusal.js';
|
|
12
|
+
const noJournal = { note: () => { }, heartbeat: () => { } };
|
|
13
|
+
function refuse(message) { throw new CliRefusal(message, 'local_arguments'); }
|
|
14
|
+
/** Resolve routing before API authentication or journal directory creation. Runtime owns local durable records. */
|
|
15
|
+
export async function dispatchLocalCommand(command, flags) {
|
|
16
|
+
const name = command[0];
|
|
17
|
+
if (name === 'branch')
|
|
18
|
+
return false; // Branch owns its conversion engine while generation remains hosted.
|
|
19
|
+
if (!['convert', 'export', 'resume', 'next', 'improve'].includes(name)) {
|
|
20
|
+
if (stringFlag(flags, 'engine'))
|
|
21
|
+
await selectEngine(flags, false);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
if (name === 'next' && command[1]) {
|
|
25
|
+
const attempt = await readBranchAttempt(branchAttemptPath(command[1]));
|
|
26
|
+
if (attempt) {
|
|
27
|
+
await selectEngine(flags, false, attempt.convert?.selection?.engine ?? 'api');
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const inputRecord = name === 'convert' && command.length === 2 ? await readLocalRecord(command[1]) : null;
|
|
32
|
+
const derivation = name === 'convert' && (inputRecord || await isLocalOutput(command[1]));
|
|
33
|
+
if (derivation) {
|
|
34
|
+
// Local artifacts never acquire native semantics by selecting another engine.
|
|
35
|
+
if (!['assets', 'png', 'jpg', 'webp', 'pdf', 'react'].includes(stringFlag(flags, 'output') ?? ''))
|
|
36
|
+
refuse('Native LayerDoc, SVG, PSD, PPTX and Sketch require a new API conversion of the original source image; this local run supports assets, PNG, JPG, WebP, browser PDF and React exports.');
|
|
37
|
+
const selection = await selectEngine(flags, true, 'codex');
|
|
38
|
+
await runLocalExport(command, flags, inputRecord, selection);
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
const convertDirectory = name === 'convert' && command.length === 2 && command[1] !== 'package' ? localConversionDirectory(command[1], flags) : undefined;
|
|
42
|
+
const record = ['next', 'resume', 'export'].includes(name) ? await readLocalRecord(command[1]) : convertDirectory ? await readLocalRecord(convertDirectory) : name === 'improve' && stringFlag(flags, 'out-dir') ? await readLocalRecord(stringFlag(flags, 'out-dir')) : null;
|
|
43
|
+
const hostedImprove = name === 'improve' && !record && stringFlag(flags, 'out-dir') ? await readLocalJson(path.join(path.resolve(stringFlag(flags, 'out-dir')), 'improve.json')) : null;
|
|
44
|
+
const supported = name === 'export' || (name === 'improve' && booleanFlag(flags, 'apply') && localImproveSupported(flags));
|
|
45
|
+
// Saved records override machine readiness. Exported output is deterministic and needs no Codex account.
|
|
46
|
+
const saved = record ? 'codex' : hostedImprove ? 'api' : name === 'export' ? 'codex' : ['next', 'resume'].includes(name) ? 'api' : undefined;
|
|
47
|
+
const selection = convertDirectory ? await chooseConversionEngine({ source: command[1], flags, runDir: convertDirectory }) : await selectEngine(flags, Boolean(supported), saved);
|
|
48
|
+
if (selection.engine === 'api') {
|
|
49
|
+
assertApiConversionFlags(flags);
|
|
50
|
+
if (name === 'improve' && booleanFlag(flags, 'apply'))
|
|
51
|
+
refuse('Actual project edits require a ready Codex engine. Configure Codex, then use --engine codex --apply; the API produces an improvement kit.');
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (name === 'convert' && record)
|
|
55
|
+
refuse(`This directory already contains a local run. Use 12ui resume ${record.directory} or choose a new --out-dir.`);
|
|
56
|
+
if (name === 'next') {
|
|
57
|
+
if (!record || command.length !== 2)
|
|
58
|
+
refuse('next requires one saved local run directory');
|
|
59
|
+
const allowed = new Set(['engine', 'wait', 'json', 'timeout-ms', 'quiet']);
|
|
60
|
+
if (Object.keys(flags).some(key => !allowed.has(key)))
|
|
61
|
+
refuse('Unsupported local next option. Use --wait, --json, or --timeout-ms.');
|
|
62
|
+
const timeout = stringFlag(flags, 'timeout-ms');
|
|
63
|
+
if (timeout && (!Number.isSafeInteger(Number(timeout)) || Number(timeout) < 1))
|
|
64
|
+
refuse('--timeout-ms must be a positive integer');
|
|
65
|
+
await printLocalStatus(record, booleanFlag(flags, 'wait'), timeout ? Number(timeout) : undefined);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
if (name === 'improve') {
|
|
69
|
+
if (record?.kind === 'improve-flow' && !booleanFlag(flags, 'apply'))
|
|
70
|
+
await resumeLocalImproveCommand(record.directory, noJournal, selection);
|
|
71
|
+
else
|
|
72
|
+
await runLocalImproveCommand(command, flags, noJournal, selection);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
if (name === 'resume' && record?.kind === 'improve-flow') {
|
|
76
|
+
await resumeLocalImproveCommand(record.directory, noJournal, selection);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
if (name === 'resume') {
|
|
80
|
+
if (!record || command.length !== 2)
|
|
81
|
+
refuse('resume requires one saved local run directory');
|
|
82
|
+
const allowed = new Set(['engine', 'codex-home', 'codex-bin', 'json', 'quiet']);
|
|
83
|
+
if (Object.keys(flags).some(key => !allowed.has(key)))
|
|
84
|
+
refuse('Local resume uses frozen run settings; only --engine, --codex-home and --codex-bin may be supplied.');
|
|
85
|
+
if (record.kind === 'convert') {
|
|
86
|
+
const receipt = await resumeLocalConversion(record.directory, flags, selection);
|
|
87
|
+
if (receipt)
|
|
88
|
+
console.log(JSON.stringify(receipt));
|
|
89
|
+
}
|
|
90
|
+
else
|
|
91
|
+
await launchLocalRuntime('improve', ['resume', '--run-dir', record.directory], selection);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
if (name === 'export') {
|
|
95
|
+
await runLocalExport(command, flags, record, selection);
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
const receipt = await runLocalConversion({ source: path.resolve(command[1]), runDir: convertDirectory, flags, selection });
|
|
99
|
+
console.log(JSON.stringify(receipt));
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=cli-local-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-dispatch.js","sourceRoot":"","sources":["../src/cli-local-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type CliFlags } from './cli-arguments.js';
|
|
2
|
+
import type { EngineSelection } from './cli-engine.js';
|
|
3
|
+
import { type LocalRecord } from './cli-local-record.js';
|
|
4
|
+
export declare const LOCAL_EXPORT_FORMATS: Set<string>;
|
|
5
|
+
export declare function isLocalOutput(directory?: string): Promise<boolean>;
|
|
6
|
+
export declare function runLocalExport(command: string[], flags: CliFlags, record: LocalRecord | null, selection: EngineSelection): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=cli-local-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-export.d.ts","sourceRoot":"","sources":["../src/cli-local-export.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAExE,eAAO,MAAM,oBAAoB,aAAqD,CAAC;AACvF,wBAAsB,aAAa,CAAC,SAAS,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,OAAO,CAAC,CAItE;AACD,wBAAsB,cAAc,CAAC,OAAO,EAAC,MAAM,EAAE,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,EAAC,WAAW,GAAC,IAAI,EAAC,SAAS,EAAC,eAAe,GAAE,OAAO,CAAC,IAAI,CAAC,CAUpI"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { stringFlag } from './cli-arguments.js';
|
|
3
|
+
import { launchLocalRuntime } from './cli-local-runtime.js';
|
|
4
|
+
import { readLocalJson } from './cli-local-record.js';
|
|
5
|
+
import { CliRefusal } from './cli-refusal.js';
|
|
6
|
+
export const LOCAL_EXPORT_FORMATS = new Set(['assets', 'png', 'jpg', 'webp', 'pdf', 'react']);
|
|
7
|
+
export async function isLocalOutput(directory) {
|
|
8
|
+
if (!directory)
|
|
9
|
+
return false;
|
|
10
|
+
const manifest = await readLocalJson(path.join(path.resolve(directory), 'manifest.json'));
|
|
11
|
+
return manifest?.schemaVersion === 1 && manifest.nativeLayerDoc === false && Array.isArray(manifest.files) && typeof manifest.entrypoint === 'string';
|
|
12
|
+
}
|
|
13
|
+
export async function runLocalExport(command, flags, record, selection) {
|
|
14
|
+
const target = stringFlag(flags, 'output'), destination = stringFlag(flags, 'out-dir');
|
|
15
|
+
if (command.length !== 2 || !target || !LOCAL_EXPORT_FORMATS.has(target) || !destination)
|
|
16
|
+
throw new CliRefusal('Local output requires --output assets|png|jpg|webp|pdf|react --out-dir NEW_DIR. Native LayerDoc, SVG, PSD, PPTX and Sketch require a new API conversion of the original source image.', 'local_export_arguments');
|
|
17
|
+
if (record && record.kind !== 'convert')
|
|
18
|
+
throw new CliRefusal('Export requires a local conversion run or its output directory.', 'local_export_source');
|
|
19
|
+
const allowed = new Set(['engine', 'output', 'out-dir', 'width', 'height', 'json', 'quiet']);
|
|
20
|
+
if (Object.keys(flags).some(key => !allowed.has(key)))
|
|
21
|
+
throw new CliRefusal('Unsupported local export option. See 12ui convert --help.', 'local_export_arguments');
|
|
22
|
+
const source = record ? path.join(record.directory, 'output') : path.resolve(command[1]);
|
|
23
|
+
const args = ['--source', source, '--destination', path.resolve(destination), '--target', target];
|
|
24
|
+
for (const key of ['width', 'height']) {
|
|
25
|
+
const value = stringFlag(flags, key);
|
|
26
|
+
if (value)
|
|
27
|
+
args.push('--' + key, value);
|
|
28
|
+
}
|
|
29
|
+
await launchLocalRuntime('export', args, selection);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=cli-local-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-export.js","sourceRoot":"","sources":["../src/cli-local-export.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAiB,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAoB,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO,CAAC,CAAC,CAAC;AACvF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACpD,IAAG,CAAC,SAAS;QAAC,OAAO,KAAK,CAAC;IAC3B,MAAM,QAAQ,GAAC,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAC,eAAe,CAAC,CAAC,CAAC;IACvF,OAAO,QAAQ,EAAE,aAAa,KAAG,CAAC,IAAI,QAAQ,CAAC,cAAc,KAAG,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAG,QAAQ,CAAC;AACjJ,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB,EAAC,KAAc,EAAC,MAAuB,EAAC,SAAyB;IACrH,MAAM,MAAM,GAAC,UAAU,CAAC,KAAK,EAAC,QAAQ,CAAC,EAAC,WAAW,GAAC,UAAU,CAAC,KAAK,EAAC,SAAS,CAAC,CAAC;IAChF,IAAG,OAAO,CAAC,MAAM,KAAG,CAAC,IAAE,CAAC,MAAM,IAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAE,CAAC,WAAW;QAAC,MAAM,IAAI,UAAU,CAAC,uLAAuL,EAAC,wBAAwB,CAAC,CAAC;IACvT,IAAG,MAAM,IAAI,MAAM,CAAC,IAAI,KAAG,SAAS;QAAC,MAAM,IAAI,UAAU,CAAC,iEAAiE,EAAC,qBAAqB,CAAC,CAAC;IACnJ,MAAM,OAAO,GAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAC,QAAQ,EAAC,SAAS,EAAC,OAAO,EAAC,QAAQ,EAAC,MAAM,EAAC,OAAO,CAAC,CAAC,CAAC;IACrF,IAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAA,EAAE,CAAA,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,MAAM,IAAI,UAAU,CAAC,2DAA2D,EAAC,wBAAwB,CAAC,CAAC;IAC9J,MAAM,MAAM,GAAC,MAAM,CAAA,CAAC,CAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAC,QAAQ,CAAC,CAAA,CAAC,CAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,IAAI,GAAC,CAAC,UAAU,EAAC,MAAM,EAAC,eAAe,EAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,UAAU,EAAC,MAAM,CAAC,CAAC;IAC3F,KAAI,MAAM,GAAG,IAAI,CAAC,OAAO,EAAC,QAAQ,CAAC,EAAC,CAAC;QAAA,MAAM,KAAK,GAAC,UAAU,CAAC,KAAK,EAAC,GAAG,CAAC,CAAC;QAAA,IAAG,KAAK;YAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAC,GAAG,EAAC,KAAK,CAAC,CAAC;IAAA,CAAC;IAC3G,MAAM,kBAAkB,CAAC,QAAQ,EAAC,IAAI,EAAC,SAAS,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-improve-context.d.ts","sourceRoot":"","sources":["../src/cli-local-improve-context.ts"],"names":[],"mappings":"AAGA,+FAA+F;AAC/F,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClH"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { lstat, readFile, readdir } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/** Read only named project instruction documents; never follow symlinks or inspect secrets. */
|
|
4
|
+
export async function projectImproveBrief(repo, direction, instructions) {
|
|
5
|
+
const sections = [
|
|
6
|
+
'Apply the selected design to this real project. Preserve real data, behavior, routes and integrations. Inspect the project scripts and source before choosing build and behavior checks. Do not read credentials or secret files. Do not reset data or shared services. Report unavailable browser/build context honestly. The parent must independently inspect the real browser after this run.',
|
|
7
|
+
direction ? `User direction:\n${direction}` : 'User direction: realize the selected target design in the existing application.',
|
|
8
|
+
];
|
|
9
|
+
const ancestors = [];
|
|
10
|
+
for (let current = repo;; current = path.dirname(current)) {
|
|
11
|
+
ancestors.unshift(current);
|
|
12
|
+
if (path.dirname(current) === current)
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
async function readRule(file) {
|
|
16
|
+
const info = await lstat(file).catch(error => { if (error.code === 'ENOENT')
|
|
17
|
+
return undefined; throw error; });
|
|
18
|
+
if (info?.isFile())
|
|
19
|
+
sections.push(`Project rules (${file}):\n${await readFile(file, 'utf8')}`);
|
|
20
|
+
}
|
|
21
|
+
for (const dir of ancestors)
|
|
22
|
+
for (const name of ['AGENTS.md', 'CLAUDE.md'])
|
|
23
|
+
await readRule(path.join(dir, name));
|
|
24
|
+
const skip = new Set(['node_modules', 'dist', 'build', 'coverage', 'vendor', 'secrets', 'private', 'credentials', 'logs', 'data']);
|
|
25
|
+
async function descendants(dir) {
|
|
26
|
+
for (const entry of await readdir(dir, { withFileTypes: true })) {
|
|
27
|
+
if (entry.name.startsWith('.') || skip.has(entry.name) || entry.isSymbolicLink())
|
|
28
|
+
continue;
|
|
29
|
+
const file = path.join(dir, entry.name);
|
|
30
|
+
if (entry.isDirectory())
|
|
31
|
+
await descendants(file);
|
|
32
|
+
else if (dir !== repo && ['AGENTS.md', 'CLAUDE.md'].includes(entry.name))
|
|
33
|
+
await readRule(file);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
await descendants(repo);
|
|
37
|
+
if (instructions) {
|
|
38
|
+
const file = path.resolve(instructions);
|
|
39
|
+
if (!/\.(md|txt)$/iu.test(file) || /(^|[/.])(?:secrets?|credentials?|auth|\.env)([/.]|$)/iu.test(file))
|
|
40
|
+
throw new Error('--instructions must name a non-secret Markdown or text project brief');
|
|
41
|
+
if (!(await lstat(file)).isFile())
|
|
42
|
+
throw new Error('--instructions must be a regular file, not a symlink');
|
|
43
|
+
sections.push(`Additional caller context:\n${await readFile(file, 'utf8')}`);
|
|
44
|
+
}
|
|
45
|
+
return sections.join('\n\n');
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=cli-local-improve-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-improve-context.js","sourceRoot":"","sources":["../src/cli-local-improve-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type CliFlags } from './cli-arguments.js';
|
|
2
|
+
import type { EngineSelection } from './cli-engine.js';
|
|
3
|
+
import { launchLocalRuntime } from './cli-local-runtime.js';
|
|
4
|
+
import { runImproveCommand } from './cli-improve-command.js';
|
|
5
|
+
import type { RunJournalNotes } from './run-journal.js';
|
|
6
|
+
export declare const LOCAL_IMPROVE_RECEIPT = "local-improve.json";
|
|
7
|
+
export declare const localImproveSupported: (flags: CliFlags) => boolean;
|
|
8
|
+
type Dependencies = {
|
|
9
|
+
runSource?: typeof runImproveCommand;
|
|
10
|
+
launch?: typeof launchLocalRuntime;
|
|
11
|
+
};
|
|
12
|
+
export declare function resumeLocalImproveCommand(runDir: string, journal: RunJournalNotes, selection: EngineSelection, dependencies?: Dependencies): Promise<void>;
|
|
13
|
+
/** The CLI also owns capture/draft before the runtime's dispatch lock. */
|
|
14
|
+
export declare function runLocalImproveCommand(command: readonly string[], flags: CliFlags, journal: RunJournalNotes, selection: EngineSelection, dependencies?: Dependencies): Promise<void>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=cli-local-improve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-improve.d.ts","sourceRoot":"","sources":["../src/cli-local-improve.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAC1D,eAAO,MAAM,qBAAqB,GAAI,OAAO,QAAQ,KAAG,OAC4C,CAAC;AAUrG,KAAK,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,iBAAiB,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,kBAAkB,CAAA;CAAE,CAAC;AAkBjG,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CASpK;AAiGD,0EAA0E;AAC1E,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9L"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
3
|
+
import { access, mkdir, readFile, realpath, rename, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import sharp from 'sharp';
|
|
6
|
+
import { stringFlag } from './cli-arguments.js';
|
|
7
|
+
import { CliRefusal } from './cli-refusal.js';
|
|
8
|
+
import { launchLocalRuntime } from './cli-local-runtime.js';
|
|
9
|
+
import { runImproveCommand } from './cli-improve-command.js';
|
|
10
|
+
import { projectImproveBrief } from './cli-local-improve-context.js';
|
|
11
|
+
import { improveSlug, readImproveRecord } from './improve-workspace.js';
|
|
12
|
+
export const LOCAL_IMPROVE_RECEIPT = 'local-improve.json';
|
|
13
|
+
export const localImproveSupported = (flags) => (!flags.scope || flags.scope === 'page') && !String(flags.target ?? '').endsWith('.layerdoc.json');
|
|
14
|
+
const hashFile = async (file) => createHash('sha256').update(await readFile(file)).digest('hex');
|
|
15
|
+
async function readReceipt(runDir) {
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(await readFile(path.join(runDir, LOCAL_IMPROVE_RECEIPT), 'utf8'));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
if (error.code === 'ENOENT')
|
|
21
|
+
return undefined;
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function save(receipt) {
|
|
26
|
+
const file = path.join(receipt.runDir, LOCAL_IMPROVE_RECEIPT);
|
|
27
|
+
const temporary = file + '.' + randomUUID() + '.next';
|
|
28
|
+
await writeFile(temporary, JSON.stringify(receipt, null, 2) + '\n');
|
|
29
|
+
await rename(temporary, file);
|
|
30
|
+
}
|
|
31
|
+
async function result(receipt) {
|
|
32
|
+
try {
|
|
33
|
+
receipt.result = JSON.parse(await readFile(path.join(receipt.projectRunDir, 'result.json'), 'utf8'));
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error.code !== 'ENOENT')
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
receipt.status = receipt.result?.status ?? receipt.status;
|
|
40
|
+
await save(receipt);
|
|
41
|
+
}
|
|
42
|
+
export async function resumeLocalImproveCommand(runDir, journal, selection, dependencies = {}) {
|
|
43
|
+
const receipt = await readReceipt(path.resolve(runDir));
|
|
44
|
+
if (!receipt)
|
|
45
|
+
throw new CliRefusal('No local improve receipt found', 'local_improve_missing');
|
|
46
|
+
if (['source', 'awaiting-pick'].includes(receipt.status)) {
|
|
47
|
+
console.log(JSON.stringify(receipt));
|
|
48
|
+
journal.note({ workspace: receipt.runDir, terminal: false });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
await (dependencies.launch ?? launchLocalRuntime)('improve', ['resume', '--run-dir', receipt.projectRunDir], selection);
|
|
52
|
+
await result(receipt);
|
|
53
|
+
journal.note({ workspace: receipt.runDir, artifacts: [path.join(receipt.runDir, LOCAL_IMPROVE_RECEIPT)], terminal: receipt.status === 'complete' });
|
|
54
|
+
}
|
|
55
|
+
async function runLocalImproveUnlocked(command, flags, journal, selection, dependencies = {}) {
|
|
56
|
+
if (selection.engine !== 'codex' || !localImproveSupported(flags))
|
|
57
|
+
throw new CliRefusal('Actual-project --apply requires local Codex and a page image target', 'local_improve_unsupported');
|
|
58
|
+
const repoValue = stringFlag(flags, 'repo');
|
|
59
|
+
if (!repoValue)
|
|
60
|
+
throw new CliRefusal('--apply requires --repo PROJECT', 'local_improve_repo_required');
|
|
61
|
+
const repo = await realpath(path.resolve(repoValue));
|
|
62
|
+
const input = command[1];
|
|
63
|
+
if (!input)
|
|
64
|
+
throw new CliRefusal('improve requires a current URL or image', 'local_improve_input_required');
|
|
65
|
+
const runDir = path.resolve(stringFlag(flags, 'out-dir') ?? path.join(path.dirname(repo), '.12ui-improve', improveSlug(input)));
|
|
66
|
+
// The project runtime freezes source inventory; all artifacts must live outside it.
|
|
67
|
+
const parent = await realpath(path.dirname(runDir)).catch(error => {
|
|
68
|
+
if (error.code === 'ENOENT')
|
|
69
|
+
return path.dirname(runDir);
|
|
70
|
+
throw error;
|
|
71
|
+
});
|
|
72
|
+
const resolvedRun = path.join(parent, path.basename(runDir));
|
|
73
|
+
if (resolvedRun === repo || resolvedRun.startsWith(repo + path.sep) || repo.startsWith(resolvedRun + path.sep))
|
|
74
|
+
throw new CliRefusal('--out-dir must be outside --repo for actual-project editing', 'local_improve_output_inside_repo');
|
|
75
|
+
const prior = await readReceipt(runDir);
|
|
76
|
+
if (prior?.codexHome && selection.codexHome && path.resolve(selection.codexHome) !== prior.codexHome)
|
|
77
|
+
throw new CliRefusal('Codex authentication home differs from the saved improve run', 'local_improve_auth_home_mismatch');
|
|
78
|
+
const codexHome = prior?.codexHome ?? path.resolve(selection.codexHome ?? process.env.CODEX_HOME ?? path.join(homedir(), '.codex'));
|
|
79
|
+
if (!prior && await readImproveRecord(path.join(runDir, 'improve.json')))
|
|
80
|
+
throw new CliRefusal('This is an existing hosted improve run; retain its API backend or use a new --out-dir', 'local_improve_backend_mismatch');
|
|
81
|
+
const direction = stringFlag(flags, 'direction');
|
|
82
|
+
const instructions = stringFlag(flags, 'instructions');
|
|
83
|
+
const target = stringFlag(flags, 'target');
|
|
84
|
+
if (prior && (prior.repo !== repo || prior.input !== input || (direction !== undefined && direction !== prior.direction)
|
|
85
|
+
|| (instructions !== undefined && path.resolve(instructions) !== prior.instructions) || (target !== undefined && path.resolve(target) !== prior.target))) {
|
|
86
|
+
throw new CliRefusal('Local improve inputs differ from this run; use a new --out-dir', 'local_improve_mismatch');
|
|
87
|
+
}
|
|
88
|
+
const launch = dependencies.launch ?? launchLocalRuntime;
|
|
89
|
+
const from = stringFlag(flags, 'from') ?? 'capture';
|
|
90
|
+
const to = stringFlag(flags, 'to') ?? 'plan';
|
|
91
|
+
const stages = ['capture', 'draft', 'pick', 'convert', 'plan'];
|
|
92
|
+
if (!stages.includes(from) || !stages.includes(to) || stages.indexOf(from) > stages.indexOf(to))
|
|
93
|
+
throw new CliRefusal('Local improve stages are capture, draft, pick, convert, plan in that order', 'local_improve_stage_invalid');
|
|
94
|
+
const brief = await projectImproveBrief(repo, direction ?? prior?.direction, instructions ?? prior?.instructions);
|
|
95
|
+
const effectiveTarget = target ? path.resolve(target) : prior?.target;
|
|
96
|
+
const suppliedTargetSha = effectiveTarget ? await hashFile(effectiveTarget) : undefined;
|
|
97
|
+
if (prior?.targetSha256 && suppliedTargetSha && prior.targetSha256 !== suppliedTargetSha)
|
|
98
|
+
throw new CliRefusal('Supplied target image changed; use a new --out-dir', 'local_improve_target_changed');
|
|
99
|
+
if (effectiveTarget) {
|
|
100
|
+
const metadata = await sharp(effectiveTarget).metadata();
|
|
101
|
+
if (!['png', 'jpeg', 'webp'].includes(metadata.format ?? ''))
|
|
102
|
+
throw new CliRefusal('--target must be PNG, JPEG or WebP', 'local_improve_target_invalid');
|
|
103
|
+
}
|
|
104
|
+
if (flags['dry-run']) {
|
|
105
|
+
console.log(JSON.stringify({ engine: 'codex', operation: 'improve', repo, runDir, from, to, apply: stages.indexOf(to) >= 3, note: 'No capture, generation or project edit dispatched.' }));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// A prepared/invoked project can only be reconciled. An ordinary repeat never redispatches.
|
|
109
|
+
if (prior && !['source', 'awaiting-pick'].includes(prior.status)) {
|
|
110
|
+
if (stages.indexOf(to) < 3) {
|
|
111
|
+
console.log(JSON.stringify(prior));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const exists = async (file) => access(file).then(() => true, error => { if (error.code === 'ENOENT')
|
|
115
|
+
return false; throw error; });
|
|
116
|
+
if (!flags.resume && flags.apply && await exists(path.join(prior.projectRunDir, 'project.json'))
|
|
117
|
+
&& !await exists(path.join(prior.projectRunDir, 'dispatch.json'))) {
|
|
118
|
+
// Runtime verification and its lock protect the frozen, undispatched preparation.
|
|
119
|
+
// A dispatch claim always routes to reconciliation instead.
|
|
120
|
+
prior.status = 'applying';
|
|
121
|
+
await save(prior);
|
|
122
|
+
try {
|
|
123
|
+
await launch('improve', ['apply', '--run-dir', prior.projectRunDir,
|
|
124
|
+
'--auth-home', codexHome, ...(selection.codexBin ? ['--codex-bin', selection.codexBin] : [])], selection);
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
await result(prior);
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
await resumeLocalImproveCommand(runDir, journal, selection, dependencies);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (flags.resume)
|
|
135
|
+
throw new CliRefusal('No prepared project edit to reconcile yet; continue the source stages explicitly', 'local_improve_resume_missing');
|
|
136
|
+
await mkdir(runDir, { recursive: true });
|
|
137
|
+
const receipt = prior ?? { version: 1, engine: 'codex', operation: 'improve', repo, input, runDir, codexHome,
|
|
138
|
+
projectRunDir: path.join(runDir, 'local-edit'), status: 'source',
|
|
139
|
+
...(direction ? { direction } : {}), ...(instructions ? { instructions: path.resolve(instructions) } : {}), ...(target ? { target: path.resolve(target), targetSha256: suppliedTargetSha } : {}) };
|
|
140
|
+
await save(receipt);
|
|
141
|
+
const sourceFlags = { ...flags, 'out-dir': runDir, to: stages.indexOf(to) < 2 ? to : 'pick' };
|
|
142
|
+
// The hosted source parser rejects repo for images and direction for explicit targets.
|
|
143
|
+
// Project instructions carry those values; capture/draft/pick never need them.
|
|
144
|
+
delete sourceFlags.repo;
|
|
145
|
+
if (receipt.target) {
|
|
146
|
+
sourceFlags.target = receipt.target;
|
|
147
|
+
delete sourceFlags.direction;
|
|
148
|
+
}
|
|
149
|
+
let record = await readImproveRecord(path.join(runDir, 'improve.json'));
|
|
150
|
+
if (stages.indexOf(from) <= 2)
|
|
151
|
+
record = await (dependencies.runSource ?? runImproveCommand)(command, sourceFlags, { journal });
|
|
152
|
+
if (!record?.capture)
|
|
153
|
+
throw new CliRefusal('Capture has not settled; include capture in the requested stages', 'local_improve_capture_missing');
|
|
154
|
+
receipt.sourcePhase = path.join(runDir, 'improve.json');
|
|
155
|
+
receipt.sourceSha256 = record.capture.sha256;
|
|
156
|
+
receipt.viewport = record.viewport;
|
|
157
|
+
await save(receipt);
|
|
158
|
+
if (stages.indexOf(to) < 3)
|
|
159
|
+
return;
|
|
160
|
+
const selected = record.target?.value ?? record.pick?.imagePath;
|
|
161
|
+
if (!selected) {
|
|
162
|
+
receipt.status = 'awaiting-pick';
|
|
163
|
+
await save(receipt);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const sourceSha256 = await hashFile(record.capture.sourceImage);
|
|
167
|
+
if (sourceSha256 !== record.capture.sha256)
|
|
168
|
+
throw new CliRefusal('Captured source image changed; inspect the run before continuing', 'local_improve_source_changed');
|
|
169
|
+
const targetSha256 = await hashFile(selected);
|
|
170
|
+
if (record.pick && targetSha256 !== record.pick.sha256)
|
|
171
|
+
throw new CliRefusal('Selected image changed; inspect the run before continuing', 'local_improve_target_changed');
|
|
172
|
+
const briefPath = path.join(runDir, 'project-brief.md');
|
|
173
|
+
await writeFile(briefPath, brief);
|
|
174
|
+
Object.assign(receipt, { sourcePhase: path.join(runDir, 'improve.json'), sourceSha256, targetSha256, selectedSlot: record.pick?.slot, viewport: record.viewport, status: 'preparing' });
|
|
175
|
+
await save(receipt);
|
|
176
|
+
await launch('improve', ['prepare', '--project', repo, '--target', selected, '--source-capture', record.capture.sourceImage, '--instructions', briefPath, '--run-dir', receipt.projectRunDir, '--width', String(record.viewport.width), '--height', String(record.viewport.height)], selection);
|
|
177
|
+
receipt.status = 'prepared';
|
|
178
|
+
await save(receipt);
|
|
179
|
+
receipt.status = 'applying';
|
|
180
|
+
await save(receipt);
|
|
181
|
+
try {
|
|
182
|
+
await launch('improve', ['apply', '--run-dir', receipt.projectRunDir,
|
|
183
|
+
'--auth-home', codexHome, ...(selection.codexBin ? ['--codex-bin', selection.codexBin] : [])], selection);
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
await result(receipt);
|
|
187
|
+
}
|
|
188
|
+
journal.note({ workspace: runDir, artifacts: [path.join(runDir, LOCAL_IMPROVE_RECEIPT), briefPath], terminal: receipt.status === 'complete' });
|
|
189
|
+
}
|
|
190
|
+
/** The CLI also owns capture/draft before the runtime's dispatch lock. */
|
|
191
|
+
export async function runLocalImproveCommand(command, flags, journal, selection, dependencies = {}) {
|
|
192
|
+
const repoValue = stringFlag(flags, 'repo');
|
|
193
|
+
if (!repoValue || !command[1])
|
|
194
|
+
return runLocalImproveUnlocked(command, flags, journal, selection, dependencies);
|
|
195
|
+
const repo = await realpath(path.resolve(repoValue));
|
|
196
|
+
const runDir = path.resolve(stringFlag(flags, 'out-dir') ?? path.join(path.dirname(repo), '.12ui-improve', improveSlug(command[1])));
|
|
197
|
+
await mkdir(path.dirname(runDir), { recursive: true });
|
|
198
|
+
const lock = runDir + '.local-improve-lock';
|
|
199
|
+
try {
|
|
200
|
+
await mkdir(lock);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
if (error.code === 'EEXIST')
|
|
204
|
+
throw new CliRefusal('This improve run is locked; inspect the active process before removing its lock', 'local_improve_locked');
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
await runLocalImproveUnlocked(command, flags, journal, selection, dependencies);
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
await rm(lock, { recursive: true });
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=cli-local-improve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-improve.js","sourceRoot":"","sources":["../src/cli-local-improve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function readLocalJson(file: string): Promise<Record<string, any> | null>;
|
|
2
|
+
export type LocalRecord = {
|
|
3
|
+
directory: string;
|
|
4
|
+
kind: 'convert' | 'improve' | 'improve-flow';
|
|
5
|
+
};
|
|
6
|
+
export declare function readLocalRecord(given?: string): Promise<LocalRecord | null>;
|
|
7
|
+
export declare function printLocalStatus(record: LocalRecord, wait: boolean, timeoutMs?: number): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=cli-local-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-local-record.d.ts","sourceRoot":"","sources":["../src/cli-local-record.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAGrF;AACD,MAAM,MAAM,WAAW,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,cAAc,CAAA;CAAE,CAAC;AAC9F,wBAAsB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAWjF;AACD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB5G"}
|