@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.
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  App
4
- } from "./chunk-XKKMU7VP.js";
5
- import "./chunk-XPU3TFMH.js";
4
+ } from "./chunk-W72LUSYS.js";
5
+ import "./chunk-AM7WBP3P.js";
6
6
  import "./chunk-KNPLVGZB.js";
7
7
  import "./chunk-LNJ7O5O4.js";
8
8
  import "./chunk-GE6UL6C7.js";
@@ -517,7 +517,7 @@ ${driftSummary(drift)}`);
517
517
  } catch {
518
518
  }
519
519
  try {
520
- const { scanEvasion, sentinelSummary } = await import("./sentinel-4SKSSCXX.js");
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
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Session
4
- } from "./chunk-XPU3TFMH.js";
4
+ } from "./chunk-AM7WBP3P.js";
5
5
 
6
6
  // src/daemon/client.ts
7
7
  import net from "net";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Session
4
- } from "./chunk-XPU3TFMH.js";
4
+ } from "./chunk-AM7WBP3P.js";
5
5
  import {
6
6
  completeCommand
7
7
  } from "./chunk-LNJ7O5O4.js";
package/dist/cli.js CHANGED
@@ -3,11 +3,11 @@ import {
3
3
  connectDaemon,
4
4
  socketPath,
5
5
  startDaemon
6
- } from "./chunk-SQAGOX4M.js";
6
+ } from "./chunk-JGBWTFU6.js";
7
7
  import {
8
8
  App
9
- } from "./chunk-XKKMU7VP.js";
10
- import "./chunk-XPU3TFMH.js";
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-RWLRX6YF.js");
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-QHLHW7EI.js");
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-VKYR3SNL.js");
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-UFNVTZXE.js");
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-YB2IMA4N.js");
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.1" : "0.0.0-dev";
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
  }
@@ -31,7 +31,7 @@ function buildReceipt(cwd, report) {
31
31
  }
32
32
  }
33
33
  const unsigned = {
34
- version: true ? "0.7.1" : "0.0.0-dev",
34
+ version: true ? "0.7.2" : "0.0.0-dev",
35
35
  node: process.version,
36
36
  gitHead,
37
37
  report,
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  connectDaemon,
4
4
  socketPath
5
- } from "./chunk-SQAGOX4M.js";
6
- import "./chunk-XPU3TFMH.js";
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";
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aayambansal/squint",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
4
4
  "description": "Lovable for your terminal \u2014 a frontend harness on top of Claude Code, Codex, and other coding agents.",
5
5
  "type": "module",
6
6
  "license": "MIT",