@interchained/portal-cli 0.1.2 → 0.1.4
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/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +13 -44
- package/dist/commands/generate.js.map +1 -1
- package/dist/utils/contract.d.ts +8 -8
- package/dist/utils/contract.d.ts.map +1 -1
- package/dist/utils/contract.js +42 -20
- package/dist/utils/contract.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAyBD,wBAAsB,eAAe,CACnC,GAAG,EAAE,kBAAkB,EACvB,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAyBD,wBAAsB,eAAe,CACnC,GAAG,EAAE,kBAAkB,EACvB,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Mf"}
|
|
@@ -16,7 +16,7 @@ import prompts from "prompts";
|
|
|
16
16
|
import pc from "picocolors";
|
|
17
17
|
import ora from "ora";
|
|
18
18
|
import { Runner, Sentinel, generateFromPrompt, applyPatch, PatchStore, } from "@interchained/portal-agent";
|
|
19
|
-
import { banner, header, success, fail,
|
|
19
|
+
import { banner, header, success, fail, info, blank, icon } from "../utils/print.js";
|
|
20
20
|
import { loadContract } from "../utils/contract.js";
|
|
21
21
|
// ── API route template ────────────────────────────────────────────────────────
|
|
22
22
|
function apiRouteTemplate(name) {
|
|
@@ -170,54 +170,23 @@ export async function generateCommand(sub, description, opts = {}) {
|
|
|
170
170
|
process.exit(1);
|
|
171
171
|
}
|
|
172
172
|
const { patch, sentinelReview, sentinelApplied } = result;
|
|
173
|
-
// ── Sentinel
|
|
173
|
+
// ── Sentinel always applies (clean or self-corrected) ─────────────────────
|
|
174
174
|
if (sentinelApplied) {
|
|
175
|
-
|
|
176
|
-
if (
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
blank();
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
// ── Sentinel rejected ─────────────────────────────────────────────────────
|
|
185
|
-
if (sentinelReview && !sentinelReview.approved) {
|
|
186
|
-
header(`${icon.fail} Sentinel blocked: ${patch.file}`);
|
|
187
|
-
info(sentinelReview.summary);
|
|
188
|
-
blank();
|
|
189
|
-
sentinelReview.violations.forEach((v) => console.log(` ${icon.fail} ${pc.red(v)}`));
|
|
190
|
-
blank();
|
|
191
|
-
// Show a preview of what was generated anyway
|
|
192
|
-
console.log(pc.dim("─── preview (blocked) ───────────────────────────────"));
|
|
193
|
-
patch.proposed.split("\n").slice(0, 30).forEach((l) => console.log(pc.dim(" ") + l));
|
|
194
|
-
if (patch.proposed.split("\n").length > 30)
|
|
195
|
-
console.log(pc.dim(" …"));
|
|
196
|
-
console.log(pc.dim("─────────────────────────────────────────────────────"));
|
|
197
|
-
blank();
|
|
198
|
-
const { choice } = await prompts({
|
|
199
|
-
type: "select",
|
|
200
|
-
name: "choice",
|
|
201
|
-
message: "Sentinel rejected this patch. What do you want to do?",
|
|
202
|
-
choices: [
|
|
203
|
-
{ title: pc.yellow("⚠ Apply anyway (override sentinel)"), value: "override" },
|
|
204
|
-
{ title: pc.blue("~ Save as pending for later review"), value: "save" },
|
|
205
|
-
{ title: pc.red("✗ Discard"), value: "discard" },
|
|
206
|
-
],
|
|
207
|
-
});
|
|
208
|
-
if (choice === "override") {
|
|
209
|
-
await store.update(patch.id, { status: "approved" });
|
|
210
|
-
await applyPatch({ ...patch, status: "approved" }, root, store);
|
|
211
|
-
warn(`Applied with sentinel override: ${pc.bold(patch.file)}`);
|
|
212
|
-
}
|
|
213
|
-
else if (choice === "save") {
|
|
214
|
-
info(`Patch saved as pending — run portal patch to revisit.`);
|
|
175
|
+
const { sentinelFix } = result;
|
|
176
|
+
if (sentinelFix) {
|
|
177
|
+
header(`${icon.pass} Sentinel applied (auto-corrected): ${patch.file}`);
|
|
178
|
+
info(sentinelFix.summary);
|
|
179
|
+
blank();
|
|
180
|
+
sentinelFix.changes.forEach((c) => console.log(` ${icon.pass} ${pc.cyan(c)}`));
|
|
215
181
|
}
|
|
216
182
|
else {
|
|
217
|
-
|
|
218
|
-
|
|
183
|
+
header(`${icon.pass} Sentinel applied (clean): ${patch.file}`);
|
|
184
|
+
if (sentinelReview)
|
|
185
|
+
info(sentinelReview.summary);
|
|
219
186
|
}
|
|
220
187
|
blank();
|
|
188
|
+
info(`Run portal dev to see the new page.`);
|
|
189
|
+
blank();
|
|
221
190
|
return;
|
|
222
191
|
}
|
|
223
192
|
// ── No sentinel — human decides ───────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EACL,MAAM,EACN,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,UAAU,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/contract.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Load app.contract
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Load app.contract from a Portal project.
|
|
3
|
+
*
|
|
4
|
+
* Supported formats (checked in order):
|
|
5
|
+
* 1. app.contract.json — plain JSON, zero parsing ambiguity
|
|
6
|
+
* 2. app.contract.ts / .js — static TS/JS, several export patterns handled
|
|
7
|
+
*
|
|
8
|
+
* The contract file is intentionally kept as static data (no runtime logic).
|
|
9
|
+
* We extract it with a regex rather than executing arbitrary code.
|
|
5
10
|
*/
|
|
6
11
|
import { type AppContract } from "@interchained/portal-contract";
|
|
7
12
|
export declare function findContractPath(root: string): Promise<string | null>;
|
|
8
|
-
/**
|
|
9
|
-
* Load a contract from a Portal project.
|
|
10
|
-
* Attempts to read and evaluate the contract file.
|
|
11
|
-
* Falls back to a safe empty contract if not found.
|
|
12
|
-
*/
|
|
13
13
|
export declare function loadContract(root?: string): Promise<AppContract>;
|
|
14
14
|
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/utils/contract.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/utils/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAWnF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAM3E;AAED,wBAAsB,YAAY,CAAC,IAAI,SAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmC7E"}
|
package/dist/utils/contract.js
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Load app.contract
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Load app.contract from a Portal project.
|
|
3
|
+
*
|
|
4
|
+
* Supported formats (checked in order):
|
|
5
|
+
* 1. app.contract.json — plain JSON, zero parsing ambiguity
|
|
6
|
+
* 2. app.contract.ts / .js — static TS/JS, several export patterns handled
|
|
7
|
+
*
|
|
8
|
+
* The contract file is intentionally kept as static data (no runtime logic).
|
|
9
|
+
* We extract it with a regex rather than executing arbitrary code.
|
|
5
10
|
*/
|
|
6
11
|
import { readFile, access } from "node:fs/promises";
|
|
7
12
|
import { join } from "node:path";
|
|
8
13
|
import { validateContract } from "@interchained/portal-contract";
|
|
9
14
|
const CANDIDATE_PATHS = [
|
|
15
|
+
"app.contract.json",
|
|
10
16
|
"app.contract.ts",
|
|
11
17
|
"app.contract.js",
|
|
18
|
+
"portal.contract.json",
|
|
12
19
|
"portal.contract.ts",
|
|
13
20
|
"portal.contract.js",
|
|
14
21
|
];
|
|
@@ -19,35 +26,50 @@ export async function findContractPath(root) {
|
|
|
19
26
|
await access(full);
|
|
20
27
|
return full;
|
|
21
28
|
}
|
|
22
|
-
catch { /*
|
|
29
|
+
catch { /* next */ }
|
|
23
30
|
}
|
|
24
31
|
return null;
|
|
25
32
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Load a contract from a Portal project.
|
|
28
|
-
* Attempts to read and evaluate the contract file.
|
|
29
|
-
* Falls back to a safe empty contract if not found.
|
|
30
|
-
*/
|
|
31
33
|
export async function loadContract(root = process.cwd()) {
|
|
32
34
|
const contractPath = await findContractPath(root);
|
|
33
|
-
if (!contractPath)
|
|
35
|
+
if (!contractPath)
|
|
34
36
|
return { name: "Portal App", goals: [] };
|
|
35
|
-
}
|
|
36
37
|
try {
|
|
37
38
|
const src = await readFile(contractPath, "utf-8");
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (!match) {
|
|
42
|
-
return { name: "Portal App", goals: [] };
|
|
39
|
+
// ── JSON file ─────────────────────────────────────────────────────────────
|
|
40
|
+
if (contractPath.endsWith(".json")) {
|
|
41
|
+
return validateContract(JSON.parse(src));
|
|
43
42
|
}
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
// ── TS/JS patterns ────────────────────────────────────────────────────────
|
|
44
|
+
// We try several common shapes, in order of specificity.
|
|
45
|
+
// 1. defineApp({ ... })
|
|
46
|
+
const defineMatch = src.match(/defineApp\s*\(\s*(\{[\s\S]*?\})\s*\)/);
|
|
47
|
+
if (defineMatch)
|
|
48
|
+
return evalObject(defineMatch[1]);
|
|
49
|
+
// 2. export default { ... } (inline object literal)
|
|
50
|
+
const exportDefaultInline = src.match(/export\s+default\s+(\{[\s\S]*\})\s*;?\s*$/);
|
|
51
|
+
if (exportDefaultInline)
|
|
52
|
+
return evalObject(exportDefaultInline[1]);
|
|
53
|
+
// 3. const <name>: AppContract = { ... }
|
|
54
|
+
const constTyped = src.match(/const\s+\w+\s*:\s*AppContract\s*=\s*(\{[\s\S]*?\});\s*$/m);
|
|
55
|
+
if (constTyped)
|
|
56
|
+
return evalObject(constTyped[1]);
|
|
57
|
+
// 4. const <name> = { ... } (no type annotation)
|
|
58
|
+
const constPlain = src.match(/const\s+\w+\s*=\s*(\{[\s\S]*?\});\s*$/m);
|
|
59
|
+
if (constPlain)
|
|
60
|
+
return evalObject(constPlain[1]);
|
|
61
|
+
return { name: "Portal App", goals: [] };
|
|
48
62
|
}
|
|
49
63
|
catch {
|
|
50
64
|
return { name: "Portal App", goals: [] };
|
|
51
65
|
}
|
|
52
66
|
}
|
|
67
|
+
function evalObject(src) {
|
|
68
|
+
// Strip TypeScript casts and `as const` before evaluating
|
|
69
|
+
const cleaned = src
|
|
70
|
+
.replace(/\s+as\s+\w[\w.]*(\[\])?/g, "")
|
|
71
|
+
.replace(/\s+satisfies\s+\w[\w.]*/g, "");
|
|
72
|
+
const fn = new Function(`return (${cleaned})`);
|
|
73
|
+
return validateContract(fn());
|
|
74
|
+
}
|
|
53
75
|
//# sourceMappingURL=contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/utils/contract.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/utils/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAoB,MAAM,+BAA+B,CAAC;AAEnF,MAAM,eAAe,GAAG;IACtB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,sBAAsB;IACtB,oBAAoB;IACpB,oBAAoB;CACrB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IACrD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAElD,6EAA6E;QAC7E,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,6EAA6E;QAC7E,yDAAyD;QAEzD,wBAAwB;QACxB,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtE,IAAI,WAAW;YAAE,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,sDAAsD;QACtD,MAAM,mBAAmB,GAAG,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnF,IAAI,mBAAmB;YAAE,OAAO,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnE,yCAAyC;QACzC,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACzF,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjD,mDAAmD;QACnD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACvE,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,0DAA0D;IAC1D,MAAM,OAAO,GAAG,GAAG;SAChB,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;SACvC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,WAAW,OAAO,GAAG,CAAC,CAAC;IAC/C,OAAO,gBAAgB,CAAC,EAAE,EAAa,CAAC,CAAC;AAC3C,CAAC"}
|
package/package.json
CHANGED