@specific.dev/cli 0.1.127 → 0.1.128
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/admin/404/index.html +1 -1
- package/dist/admin/404.html +1 -1
- package/dist/admin/__next.!KGRlZmF1bHQp.__PAGE__.txt +1 -1
- package/dist/admin/__next.!KGRlZmF1bHQp.txt +1 -1
- package/dist/admin/__next._full.txt +1 -1
- package/dist/admin/__next._head.txt +1 -1
- package/dist/admin/__next._index.txt +1 -1
- package/dist/admin/__next._tree.txt +1 -1
- package/dist/admin/_not-found/__next._full.txt +1 -1
- package/dist/admin/_not-found/__next._head.txt +1 -1
- package/dist/admin/_not-found/__next._index.txt +1 -1
- package/dist/admin/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/dist/admin/_not-found/__next._not-found.txt +1 -1
- package/dist/admin/_not-found/__next._tree.txt +1 -1
- package/dist/admin/_not-found/index.html +1 -1
- package/dist/admin/_not-found/index.txt +1 -1
- package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.__PAGE__.txt +1 -1
- package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.txt +1 -1
- package/dist/admin/databases/__next.!KGRlZmF1bHQp.txt +1 -1
- package/dist/admin/databases/__next._full.txt +1 -1
- package/dist/admin/databases/__next._head.txt +1 -1
- package/dist/admin/databases/__next._index.txt +1 -1
- package/dist/admin/databases/__next._tree.txt +1 -1
- package/dist/admin/databases/index.html +1 -1
- package/dist/admin/databases/index.txt +1 -1
- package/dist/admin/fullscreen/__next._full.txt +1 -1
- package/dist/admin/fullscreen/__next._head.txt +1 -1
- package/dist/admin/fullscreen/__next._index.txt +1 -1
- package/dist/admin/fullscreen/__next._tree.txt +1 -1
- package/dist/admin/fullscreen/__next.fullscreen.__PAGE__.txt +1 -1
- package/dist/admin/fullscreen/__next.fullscreen.txt +1 -1
- package/dist/admin/fullscreen/databases/__next._full.txt +1 -1
- package/dist/admin/fullscreen/databases/__next._head.txt +1 -1
- package/dist/admin/fullscreen/databases/__next._index.txt +1 -1
- package/dist/admin/fullscreen/databases/__next._tree.txt +1 -1
- package/dist/admin/fullscreen/databases/__next.fullscreen.databases.__PAGE__.txt +1 -1
- package/dist/admin/fullscreen/databases/__next.fullscreen.databases.txt +1 -1
- package/dist/admin/fullscreen/databases/__next.fullscreen.txt +1 -1
- package/dist/admin/fullscreen/databases/index.html +1 -1
- package/dist/admin/fullscreen/databases/index.txt +1 -1
- package/dist/admin/fullscreen/index.html +1 -1
- package/dist/admin/fullscreen/index.txt +1 -1
- package/dist/admin/index.html +1 -1
- package/dist/admin/index.txt +1 -1
- package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.__PAGE__.txt +1 -1
- package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.txt +1 -1
- package/dist/admin/mail/__next.!KGRlZmF1bHQp.txt +1 -1
- package/dist/admin/mail/__next._full.txt +1 -1
- package/dist/admin/mail/__next._head.txt +1 -1
- package/dist/admin/mail/__next._index.txt +1 -1
- package/dist/admin/mail/__next._tree.txt +1 -1
- package/dist/admin/mail/index.html +1 -1
- package/dist/admin/mail/index.txt +1 -1
- package/dist/admin/workflows/__next.!KGRlZmF1bHQp.txt +1 -1
- package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.__PAGE__.txt +1 -1
- package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.txt +1 -1
- package/dist/admin/workflows/__next._full.txt +1 -1
- package/dist/admin/workflows/__next._head.txt +1 -1
- package/dist/admin/workflows/__next._index.txt +1 -1
- package/dist/admin/workflows/__next._tree.txt +1 -1
- package/dist/admin/workflows/index.html +1 -1
- package/dist/admin/workflows/index.txt +1 -1
- package/dist/cli.js +58 -19
- package/package.json +1 -1
- /package/dist/admin/_next/static/{tWkoycW-NhVqIuvprR9OV → RI2b-FbUxlHXeowkJKNZM}/_buildManifest.js +0 -0
- /package/dist/admin/_next/static/{tWkoycW-NhVqIuvprR9OV → RI2b-FbUxlHXeowkJKNZM}/_clientMiddlewareManifest.json +0 -0
- /package/dist/admin/_next/static/{tWkoycW-NhVqIuvprR9OV → RI2b-FbUxlHXeowkJKNZM}/_ssgManifest.js +0 -0
package/dist/cli.js
CHANGED
|
@@ -371941,38 +371941,77 @@ var TunnelClientImpl = class extends EventEmitter2 {
|
|
|
371941
371941
|
const remote = net7.connect({ host: this.tunnelHost, port: this.info.port });
|
|
371942
371942
|
remote.setKeepAlive(true, 3e4);
|
|
371943
371943
|
this.pool.add(remote);
|
|
371944
|
+
let active = false;
|
|
371945
|
+
let errored = false;
|
|
371944
371946
|
remote.once("data", (firstChunk) => {
|
|
371945
371947
|
this.pool.delete(remote);
|
|
371948
|
+
active = true;
|
|
371946
371949
|
this.pipeToLocal(remote, firstChunk);
|
|
371947
371950
|
});
|
|
371948
|
-
let errored = false;
|
|
371949
371951
|
remote.on("error", (err) => {
|
|
371950
371952
|
errored = true;
|
|
371951
371953
|
this.emit("error", err);
|
|
371952
371954
|
});
|
|
371953
|
-
remote.on("close", () =>
|
|
371955
|
+
remote.on("close", () => {
|
|
371956
|
+
if (this.closed)
|
|
371957
|
+
return;
|
|
371958
|
+
if (active) {
|
|
371959
|
+
this.fillPool();
|
|
371960
|
+
return;
|
|
371961
|
+
}
|
|
371962
|
+
this.pool.delete(remote);
|
|
371963
|
+
if (errored && this.pool.size === 0) {
|
|
371964
|
+
this.reconnect();
|
|
371965
|
+
} else {
|
|
371966
|
+
this.fillPool();
|
|
371967
|
+
}
|
|
371968
|
+
});
|
|
371954
371969
|
}
|
|
371955
371970
|
pipeToLocal(remote, firstChunk) {
|
|
371971
|
+
let buffered = firstChunk;
|
|
371972
|
+
const HEADER_END = Buffer.from("\r\n\r\n");
|
|
371973
|
+
const MAX_HEADER_BYTES = 64 * 1024;
|
|
371974
|
+
const flush = (end) => {
|
|
371975
|
+
const headers = buffered.subarray(0, end + HEADER_END.length);
|
|
371976
|
+
const body = buffered.subarray(end + HEADER_END.length);
|
|
371977
|
+
const rewritten = this.rewriteDevOriginHeaders(headers);
|
|
371978
|
+
const request2 = body.length > 0 ? Buffer.concat([rewritten, body]) : rewritten;
|
|
371979
|
+
this.openLocal(remote, request2);
|
|
371980
|
+
};
|
|
371981
|
+
const initial = buffered.indexOf(HEADER_END);
|
|
371982
|
+
if (initial !== -1) {
|
|
371983
|
+
flush(initial);
|
|
371984
|
+
return;
|
|
371985
|
+
}
|
|
371986
|
+
const onData = (chunk) => {
|
|
371987
|
+
buffered = Buffer.concat([buffered, chunk]);
|
|
371988
|
+
const end = buffered.indexOf(HEADER_END);
|
|
371989
|
+
if (end !== -1) {
|
|
371990
|
+
remote.off("data", onData);
|
|
371991
|
+
flush(end);
|
|
371992
|
+
} else if (buffered.length > MAX_HEADER_BYTES) {
|
|
371993
|
+
remote.off("data", onData);
|
|
371994
|
+
remote.destroy();
|
|
371995
|
+
}
|
|
371996
|
+
};
|
|
371997
|
+
remote.on("data", onData);
|
|
371998
|
+
}
|
|
371999
|
+
openLocal(remote, request2) {
|
|
371956
372000
|
const local = net7.connect({ host: "127.0.0.1", port: this.localPort }, () => {
|
|
371957
|
-
local.write(
|
|
372001
|
+
local.write(request2);
|
|
371958
372002
|
remote.pipe(local);
|
|
371959
372003
|
local.pipe(remote);
|
|
371960
372004
|
});
|
|
371961
372005
|
local.on("error", () => remote.destroy());
|
|
371962
|
-
remote.on("close", () => {
|
|
371963
|
-
if (!this.closed)
|
|
371964
|
-
this.fillPool();
|
|
371965
|
-
});
|
|
371966
372006
|
}
|
|
371967
|
-
|
|
371968
|
-
|
|
371969
|
-
|
|
371970
|
-
|
|
371971
|
-
|
|
371972
|
-
|
|
371973
|
-
|
|
371974
|
-
|
|
371975
|
-
}
|
|
372007
|
+
rewriteDevOriginHeaders(headers) {
|
|
372008
|
+
const target = `localhost:${this.localPort}`;
|
|
372009
|
+
const text = headers.toString("latin1");
|
|
372010
|
+
let out = text.replace(/^Host:[^\r\n]*\r\n/im, `Host: ${target}\r
|
|
372011
|
+
`);
|
|
372012
|
+
out = out.replace(/^Origin:[^\r\n]*\r\n/im, `Origin: http://${target}\r
|
|
372013
|
+
`);
|
|
372014
|
+
return Buffer.from(out, "latin1");
|
|
371976
372015
|
}
|
|
371977
372016
|
async reconnect() {
|
|
371978
372017
|
this.emit("close");
|
|
@@ -373675,7 +373714,7 @@ function trackEvent(event, properties) {
|
|
|
373675
373714
|
event,
|
|
373676
373715
|
properties: {
|
|
373677
373716
|
...properties,
|
|
373678
|
-
cli_version: "0.1.
|
|
373717
|
+
cli_version: "0.1.128",
|
|
373679
373718
|
platform: process.platform,
|
|
373680
373719
|
node_version: process.version,
|
|
373681
373720
|
project_id: getProjectId()
|
|
@@ -377781,7 +377820,7 @@ function compareVersions(a, b) {
|
|
|
377781
377820
|
return 0;
|
|
377782
377821
|
}
|
|
377783
377822
|
async function checkForUpdate() {
|
|
377784
|
-
const currentVersion = "0.1.
|
|
377823
|
+
const currentVersion = "0.1.128";
|
|
377785
377824
|
const response = await fetch(`${BINARIES_BASE_URL}/latest?t=${Date.now()}`);
|
|
377786
377825
|
if (!response.ok) {
|
|
377787
377826
|
throw new Error(`Failed to check for updates: HTTP ${response.status}`);
|
|
@@ -378051,7 +378090,7 @@ async function projectListCommand() {
|
|
|
378051
378090
|
var program = new Command();
|
|
378052
378091
|
var env = "production";
|
|
378053
378092
|
var envLabel = env !== "production" ? `[${env.toUpperCase()}] ` : "";
|
|
378054
|
-
program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.
|
|
378093
|
+
program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.128").enablePositionalOptions();
|
|
378055
378094
|
program.command("init").description("Initialize project for use with a coding agent").option("--agent <name...>", "Agents to configure (cursor, claude, codex, other)").addHelpText("after", `
|
|
378056
378095
|
Examples:
|
|
378057
378096
|
$ specific init
|
package/package.json
CHANGED
/package/dist/admin/_next/static/{tWkoycW-NhVqIuvprR9OV → RI2b-FbUxlHXeowkJKNZM}/_buildManifest.js
RENAMED
|
File without changes
|
|
File without changes
|
/package/dist/admin/_next/static/{tWkoycW-NhVqIuvprR9OV → RI2b-FbUxlHXeowkJKNZM}/_ssgManifest.js
RENAMED
|
File without changes
|