Repair workspace authoring: typed RPC inputs, automatic preservation, and template releases
Use checked input contracts and protobuf JSON for CLI roundtrips; generate Web Studio platform inputs; reject invalid constructors before allocation and filter Createable eligibility. Preserve compatible storage without no-op migrations, report activation readiness, and validate migration coverage before maintenance. Follow authored package declarations during scaffold refresh and queue source capture. Add a real local TODO check/activate/create/place/edit acceptance, publish updated protocol and SDK dependencies, and make verified template default selection explicit.
This commit is contained in:
@@ -5,6 +5,7 @@ import path from "node:path";
|
||||
import { parseQx, walkSyntax } from "./source.js";
|
||||
import { authoringContext } from "./authoring-context.js";
|
||||
import { readQxSource } from "./source-loader.js";
|
||||
import {loadQuixosLock} from "../resource-lock/index.js";
|
||||
|
||||
const execFile = promisify(callback);
|
||||
const git = async (root: string, args: string[]) => (await execFile("git", ["-C", root, ...args], {
|
||||
@@ -53,12 +54,14 @@ export async function inspectAuthoringRepository(root: string, historyLimit = 10
|
||||
|
||||
export async function inspectWorkbench(start: string, selector?: string) {
|
||||
const context = await authoringContext(start);
|
||||
if (!selector) {
|
||||
if (!selector || selector === ".") {
|
||||
const relative = path.relative(context.workbench, await realpath(start));
|
||||
selector = context.resources.find(entry => relative === entry.directory || relative.startsWith(entry.directory + path.sep))?.directory ?? "root";
|
||||
}
|
||||
const lock = await loadQuixosLock(path.join(context.workbench, "root/quixos.lock"));
|
||||
const aliases = lock.ok ? lock.lock.resources.filter(entry => entry.binding === selector) : [];
|
||||
const selected = context.resources.filter(entry => !selector || selector === entry.directory ||
|
||||
selector === entry.resourceId || selector === path.basename(entry.directory));
|
||||
selector === entry.resourceId || selector === path.basename(entry.directory) || aliases.some(alias => alias.kind === entry.kind && alias.source.repository === entry.source?.repository));
|
||||
if (!selected.length) throw new Error(`No registered resource matches ${selector}`);
|
||||
if (selector && selected.length > 1) throw new Error(`Ambiguous resource ${selector}; use its resource ID or directory`);
|
||||
const resources = [];
|
||||
|
||||
Reference in New Issue
Block a user