@paradigma-inc/flywheel 0.1.107 → 0.1.111
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/README.md +13 -7
- package/package.json +1 -1
- package/skills/flywheel/setting-up-flywheel/how-can-i-get-an-authorized-client_id-for-the-oauth-flow.md +22 -39
- package/skills/flywheel-llm-proof-paper/scripts/__pycache__/check_paper.cpython-312.pyc +0 -0
- package/src/mcp-writer.mjs +7 -19
- package/src/runtime/runtime-config.mjs +3 -3
- package/src/runtime/vendor/flywheel-cli-dist/auth/keychain.js +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/auth/keychain.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/auth/login.js +2 -2
- package/src/runtime/vendor/flywheel-cli-dist/auth/login.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/utils.js +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/utils.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.d.ts +2 -2
- package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.js +7 -1
- package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/http/poll.js +1 -2
- package/src/runtime/vendor/flywheel-cli-dist/http/poll.js.map +1 -1
- package/src/runtime/vendor/manifest.json +1 -1
- package/src/secure-write.mjs +43 -0
- package/src/setup/io/patchers/json.mjs +5 -0
- package/src/setup/io/patchers/yaml.mjs +5 -0
- package/src/update/cache.mjs +17 -2
- package/skills/flywheel-llm-proof-paper/scripts/__pycache__/check_paper.cpython-311.pyc +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generatedProductTelemetryContract.js","sourceRoot":"","sources":["../src/generatedProductTelemetryContract.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generatedProductTelemetryContract.js","sourceRoot":"","sources":["../src/generatedProductTelemetryContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,11 +32,10 @@ export async function pollUntilTerminal(fetchOnce, isTerminal, options = {}) {
|
|
|
32
32
|
const describe = options.describeState ?? defaultDescribeState;
|
|
33
33
|
const start = now();
|
|
34
34
|
let iteration = 0;
|
|
35
|
-
let lastState = 'unknown';
|
|
36
35
|
while (true) {
|
|
37
36
|
const result = await fetchOnce();
|
|
38
37
|
iteration += 1;
|
|
39
|
-
lastState = describe(result);
|
|
38
|
+
const lastState = describe(result);
|
|
40
39
|
const elapsedS = Math.round((now() - start) / 1000);
|
|
41
40
|
options.onProgress?.({ state: lastState, elapsed_s: elapsedS });
|
|
42
41
|
if (isTerminal(result)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/http/poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAqBnD,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe;IAC3C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,KAAK,GAAI,MAAyE,CAAC;QACzF,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC;QACxD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC;QAC1D,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,aAAa,CAAC;IAC1E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAA2B,EAC3B,UAAkC,EAClC,UAA0B,EAAE;IAE5B,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,IAAI,oBAAoB,CAAC;IAE/D,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;IACpB,IAAI,SAAS,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/http/poll.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { chmod, mkdir, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
const FS = { chmod, mkdir, stat, writeFile };
|
|
5
|
+
|
|
6
|
+
export async function secureFileMode(
|
|
7
|
+
filePath,
|
|
8
|
+
fs = FS,
|
|
9
|
+
platform = process.platform,
|
|
10
|
+
) {
|
|
11
|
+
const targetStat = await fs.stat(filePath);
|
|
12
|
+
if (!targetStat.isFile()) {
|
|
13
|
+
throw new Error(`Credential path is not a regular file: ${filePath}`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
await fs.chmod(filePath, 0o600);
|
|
17
|
+
|
|
18
|
+
// ponytail: Windows relies on the user profile ACL; add real ACL handling if Windows credential exposure is reported.
|
|
19
|
+
if (platform === "win32") return;
|
|
20
|
+
|
|
21
|
+
const fileStat = await fs.stat(filePath);
|
|
22
|
+
if ((fileStat.mode & 0o077) !== 0) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
`Credential file remains readable by group or others: ${filePath}`,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export async function writeSecureFile(
|
|
30
|
+
filePath,
|
|
31
|
+
contents,
|
|
32
|
+
fs = FS,
|
|
33
|
+
platform = process.platform,
|
|
34
|
+
) {
|
|
35
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
36
|
+
try {
|
|
37
|
+
await secureFileMode(filePath, fs, platform);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
if (error?.code !== "ENOENT") throw error;
|
|
40
|
+
}
|
|
41
|
+
await fs.writeFile(filePath, contents, { encoding: "utf8", mode: 0o600 });
|
|
42
|
+
await secureFileMode(filePath, fs, platform);
|
|
43
|
+
}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
readJsonConfig,
|
|
4
4
|
writeJsonConfig,
|
|
5
5
|
} from "../../../mcp-writer.mjs";
|
|
6
|
+
import { secureFileMode } from "../../../secure-write.mjs";
|
|
6
7
|
|
|
7
8
|
export async function patchJsonServer({
|
|
8
9
|
filePath,
|
|
@@ -23,6 +24,10 @@ export async function patchJsonServer({
|
|
|
23
24
|
{ enforceAuthMode },
|
|
24
25
|
);
|
|
25
26
|
|
|
27
|
+
if (alreadyExists) {
|
|
28
|
+
await secureFileMode(filePath);
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
if (!alreadyExists && config !== existing) {
|
|
27
32
|
await writeJsonConfigFn(filePath, config);
|
|
28
33
|
}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
readYamlConfig,
|
|
4
4
|
writeYamlConfig,
|
|
5
5
|
} from "../../../mcp-writer.mjs";
|
|
6
|
+
import { secureFileMode } from "../../../secure-write.mjs";
|
|
6
7
|
|
|
7
8
|
export async function patchYamlServer({
|
|
8
9
|
filePath,
|
|
@@ -23,6 +24,10 @@ export async function patchYamlServer({
|
|
|
23
24
|
{ enforceAuthMode },
|
|
24
25
|
);
|
|
25
26
|
|
|
27
|
+
if (alreadyExists) {
|
|
28
|
+
await secureFileMode(filePath);
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
if (!alreadyExists && config !== existing) {
|
|
27
32
|
await writeYamlConfigFn(filePath, config);
|
|
28
33
|
}
|
package/src/update/cache.mjs
CHANGED
|
@@ -10,12 +10,24 @@ export const UPDATE_CHECK_CACHE_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
|
10
10
|
export function resolveUpdateCheckCachePath({
|
|
11
11
|
env = process.env,
|
|
12
12
|
homeDir = os.homedir(),
|
|
13
|
+
platform = process.platform,
|
|
13
14
|
} = {}) {
|
|
14
15
|
const override = String(env.FLYWHEEL_UPDATE_CHECK_CACHE_PATH || "").trim();
|
|
15
16
|
if (override) {
|
|
16
17
|
return override;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
+
let cacheRoot;
|
|
20
|
+
if (platform === "darwin") {
|
|
21
|
+
cacheRoot = path.join(homeDir, "Library", "Caches");
|
|
22
|
+
} else if (platform === "win32") {
|
|
23
|
+
cacheRoot =
|
|
24
|
+
String(env.LOCALAPPDATA || "").trim() ||
|
|
25
|
+
path.join(homeDir, "AppData", "Local");
|
|
26
|
+
} else {
|
|
27
|
+
cacheRoot =
|
|
28
|
+
String(env.XDG_CACHE_HOME || "").trim() || path.join(homeDir, ".cache");
|
|
29
|
+
}
|
|
30
|
+
return path.join(cacheRoot, "flywheel", "update-check.json");
|
|
19
31
|
}
|
|
20
32
|
|
|
21
33
|
function parseCache(raw) {
|
|
@@ -26,7 +38,10 @@ function parseCache(raw) {
|
|
|
26
38
|
if (parsed.packageName !== FLYWHEEL_PACKAGE_NAME) {
|
|
27
39
|
return null;
|
|
28
40
|
}
|
|
29
|
-
if (
|
|
41
|
+
if (
|
|
42
|
+
typeof parsed.latestVersion !== "string" ||
|
|
43
|
+
!parsed.latestVersion.trim()
|
|
44
|
+
) {
|
|
30
45
|
return null;
|
|
31
46
|
}
|
|
32
47
|
if (typeof parsed.nextCheckAt !== "string" || !parsed.nextCheckAt.trim()) {
|