aidevops 3.32.271 → 3.32.273

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 CHANGED
@@ -60,7 +60,7 @@ The result: an AI operations platform that manages projects across every busines
60
60
  [![Copyright](https://img.shields.io/badge/Copyright-Marcus%20Quinn%202025--2026-blue.svg)](https://github.com/marcusquinn)
61
61
 
62
62
  <!-- Release & Version Info -->
63
- [![Version](https://img.shields.io/badge/Version-3.32.271-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
63
+ [![Version](https://img.shields.io/badge/Version-3.32.273-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
64
64
  [![npm version](https://img.shields.io/npm/v/aidevops)](https://www.npmjs.com/package/aidevops)
65
65
  [![Homebrew](https://img.shields.io/badge/homebrew-marcusquinn%2Ftap-orange)](https://github.com/marcusquinn/homebrew-tap)
66
66
  [![GitHub repository](https://img.shields.io/badge/github-repository-181717.svg?logo=github)](https://github.com/marcusquinn/aidevops)
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.32.271
1
+ 3.32.273
package/aidevops.sh CHANGED
@@ -5,7 +5,7 @@
5
5
  # AI DevOps Framework CLI
6
6
  # Usage: aidevops <command> [options]
7
7
  #
8
- # Version: 3.32.271
8
+ # Version: 3.32.273
9
9
 
10
10
  set -euo pipefail
11
11
 
package/bun.lock CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "lockfileVersion": 1,
3
- "configVersion": 0,
4
3
  "workspaces": {
5
4
  "": {
6
5
  "name": "aidevops-dspy-integration",
@@ -8,19 +7,19 @@
8
7
  "@vitejs/plugin-react": "5.2.0",
9
8
  "elysia": "1.4.27",
10
9
  "file-type": "21.3.2",
11
- "hono": "4.12.34",
10
+ "hono": "4.13.0",
12
11
  "vite": "8.1.5",
13
12
  },
14
13
  "devDependencies": {
15
14
  "@secretlint/secretlint-rule-preset-recommend": "11.7.1",
16
- "@types/bun": "1.3.3",
15
+ "@types/bun": "1.3.14",
17
16
  "@types/react": "19.2.18",
18
17
  "@types/react-dom": "19.2.3",
19
18
  "ajv": "8.20.0",
20
19
  "react": "19.2.8",
21
- "react-dom": "19.1.0",
20
+ "react-dom": "19.2.8",
22
21
  "secretlint": "11.7.1",
23
- "typescript": "5.9.3",
22
+ "typescript": "7.0.2",
24
23
  },
25
24
  "peerDependencies": {
26
25
  "typescript": "^5.0.0",
@@ -44,8 +43,8 @@
44
43
  "dependencies": {
45
44
  "@aidevops/gui-shared": "workspace:*",
46
45
  "@fontsource/courier-prime": "5.2.8",
47
- "@fontsource/dm-mono": "5.2.7",
48
- "@fontsource/dm-sans": "5.2.8",
46
+ "@fontsource/dm-mono": "5.3.0",
47
+ "@fontsource/dm-sans": "5.3.0",
49
48
  "@fontsource/fredoka": "5.2.10",
50
49
  "@fontsource/ibm-plex-mono": "5.2.7",
51
50
  "@fontsource/ibm-plex-sans": "5.2.8",
@@ -61,7 +60,7 @@
61
60
  "@fontsource/ubuntu-mono": "5.2.8",
62
61
  "@fontsource/zilla-slab": "5.3.0",
63
62
  "react": "19.2.8",
64
- "react-dom": "19.1.0",
63
+ "react-dom": "19.2.8",
65
64
  "react-icons": "5.6.0",
66
65
  },
67
66
  },
@@ -134,9 +133,9 @@
134
133
 
135
134
  "@fontsource/courier-prime": ["@fontsource/courier-prime@5.2.8", "", {}, "sha512-M3xOCcXnGuFi9TcGCrz4hm5yeWg4Sn35MALRLPnqNoHhawTFvhyi2KSI2+5RyFtDNJrb58bPh8LLipgiI9KA0w=="],
136
135
 
137
- "@fontsource/dm-mono": ["@fontsource/dm-mono@5.2.7", "", {}, "sha512-Ma1az2atTVgQWuOWwjuxx26p/6A6CU9HBNKq1CFV6YKpKhpswnf9ry9Ql4+T6bTZzkdtSfS6tjJvqZOljVzIFQ=="],
136
+ "@fontsource/dm-mono": ["@fontsource/dm-mono@5.3.0", "", {}, "sha512-OINjI8C1S/wpchhQxl7njZdMn4+hnDCpQ4YtvvOpKNARo+0J8O1x1IcrChxNjHOhfVv1by8C/FQoy3hXK+C1Ug=="],
138
137
 
139
- "@fontsource/dm-sans": ["@fontsource/dm-sans@5.2.8", "", {}, "sha512-tlovG42m9ESG28WiHpLq3F5umAlm64rv0RkqTbYowRn70e9OlRr5a3yTJhrhrY+k5lftR/OFJjPzOLQzk8EfCA=="],
138
+ "@fontsource/dm-sans": ["@fontsource/dm-sans@5.3.0", "", {}, "sha512-lYJtMXXO28q1z+yz+z8XKd0s4hXaa9QdkETzkyD760sidCv5heI86weYA0sx0Nc4pAMAQTUuyf4gO44cYKKS9g=="],
140
139
 
141
140
  "@fontsource/fredoka": ["@fontsource/fredoka@5.2.10", "", {}, "sha512-DyzPCmTf0PkBbAu+gNvnPzfD/dYIXlyp+Zcb76jEQyt/vmRKGZgkH8FFF9W2sICDaA5p+GLk1XGFjWh5PPX+lg=="],
142
141
 
@@ -266,7 +265,7 @@
266
265
 
267
266
  "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="],
268
267
 
269
- "@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="],
268
+ "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
270
269
 
271
270
  "@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="],
272
271
 
@@ -276,6 +275,46 @@
276
275
 
277
276
  "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="],
278
277
 
278
+ "@typescript/typescript-aix-ppc64": ["@typescript/typescript-aix-ppc64@7.0.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ=="],
279
+
280
+ "@typescript/typescript-darwin-arm64": ["@typescript/typescript-darwin-arm64@7.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA=="],
281
+
282
+ "@typescript/typescript-darwin-x64": ["@typescript/typescript-darwin-x64@7.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA=="],
283
+
284
+ "@typescript/typescript-freebsd-arm64": ["@typescript/typescript-freebsd-arm64@7.0.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ=="],
285
+
286
+ "@typescript/typescript-freebsd-x64": ["@typescript/typescript-freebsd-x64@7.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw=="],
287
+
288
+ "@typescript/typescript-linux-arm": ["@typescript/typescript-linux-arm@7.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ=="],
289
+
290
+ "@typescript/typescript-linux-arm64": ["@typescript/typescript-linux-arm64@7.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ=="],
291
+
292
+ "@typescript/typescript-linux-loong64": ["@typescript/typescript-linux-loong64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ=="],
293
+
294
+ "@typescript/typescript-linux-mips64el": ["@typescript/typescript-linux-mips64el@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA=="],
295
+
296
+ "@typescript/typescript-linux-ppc64": ["@typescript/typescript-linux-ppc64@7.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA=="],
297
+
298
+ "@typescript/typescript-linux-riscv64": ["@typescript/typescript-linux-riscv64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ=="],
299
+
300
+ "@typescript/typescript-linux-s390x": ["@typescript/typescript-linux-s390x@7.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw=="],
301
+
302
+ "@typescript/typescript-linux-x64": ["@typescript/typescript-linux-x64@7.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A=="],
303
+
304
+ "@typescript/typescript-netbsd-arm64": ["@typescript/typescript-netbsd-arm64@7.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA=="],
305
+
306
+ "@typescript/typescript-netbsd-x64": ["@typescript/typescript-netbsd-x64@7.0.2", "", { "os": "none", "cpu": "x64" }, "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA=="],
307
+
308
+ "@typescript/typescript-openbsd-arm64": ["@typescript/typescript-openbsd-arm64@7.0.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ=="],
309
+
310
+ "@typescript/typescript-openbsd-x64": ["@typescript/typescript-openbsd-x64@7.0.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg=="],
311
+
312
+ "@typescript/typescript-sunos-x64": ["@typescript/typescript-sunos-x64@7.0.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g=="],
313
+
314
+ "@typescript/typescript-win32-arm64": ["@typescript/typescript-win32-arm64@7.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ=="],
315
+
316
+ "@typescript/typescript-win32-x64": ["@typescript/typescript-win32-x64@7.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g=="],
317
+
279
318
  "@vitejs/plugin-react": ["@vitejs/plugin-react@5.2.0", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw=="],
280
319
 
281
320
  "ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="],
@@ -300,7 +339,7 @@
300
339
 
301
340
  "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="],
302
341
 
303
- "bun-types": ["bun-types@1.3.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ=="],
342
+ "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
304
343
 
305
344
  "caniuse-lite": ["caniuse-lite@1.0.30001799", "", {}, "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw=="],
306
345
 
@@ -360,7 +399,7 @@
360
399
 
361
400
  "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
362
401
 
363
- "hono": ["hono@4.12.34", "", {}, "sha512-GqXJqY/xJkJmuloTrnV1ZEXG3fqte+VjkUqoRNZXcrUidiUOP4fMSIHHY4tsqZBK++kVyWmt/AAfSUuy57/eSA=="],
402
+ "hono": ["hono@4.13.0", "", {}, "sha512-jhunvfHWxd7J5EFfSgH4xsYJzSe/lfqbUCxiyyeaQasUsXeEHXtzVid+7EOGByc5JnFa23SSFL3Y2RV/z1T+eQ=="],
364
403
 
365
404
  "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="],
366
405
 
@@ -456,7 +495,7 @@
456
495
 
457
496
  "react": ["react@19.2.8", "", {}, "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw=="],
458
497
 
459
- "react-dom": ["react-dom@19.1.0", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.0" } }, "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g=="],
498
+ "react-dom": ["react-dom@19.2.8", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.8" } }, "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ=="],
460
499
 
461
500
  "react-icons": ["react-icons@5.6.0", "", { "peerDependencies": { "react": "*" } }, "sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA=="],
462
501
 
@@ -472,7 +511,7 @@
472
511
 
473
512
  "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
474
513
 
475
- "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="],
514
+ "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
476
515
 
477
516
  "secretlint": ["secretlint@11.7.1", "", { "dependencies": { "@secretlint/config-creator": "11.7.1", "@secretlint/formatter": "11.7.1", "@secretlint/node": "11.7.1", "@secretlint/profiler": "11.7.1", "@secretlint/resolver": "11.7.1", "debug": "^4.4.3", "globby": "^14.1.0", "read-pkg": "^9.0.1" }, "bin": { "secretlint": "bin/secretlint.js" } }, "sha512-igo+3xtwOisz3Ge0V1t6SzCnOLXSHjRIODZpqppUmfkb0EE0EbsEMdoUuunaacxffq3NTYSzpZcjbfrPYuO+qA=="],
478
517
 
@@ -522,7 +561,7 @@
522
561
 
523
562
  "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
524
563
 
525
- "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
564
+ "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="],
526
565
 
527
566
  "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="],
528
567
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidevops",
3
- "version": "3.32.271",
3
+ "version": "3.32.273",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.11",
@@ -17,7 +17,7 @@
17
17
  "dev": "bun run .opencode/server/api-gateway.ts",
18
18
  "dashboard": "bun run .opencode/server/mcp-dashboard.ts",
19
19
  "server:test": "bun test ./.opencode/server/security.test.ts",
20
- "server:typecheck": "tsc --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler --types bun .opencode/server/api-gateway.ts .opencode/server/mcp-dashboard.ts .opencode/server/index.ts .opencode/server/security.ts .opencode/server/security.test.ts",
20
+ "server:typecheck": "tsc --ignoreConfig --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler --types bun .opencode/server/api-gateway.ts .opencode/server/mcp-dashboard.ts .opencode/server/index.ts .opencode/server/security.ts .opencode/server/security.test.ts",
21
21
  "server:check": "bun run server:typecheck && bun run server:test",
22
22
  "quality": "bun run .opencode/tool/parallel-quality.ts",
23
23
  "dspy:init": "dspyground init",
@@ -63,19 +63,19 @@
63
63
  "@vitejs/plugin-react": "5.2.0",
64
64
  "elysia": "1.4.27",
65
65
  "file-type": "21.3.2",
66
- "hono": "4.12.34",
66
+ "hono": "4.13.0",
67
67
  "vite": "8.1.5"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@secretlint/secretlint-rule-preset-recommend": "11.7.1",
71
- "@types/bun": "1.3.3",
71
+ "@types/bun": "1.3.14",
72
72
  "@types/react": "19.2.18",
73
73
  "@types/react-dom": "19.2.3",
74
74
  "ajv": "8.20.0",
75
75
  "react": "19.2.8",
76
- "react-dom": "19.1.0",
76
+ "react-dom": "19.2.8",
77
77
  "secretlint": "11.7.1",
78
- "typescript": "5.9.3"
78
+ "typescript": "7.0.2"
79
79
  },
80
80
  "overrides": {
81
81
  "esbuild": "0.28.1",
@@ -68,12 +68,12 @@ export function createGuiApiApp() {
68
68
 
69
69
  app.post(APP_ACTION_ROUTE_MANIFEST.route, handleAppAction);
70
70
  app.get(APP_ACTION_STATUS_ROUTE_MANIFEST.route, handleAppActionStatus);
71
- app.post(PULSE_WORKERS_ACTION_ROUTE_MANIFEST.route, handlePulseWorkerAction);
72
- app.get(PULSE_WORKERS_ACTION_STATUS_ROUTE_MANIFEST.route, handlePulseWorkerActionStatus);
71
+ app.post(PULSE_WORKERS_ACTION_ROUTE_MANIFEST.route, handlePulseWorkerAction);
72
+ app.get(PULSE_WORKERS_ACTION_STATUS_ROUTE_MANIFEST.route, handlePulseWorkerActionStatus);
73
73
 
74
- app.get(FILE_EXPLORER_ROUTE_MANIFEST.route, (context) => context.json(
75
- ...fileExplorerResult(context.req.param("root"), context.req.query("path") ?? ""),
76
- ));
74
+ app.get(FILE_EXPLORER_ROUTE_MANIFEST.route, (context) => context.json(
75
+ ...fileExplorerResult(context.req.param("root") ?? "", context.req.query("path") ?? ""),
76
+ ));
77
77
 
78
78
  for (const route of BANNED_ROUTE_PATTERNS) {
79
79
  app.post(route, (context) => context.json(
@@ -99,9 +99,18 @@ export function createGuiApiApp() {
99
99
  }
100
100
 
101
101
  function handleAppAction(context: Context) {
102
- const appId = context.req.param("appId");
103
- const action = context.req.param("action") as GuiAppActionId;
104
- const command = appActionCommands[appId]?.[action];
102
+ const appId = context.req.param("appId");
103
+ const actionParam = context.req.param("action");
104
+ if (appId === undefined || actionParam === undefined) {
105
+ return context.json(createEnvelope({
106
+ operation_id: APP_ACTION_ROUTE_MANIFEST.operation_id,
107
+ source: { surface: "apps", authority: "allowlisted local command runner", path_refs: [] },
108
+ data: rejectedJob(appId ?? "unknown", "install", "Missing app action parameters."),
109
+ errors: ["action_not_allowlisted"],
110
+ }), 400);
111
+ }
112
+ const action = actionParam as GuiAppActionId;
113
+ const command = appActionCommands[appId]?.[action];
105
114
  if (command === undefined) {
106
115
  return context.json(createEnvelope({
107
116
  operation_id: APP_ACTION_ROUTE_MANIFEST.operation_id,
@@ -120,7 +129,7 @@ function handleAppAction(context: Context) {
120
129
  }
121
130
 
122
131
  function handleAppActionStatus(context: Context) {
123
- const job = appActionJobs.get(context.req.param("jobId"));
132
+ const job = appActionJobs.get(context.req.param("jobId") ?? "");
124
133
  if (job === undefined) {
125
134
  return context.json(createEnvelope({
126
135
  operation_id: APP_ACTION_STATUS_ROUTE_MANIFEST.operation_id,
@@ -137,16 +146,17 @@ function handleAppActionStatus(context: Context) {
137
146
  }
138
147
 
139
148
  function handlePulseWorkerAction(context: Context) {
140
- const action = context.req.param("action") as GuiPulseWorkerActionId;
141
- if (!Object.hasOwn(pulseWorkerActionCommands, action)) {
142
- return context.json(createEnvelope({
143
- operation_id: PULSE_WORKERS_ACTION_ROUTE_MANIFEST.operation_id,
144
- source: { surface: "pulse_workers", authority: "allowlisted local command runner", path_refs: [] },
145
- data: rejectedPulseWorkerJob(action, "No allowlisted command for this Pulse & Workers action."),
146
- errors: ["action_not_allowlisted"],
147
- }), 400);
148
- }
149
- const actionCommand = pulseWorkerActionCommands[action];
149
+ const actionParam = context.req.param("action");
150
+ if (actionParam === undefined || !Object.hasOwn(pulseWorkerActionCommands, actionParam)) {
151
+ return context.json(createEnvelope({
152
+ operation_id: PULSE_WORKERS_ACTION_ROUTE_MANIFEST.operation_id,
153
+ source: { surface: "pulse_workers", authority: "allowlisted local command runner", path_refs: [] },
154
+ data: rejectedPulseWorkerJob("diagnose", "No allowlisted command for this Pulse & Workers action."),
155
+ errors: ["action_not_allowlisted"],
156
+ }), 400);
157
+ }
158
+ const action = actionParam as GuiPulseWorkerActionId;
159
+ const actionCommand = pulseWorkerActionCommands[action];
150
160
  const job = startPulseWorkerActionJob(action, actionCommand.command, actionCommand.target_ref, actionCommand.audit_ref);
151
161
  return context.json(createEnvelope({
152
162
  operation_id: PULSE_WORKERS_ACTION_ROUTE_MANIFEST.operation_id,
@@ -157,7 +167,7 @@ function handlePulseWorkerAction(context: Context) {
157
167
  }
158
168
 
159
169
  function handlePulseWorkerActionStatus(context: Context) {
160
- const job = pulseWorkerActionJobs.get(context.req.param("jobId"));
170
+ const job = pulseWorkerActionJobs.get(context.req.param("jobId") ?? "");
161
171
  if (job === undefined) {
162
172
  return context.json(createEnvelope({
163
173
  operation_id: PULSE_WORKERS_ACTION_STATUS_ROUTE_MANIFEST.operation_id,
@@ -58,10 +58,11 @@ function isTrustedHelper(path: string): boolean {
58
58
  }
59
59
 
60
60
  function isInventory(value: unknown): value is SecretInventory {
61
- if (!isRecord(value) || value.version !== 1 || !Array.isArray(value.secrets) || value.secrets.length > 512) return false;
62
- if (!isRecord(value.backends) || Object.keys(value).length !== 3 || Object.keys(value.backends).length !== 2) return false;
63
- if (!BACKEND_STATES.has(value.backends.gopass) || !BACKEND_STATES.has(value.backends.credentials)) return false;
64
- return value.secrets.every((secret, index) => isSecretReference(secret, index === 0 ? "" : value.secrets[index - 1]?.name));
61
+ if (!isRecord(value) || value.version !== 1 || !Array.isArray(value.secrets) || value.secrets.length > 512) return false;
62
+ if (!isRecord(value.backends) || Object.keys(value).length !== 3 || Object.keys(value.backends).length !== 2) return false;
63
+ if (!BACKEND_STATES.has(value.backends.gopass) || !BACKEND_STATES.has(value.backends.credentials)) return false;
64
+ const secrets = value.secrets;
65
+ return secrets.every((secret, index) => isSecretReference(secret, index === 0 ? "" : secrets[index - 1]?.name));
65
66
  }
66
67
 
67
68
  function isSecretReference(value: unknown, previousName: string | undefined): value is GuiSecretReference {
@@ -97,7 +97,7 @@ function buildGuiStateNotifications(input: BuildNotificationInput): GuiNotificat
97
97
  const appNeedsUpdate = (input.aiApps ?? []).filter((app) => app.needs_update);
98
98
  const authErrors = (input.oauthPool?.providers ?? []).filter((provider) => provider.auth_errors > 0);
99
99
  const rateLimited = (input.oauthPool?.providers ?? []).filter((provider) => provider.rate_limited > 0);
100
- const oauthPoolSourceRef = input.oauthPool?.path_ref ?? "oauth_pool";
100
+ const oauthPoolSourceRef = input.oauthPool?.path_ref || "oauth_pool";
101
101
  const notifications: GuiNotificationSummary[] = [];
102
102
 
103
103
  if (input.restartRequired) {
@@ -6,8 +6,8 @@
6
6
  "dependencies": {
7
7
  "@aidevops/gui-shared": "workspace:*",
8
8
  "@fontsource/courier-prime": "5.2.8",
9
- "@fontsource/dm-mono": "5.2.7",
10
- "@fontsource/dm-sans": "5.2.8",
9
+ "@fontsource/dm-mono": "5.3.0",
10
+ "@fontsource/dm-sans": "5.3.0",
11
11
  "@fontsource/fredoka": "5.2.10",
12
12
  "@fontsource/ibm-plex-mono": "5.2.7",
13
13
  "@fontsource/ibm-plex-sans": "5.2.8",
@@ -23,7 +23,7 @@
23
23
  "@fontsource/ubuntu-mono": "5.2.8",
24
24
  "@fontsource/zilla-slab": "5.3.0",
25
25
  "react": "19.2.8",
26
- "react-dom": "19.1.0",
26
+ "react-dom": "19.2.8",
27
27
  "react-icons": "5.6.0"
28
28
  },
29
29
  "scripts": {
@@ -42,14 +42,16 @@ export function ScreenshotCaptureNotificationHost(): ReactElement | null {
42
42
  const nextNotificationId = useRef(0);
43
43
  const [screenshotNotifications, setScreenshotNotifications] = useState<ScreenshotCapturedNotification[]>([]);
44
44
 
45
- useEffect(() => {
46
- const showScreenshotNotification = (event: Event) => {
47
- const detail = (event as CustomEvent<Partial<ScreenshotCapturedDetail>>).detail;
48
- if (detail !== undefined && typeof detail.path === "string" && typeof detail.url === "string") {
49
- nextNotificationId.current += 1;
50
- setScreenshotNotifications((current) => [...current, { id: nextNotificationId.current, path: detail.path, url: detail.url }]);
51
- }
52
- };
45
+ useEffect(() => {
46
+ const showScreenshotNotification = (event: Event) => {
47
+ const detail = (event as CustomEvent<Partial<ScreenshotCapturedDetail>>).detail;
48
+ const path = detail?.path;
49
+ const url = detail?.url;
50
+ if (typeof path === "string" && typeof url === "string") {
51
+ nextNotificationId.current += 1;
52
+ setScreenshotNotifications((current) => [...current, { id: nextNotificationId.current, path, url }]);
53
+ }
54
+ };
53
55
 
54
56
  window.addEventListener("aidevops:screenshot-captured", showScreenshotNotification);
55
57
  return () => window.removeEventListener("aidevops:screenshot-captured", showScreenshotNotification);
@@ -0,0 +1,2 @@
1
+ declare module "*.css";
2
+ declare module "@fontsource/*";
package/setup.sh CHANGED
@@ -17,7 +17,7 @@ fi
17
17
  # AI Assistant Server Access Framework Setup Script
18
18
  # Helps developers set up the framework for their infrastructure
19
19
  #
20
- # Version: 3.32.271
20
+ # Version: 3.32.273
21
21
  #
22
22
  # Quick Install:
23
23
  # npm install -g aidevops && aidevops update (recommended)