foldrun 2.8.0 → 2.8.1

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.
Files changed (2) hide show
  1. package/package.json +3 -3
  2. package/src/commands.mjs +10 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foldrun",
3
- "version": "2.8.0",
3
+ "version": "2.8.1",
4
4
  "description": "Agents are just folders. Write them, check them, run them — on your machine.",
5
5
  "license": "FSL-1.1-ALv2",
6
6
  "type": "module",
@@ -11,7 +11,7 @@
11
11
  "node": ">=22"
12
12
  },
13
13
  "dependencies": {
14
- "@foldrun/core": "^2.12.0"
14
+ "@foldrun/core": "^2.12.1"
15
15
  },
16
16
  "files": [
17
17
  "bin",
@@ -47,7 +47,7 @@
47
47
  "devDependencies": {
48
48
  "@types/node": "^26.6.4",
49
49
  "gray-matter": "^4.0.3",
50
- "typescript": "^6.0.3"
50
+ "typescript": "^7.0.2"
51
51
  },
52
52
  "overrides": {
53
53
  "zod": "4.6.7"
package/src/commands.mjs CHANGED
@@ -883,6 +883,7 @@ async function scanCore() {
883
883
  }
884
884
 
885
885
  // The scanner module, once scanCore has loaded it — categoryOf and SARIF read it.
886
+ /** @type {any} */
886
887
  let scanRules = null;
887
888
 
888
889
  const SECURITY_CATEGORIES = new Set(["secret", "security", "content", "supply-chain"]);
@@ -1027,6 +1028,7 @@ function narrowCheck(findings, root, opts, label, accountRoot = root) {
1027
1028
  }
1028
1029
  let baselined = 0;
1029
1030
  if (opts.baseline && fs.existsSync(file)) {
1031
+ /** @type {any} */
1030
1032
  let b = null;
1031
1033
  try {
1032
1034
  b = JSON.parse(fs.readFileSync(file, "utf8"));
@@ -1540,6 +1542,7 @@ async function checkHooks(workspace, agents, libraryRoot, platform, note) {
1540
1542
  missing("account AGENTS.md", accountNames);
1541
1543
  missing("AGENTS.md", workspaceNames);
1542
1544
 
1545
+ /** @type {any} */
1543
1546
  let resolveSearch = null;
1544
1547
  try {
1545
1548
  ({ resolveSearch } = /** @type {any} */ (await import("@foldrun/core/providers")));
@@ -1812,6 +1815,7 @@ async function probeCmd(modelArg) {
1812
1815
  // provider gets the same translator a run would, on loopback, for the
1813
1816
  // length of the probe — so what passes here passes there.
1814
1817
  let env = { ...process.env };
1818
+ /** @type {any} */
1815
1819
  let translator = null;
1816
1820
  // No AGENTS.md, or no provider block, means Anthropic direct — like a run.
1817
1821
  // Anything else that goes wrong here is said, not swallowed: a provider
@@ -2446,6 +2450,7 @@ async function versionCmd(flags) {
2446
2450
  const url = remoteUrl(flags);
2447
2451
  /** @type {Record<string, any> | null} */
2448
2452
  let platform = null;
2453
+ /** @type {string | null} */
2449
2454
  let unreachable = null;
2450
2455
  if (url) {
2451
2456
  try {
@@ -3671,6 +3676,7 @@ async function connect(positional, flags) {
3671
3676
  // secret, nothing typed. The redirect is the platform's own callback, which
3672
3677
  // rewrites the same secret at the same scope; we wait for it to land.
3673
3678
  if (url && !flags["client-id"] && !env("OAUTH_CLIENT_ID") && flags["new-client"] !== true) {
3679
+ /** @type {any} */
3674
3680
  let started = null;
3675
3681
  try {
3676
3682
  started = await remoteCall(url, flags, "/api/oauth/reconnect", {
@@ -4492,6 +4498,7 @@ async function deployAccount(layout, flags, only) {
4492
4498
 
4493
4499
  /** "<profile> (<email or key label>)" — who a deploy is about to act as,
4494
4500
  * asked of the platform once per command. */
4501
+ /** @type {string | null} */
4495
4502
  let identityCache = null;
4496
4503
  async function deployIdentity(url, flags) {
4497
4504
  if (identityCache) return identityCache;
@@ -4889,6 +4896,7 @@ async function pullCmd(layout, flags, only) {
4889
4896
 
4890
4897
  let written = 0;
4891
4898
  for (const f of incoming) {
4899
+ /** @type {string | null} */
4892
4900
  let before = null;
4893
4901
  try {
4894
4902
  before = fs.readFileSync(f.file, "utf8");
@@ -4968,6 +4976,7 @@ async function workspacesCmd(positional, flags, layout) {
4968
4976
 
4969
4977
  const here = layout.workspaces;
4970
4978
  let there = [];
4979
+ /** @type {string | null} */
4971
4980
  let reach = null;
4972
4981
  if (url) {
4973
4982
  try {
@@ -8064,6 +8073,7 @@ function writeIfUnchanged(desk, rel, before, next) {
8064
8073
 
8065
8074
  /** Throw, as writeIfUnchanged does, when a desk file no longer reads `before`. */
8066
8075
  function assertUnchanged(desk, rel, before) {
8076
+ /** @type {string | null} */
8067
8077
  let now = null;
8068
8078
  try {
8069
8079
  now = fs.readFileSync(path.join(desk.dir, rel), "utf8");