@aayambansal/squint 0.7.1 → 0.7.2
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/{App-VKYR3SNL.js → App-W2U3EUM6.js} +2 -2
- package/dist/{chunk-XPU3TFMH.js → chunk-AM7WBP3P.js} +1 -1
- package/dist/{chunk-SQAGOX4M.js → chunk-JGBWTFU6.js} +1 -1
- package/dist/{chunk-XKKMU7VP.js → chunk-W72LUSYS.js} +1 -1
- package/dist/cli.js +9 -9
- package/dist/{init-YB2IMA4N.js → init-FASBBKC6.js} +14 -0
- package/dist/{receipts-UFNVTZXE.js → receipts-MCEUXL6I.js} +1 -1
- package/dist/{remote-QHLHW7EI.js → remote-TDNUUOUN.js} +2 -2
- package/dist/{sentinel-4SKSSCXX.js → sentinel-VR44TKIC.js} +0 -0
- package/dist/{server-RWLRX6YF.js → server-QSU4H564.js} +35 -0
- package/package.json +1 -1
|
@@ -517,7 +517,7 @@ ${driftSummary(drift)}`);
|
|
|
517
517
|
} catch {
|
|
518
518
|
}
|
|
519
519
|
try {
|
|
520
|
-
const { scanEvasion, sentinelSummary } = await import("./sentinel-
|
|
520
|
+
const { scanEvasion, sentinelSummary } = await import("./sentinel-VR44TKIC.js");
|
|
521
521
|
const evasions = scanEvasion(this.execCwd(), checkpoint.snapshot.stashHash ?? "HEAD");
|
|
522
522
|
if (evasions.length > 0) {
|
|
523
523
|
this.push("error", `\u26A0 sentinel: ${evasions.length} gate-evasion pattern(s) this turn
|
package/dist/cli.js
CHANGED
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
connectDaemon,
|
|
4
4
|
socketPath,
|
|
5
5
|
startDaemon
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JGBWTFU6.js";
|
|
7
7
|
import {
|
|
8
8
|
App
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-W72LUSYS.js";
|
|
10
|
+
import "./chunk-AM7WBP3P.js";
|
|
11
11
|
import "./chunk-KNPLVGZB.js";
|
|
12
12
|
import "./chunk-LNJ7O5O4.js";
|
|
13
13
|
import "./chunk-GE6UL6C7.js";
|
|
@@ -188,18 +188,18 @@ function registerDaemon(program2) {
|
|
|
188
188
|
process.on("SIGTERM", stop);
|
|
189
189
|
});
|
|
190
190
|
program2.command("mcp").description("serve the gates as MCP tools over stdio (check, shot, flows, context)").action(async () => {
|
|
191
|
-
const { runMcpServer } = await import("./server-
|
|
191
|
+
const { runMcpServer } = await import("./server-QSU4H564.js");
|
|
192
192
|
runMcpServer(process.cwd());
|
|
193
193
|
});
|
|
194
194
|
program2.command("attach").description("attach this terminal to a running squint daemon (full TUI; --plain for line mode)").option("--plain", "line-mode attach instead of the full TUI").action(async (opts) => {
|
|
195
195
|
const cwd = process.cwd();
|
|
196
196
|
if (!opts.plain) {
|
|
197
197
|
try {
|
|
198
|
-
const { RemoteSession } = await import("./remote-
|
|
198
|
+
const { RemoteSession } = await import("./remote-TDNUUOUN.js");
|
|
199
199
|
const remote = await RemoteSession.connect(cwd);
|
|
200
200
|
const config = loadConfig(defaultPaths(cwd));
|
|
201
201
|
const { render: render2 } = await import("ink");
|
|
202
|
-
const { App: App2 } = await import("./App-
|
|
202
|
+
const { App: App2 } = await import("./App-W2U3EUM6.js");
|
|
203
203
|
const React = await import("react");
|
|
204
204
|
render2(
|
|
205
205
|
React.createElement(App2, {
|
|
@@ -605,7 +605,7 @@ function registerQuality(program2) {
|
|
|
605
605
|
report.ok = !failed;
|
|
606
606
|
report.finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
607
607
|
try {
|
|
608
|
-
const { writeReceipt } = await import("./receipts-
|
|
608
|
+
const { writeReceipt } = await import("./receipts-MCEUXL6I.js");
|
|
609
609
|
console.log(pc5.dim(`receipt \u2192 ${writeReceipt(cwd, report)}`));
|
|
610
610
|
} catch {
|
|
611
611
|
}
|
|
@@ -710,7 +710,7 @@ function registerRun(program2) {
|
|
|
710
710
|
import pc7 from "picocolors";
|
|
711
711
|
function registerScaffold(program2) {
|
|
712
712
|
program2.command("init").description("Scaffold a new Vite + React + TS + Tailwind app with token-first CSS").argument("[dir]", "target directory", ".").option("--force", "write into a non-empty directory").option("--no-install", "skip npm install").action(async (dir, options) => {
|
|
713
|
-
const { installDependencies, writeTemplate } = await import("./init-
|
|
713
|
+
const { installDependencies, writeTemplate } = await import("./init-FASBBKC6.js");
|
|
714
714
|
let result;
|
|
715
715
|
try {
|
|
716
716
|
result = writeTemplate(dir, { force: options.force });
|
|
@@ -804,7 +804,7 @@ function registerTui(program2) {
|
|
|
804
804
|
}
|
|
805
805
|
|
|
806
806
|
// src/cli.tsx
|
|
807
|
-
var VERSION = true ? "0.7.
|
|
807
|
+
var VERSION = true ? "0.7.2" : "0.0.0-dev";
|
|
808
808
|
var program = new Command();
|
|
809
809
|
program.name("squint").description("Lovable for your terminal \u2014 a frontend harness on top of Claude Code, Codex, and friends.").version(VERSION);
|
|
810
810
|
registerRun(program);
|
|
@@ -145,6 +145,20 @@ dist/
|
|
|
145
145
|
goto /
|
|
146
146
|
expect Ready
|
|
147
147
|
shot home
|
|
148
|
+
`,
|
|
149
|
+
".squint/checks/root-renders.js": `// The starter check: replayed against the live page after every turn.
|
|
150
|
+
// Contract: this file evaluates IN THE PAGE to an array of failure
|
|
151
|
+
// strings \u2014 empty means pass. First-line pragmas move a check to full
|
|
152
|
+
// audits (// squint-trigger: audit) or the daemon's clock (interval:300).
|
|
153
|
+
(() => {
|
|
154
|
+
const root = document.querySelector('#root');
|
|
155
|
+
if (!root) return ['#root is missing from the page'];
|
|
156
|
+
if (root.children.length === 0) return ['#root rendered empty \u2014 the app did not mount'];
|
|
157
|
+
return [];
|
|
158
|
+
})()
|
|
159
|
+
`,
|
|
160
|
+
".squint/rules.md": `Build from the design tokens in src/index.css \u2014 never hardcode a color a token covers.
|
|
161
|
+
Keep every interactive element reachable by keyboard with a visible focus state.
|
|
148
162
|
`
|
|
149
163
|
};
|
|
150
164
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import {
|
|
3
3
|
connectDaemon,
|
|
4
4
|
socketPath
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-JGBWTFU6.js";
|
|
6
|
+
import "./chunk-AM7WBP3P.js";
|
|
7
7
|
import "./chunk-KNPLVGZB.js";
|
|
8
8
|
import "./chunk-GE6UL6C7.js";
|
|
9
9
|
import "./chunk-UBADCBPT.js";
|
|
Binary file
|
|
@@ -87,6 +87,41 @@ ${list.join("\n")}`);
|
|
|
87
87
|
return lines.join("\n");
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
|
+
{
|
|
91
|
+
name: "squint_flow_suggest",
|
|
92
|
+
description: "Draft a smoke flow per declared route (.squint/routes) from the live page's own headings \u2014 goto/expect/shot files in .squint/flows/, existing flows untouched.",
|
|
93
|
+
inputSchema: { type: "object", properties: { url: { type: "string" } }, required: ["url"] },
|
|
94
|
+
async run(args, cwd) {
|
|
95
|
+
const chrome = findChrome();
|
|
96
|
+
if (!chrome) return "no Chrome/Chromium found";
|
|
97
|
+
const { suggestFlows } = await import("./flows-SYDNB5IW.js");
|
|
98
|
+
const { created, skipped } = await suggestFlows(cwd, String(args.url ?? ""), chrome);
|
|
99
|
+
return [
|
|
100
|
+
created.length > 0 ? `drafted: ${created.join(", ")}` : "nothing drafted",
|
|
101
|
+
skipped.length > 0 ? `kept existing: ${skipped.join(", ")}` : ""
|
|
102
|
+
].filter(Boolean).join("\n");
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: "squint_receipt_verify",
|
|
107
|
+
description: "Verify a .squint/receipts/*.json verification receipt: recompute its digest and report whether the report or screenshots were edited after sealing.",
|
|
108
|
+
inputSchema: { type: "object", properties: { path: { type: "string" } }, required: ["path"] },
|
|
109
|
+
async run(args, cwd) {
|
|
110
|
+
const fs = await import("fs");
|
|
111
|
+
const path = await import("path");
|
|
112
|
+
const { verifyReceipt } = await import("./receipts-MCEUXL6I.js");
|
|
113
|
+
const file = path.isAbsolute(String(args.path)) ? String(args.path) : path.join(cwd, String(args.path));
|
|
114
|
+
let receipt;
|
|
115
|
+
try {
|
|
116
|
+
receipt = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
117
|
+
} catch (error) {
|
|
118
|
+
return `unreadable receipt: ${error instanceof Error ? error.message : String(error)}`;
|
|
119
|
+
}
|
|
120
|
+
const intact = verifyReceipt(receipt);
|
|
121
|
+
const ok = receipt.report?.ok;
|
|
122
|
+
return intact ? `digest intact \u2014 this receipt is what squint sealed (run ok: ${ok}, git ${receipt.gitHead ?? "n/a"}, squint ${receipt.version})` : "DIGEST MISMATCH \u2014 this receipt was edited after sealing; do not trust it";
|
|
123
|
+
}
|
|
124
|
+
},
|
|
90
125
|
{
|
|
91
126
|
name: "squint_context",
|
|
92
127
|
description: "Itemize what squint injects into engine asks \u2014 token cost per source with staleness warnings (stale locks, generic skill triggers, oversized always-on context).",
|
package/package.json
CHANGED