@socketsecurity/lib 6.0.2 → 6.0.4
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/CHANGELOG.md +34 -0
- package/dist/_virtual/_rolldown/runtime.js +45 -0
- package/dist/abort/signal.js +53 -59
- package/dist/ai/discover.js +110 -110
- package/dist/ai/profiles.d.mts +48 -25
- package/dist/ai/profiles.js +95 -59
- package/dist/ai/spawn.d.mts +2 -2
- package/dist/ai/spawn.js +172 -194
- package/dist/ai/types.d.mts +3 -3
- package/dist/ai/types.js +1 -17
- package/dist/ai/worktree.d.mts +2 -2
- package/dist/ai/worktree.js +160 -183
- package/dist/ansi/constants.js +16 -38
- package/dist/ansi/strip.js +44 -41
- package/dist/archives/_internal.js +64 -73
- package/dist/archives/detect.js +30 -43
- package/dist/archives/extract.js +43 -50
- package/dist/archives/tar.js +197 -228
- package/dist/archives/types.js +1 -17
- package/dist/archives/zip.js +85 -121
- package/dist/argv/flag-predicates.js +203 -101
- package/dist/argv/flag-types.js +96 -113
- package/dist/argv/parse-args-string.d.ts +16 -14
- package/dist/argv/parse-args-string.js +42 -39
- package/dist/argv/parse.js +145 -163
- package/dist/arrays/_internal.js +65 -48
- package/dist/arrays/chunk.js +51 -40
- package/dist/arrays/join.js +87 -35
- package/dist/arrays/predicates.js +46 -28
- package/dist/arrays/unique.js +45 -31
- package/dist/bin/_internal.js +34 -42
- package/dist/bin/check-primordials.js +175 -233
- package/dist/bin/check.js +51 -72
- package/dist/bin/exec.js +70 -74
- package/dist/bin/find.js +151 -134
- package/dist/bin/resolve.js +180 -246
- package/dist/bin/shadow.js +24 -33
- package/dist/bin/socket-lib.js +51 -73
- package/dist/bin/types.js +1 -17
- package/dist/bin/which.js +211 -146
- package/dist/cacache/_internal.js +25 -40
- package/dist/cacache/clear.js +79 -72
- package/dist/cacache/read.js +48 -46
- package/dist/cacache/tmp.js +29 -36
- package/dist/cacache/types.js +1 -17
- package/dist/cacache/write.js +43 -48
- package/dist/cache/ttl/store.js +232 -288
- package/dist/cache/ttl/types.js +1 -17
- package/dist/checks/primordials-defaults.js +83 -89
- package/dist/checks/primordials.js +225 -277
- package/dist/colors/convert.js +45 -37
- package/dist/colors/palette.js +88 -45
- package/dist/colors/socket-palette.js +74 -84
- package/dist/colors/types.js +1 -17
- package/dist/compression/_internal.js +57 -72
- package/dist/compression/brotli.js +94 -127
- package/dist/compression/gzip.js +95 -121
- package/dist/compression/types.js +1 -17
- package/dist/constants/agents.js +61 -113
- package/dist/constants/encoding.js +19 -42
- package/dist/constants/github.js +12 -30
- package/dist/constants/licenses.js +48 -63
- package/dist/constants/lifecycle-script-names.js +31 -45
- package/dist/constants/maintained-node-versions.js +22 -37
- package/dist/constants/node.js +226 -167
- package/dist/constants/package-default-node-range.js +16 -41
- package/dist/constants/package-default-socket-categories.js +12 -30
- package/dist/constants/packages.js +77 -126
- package/dist/constants/platform.js +27 -49
- package/dist/constants/sentinels.js +23 -48
- package/dist/constants/socket.js +42 -87
- package/dist/constants/testing.js +15 -34
- package/dist/constants/time.js +16 -36
- package/dist/constants/typescript.js +32 -52
- package/dist/cover/code.js +111 -142
- package/dist/cover/formatters.js +118 -101
- package/dist/cover/type.js +50 -76
- package/dist/cover/types.js +1 -17
- package/dist/crypto/hash.js +54 -46
- package/dist/debug/_internal.js +62 -71
- package/dist/debug/caller-info.js +53 -64
- package/dist/debug/namespace.js +80 -90
- package/dist/debug/output.js +172 -188
- package/dist/debug/types.js +1 -17
- package/dist/dlx/_internal.js +24 -43
- package/dist/dlx/arborist.js +162 -160
- package/dist/dlx/binary-cache.js +228 -200
- package/dist/dlx/binary-download.js +172 -211
- package/dist/dlx/binary-resolution.js +165 -157
- package/dist/dlx/binary-types.js +1 -17
- package/dist/dlx/binary.js +149 -189
- package/dist/dlx/cache.js +45 -30
- package/dist/dlx/detect.js +245 -167
- package/dist/dlx/dir.js +67 -51
- package/dist/dlx/firewall.js +62 -100
- package/dist/dlx/lockfile.js +122 -127
- package/dist/dlx/manifest.js +264 -274
- package/dist/dlx/package.js +241 -244
- package/dist/dlx/packages.js +99 -96
- package/dist/dlx/paths.js +73 -59
- package/dist/dlx/spec.js +52 -60
- package/dist/dlx/types.js +1 -17
- package/dist/eco/cargo/lockfile-format.js +19 -36
- package/dist/eco/cargo/manifest-format.js +17 -35
- package/dist/eco/cargo/parse-lockfile.js +210 -237
- package/dist/eco/manifest/analyze-lockfile.js +46 -63
- package/dist/eco/manifest/detect-format.js +66 -90
- package/dist/eco/manifest/find-packages.js +39 -64
- package/dist/eco/manifest/get-package-versions.js +27 -48
- package/dist/eco/manifest/get-package.js +21 -40
- package/dist/eco/manifest/manifest-error.js +14 -35
- package/dist/eco/manifest/parse-lockfile.js +40 -86
- package/dist/eco/manifest/parse-manifest.js +26 -43
- package/dist/eco/manifest/parse.js +26 -47
- package/dist/eco/manifest/types.js +1 -17
- package/dist/eco/npm/bun/exec.js +23 -32
- package/dist/eco/npm/manifest-format.js +21 -35
- package/dist/eco/npm/npm/exec.js +51 -61
- package/dist/eco/npm/npm/extract-package-name-from-path.js +28 -50
- package/dist/eco/npm/npm/flags.js +80 -52
- package/dist/eco/npm/npm/lockfile-format.js +21 -40
- package/dist/eco/npm/npm/parse-git-url.js +26 -40
- package/dist/eco/npm/npm/parse-lockfile.js +184 -210
- package/dist/eco/npm/parse-package-json.js +71 -102
- package/dist/eco/npm/pnpm/detect-pnpm-version.js +22 -43
- package/dist/eco/npm/pnpm/exec.js +51 -62
- package/dist/eco/npm/pnpm/flags.js +75 -68
- package/dist/eco/npm/pnpm/lockfile-format.js +19 -36
- package/dist/eco/npm/pnpm/parse-lockfile.js +235 -259
- package/dist/eco/npm/pnpm/parse-pnpm-package-id-v5.js +37 -47
- package/dist/eco/npm/pnpm/parse-pnpm-package-id-v6-v9.js +36 -49
- package/dist/eco/npm/script.js +82 -90
- package/dist/eco/npm/vlt/exec.js +24 -32
- package/dist/eco/npm/yarnpkg/yarn/exec.js +60 -59
- package/dist/eco/npm/yarnpkg/yarn/lockfile-format.js +20 -36
- package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +194 -242
- package/dist/eco/npm/yarnpkg/yarn/parse-yarn-descriptor.js +37 -61
- package/dist/eco/purl.js +50 -60
- package/dist/eco/types.js +1 -17
- package/dist/effects/pulse-frames.js +64 -65
- package/dist/effects/shimmer-keyframes.js +71 -52
- package/dist/effects/shimmer-terminal.js +81 -50
- package/dist/effects/shimmer.js +290 -153
- package/dist/env/boolean.js +42 -43
- package/dist/env/case-insensitive.js +54 -39
- package/dist/env/ci.js +29 -31
- package/dist/env/debug.js +28 -31
- package/dist/env/github.js +144 -59
- package/dist/env/home.js +38 -31
- package/dist/env/locale.js +59 -39
- package/dist/env/node-auth-token.js +28 -31
- package/dist/env/node-env.js +28 -31
- package/dist/env/npm.js +94 -47
- package/dist/env/number.js +50 -51
- package/dist/env/package-manager.js +95 -83
- package/dist/env/path.js +28 -31
- package/dist/env/pre-commit.js +30 -32
- package/dist/env/proxy.js +121 -122
- package/dist/env/rewire.js +204 -96
- package/dist/env/shell.js +28 -31
- package/dist/env/socket-cli.js +233 -81
- package/dist/env/socket.js +521 -156
- package/dist/env/string.js +43 -44
- package/dist/env/temp-dir.js +59 -39
- package/dist/env/term.js +28 -31
- package/dist/env/test.js +65 -43
- package/dist/env/types.js +1 -17
- package/dist/env/windows.js +78 -43
- package/dist/env/xdg.js +62 -39
- package/dist/errors/message.js +40 -46
- package/dist/errors/predicates.js +61 -49
- package/dist/errors/stack.js +24 -36
- package/dist/events/exit/_internal.js +86 -103
- package/dist/events/exit/handler.js +48 -55
- package/dist/events/exit/intercept.js +49 -70
- package/dist/events/exit/lifecycle.js +92 -101
- package/dist/events/exit/signals.js +25 -31
- package/dist/events/exit/types.js +1 -17
- package/dist/events/warning/handler.js +43 -40
- package/dist/events/warning/suppress.js +111 -90
- package/dist/external/@npmcli/package-json/lib/read-package.js +132 -153
- package/dist/external/@npmcli/package-json/lib/sort.js +73 -105
- package/dist/external/@npmcli/package-json.js +12705 -15140
- package/dist/external/@npmcli/promise-spawn.js +451 -472
- package/dist/external/@sinclair/typebox/value.js +7443 -9002
- package/dist/external/@sinclair/typebox.js +7516 -7885
- package/dist/external/@socketregistry/is-unicode-supported.js +31 -39
- package/dist/external/@socketregistry/packageurl-js.js +6127 -7369
- package/dist/external/@socketregistry/yocto-spinner.js +394 -455
- package/dist/external/@yarnpkg/extensions.js +435 -1022
- package/dist/external/adm-zip.js +2313 -2673
- package/dist/external/debug.js +700 -687
- package/dist/external/external-pack.js +2658 -3171
- package/dist/external/fast-sort.js +124 -138
- package/dist/external/get-east-asian-width.js +70 -64
- package/dist/external/libnpmexec.js +28 -31
- package/dist/external/npm-pack.js +43617 -50137
- package/dist/external/p-map.js +198 -222
- package/dist/external/pico-pack.js +6735 -7304
- package/dist/external/pony-cause.js +143 -139
- package/dist/external/shell-quote.js +226 -0
- package/dist/external/spdx-pack.js +1283 -1403
- package/dist/external/streaming-iterables.js +835 -1052
- package/dist/external/tar-fs.js +2769 -3048
- package/dist/external/which.js +267 -251
- package/dist/external/yargs-parser.js +851 -1074
- package/dist/external-tools/bazel/asset-names.js +98 -90
- package/dist/external-tools/bazel/from-download.js +52 -46
- package/dist/external-tools/bazel/from-path.js +27 -38
- package/dist/external-tools/bazel/read-bazel-version-file.js +35 -57
- package/dist/external-tools/bazel/resolve-asset-url.js +24 -39
- package/dist/external-tools/bazel/resolve-bazel-version.js +34 -56
- package/dist/external-tools/bazel/resolve.js +44 -58
- package/dist/external-tools/bazel/types.js +1 -17
- package/dist/external-tools/cdxgen/asset-names.js +59 -66
- package/dist/external-tools/cdxgen/from-download.js +52 -80
- package/dist/external-tools/cdxgen/from-path.js +19 -37
- package/dist/external-tools/cdxgen/from-vfs.js +22 -43
- package/dist/external-tools/cdxgen/resolve.js +48 -63
- package/dist/external-tools/cdxgen/types.js +1 -17
- package/dist/external-tools/from-download.js +107 -67
- package/dist/external-tools/janus/asset-names.js +44 -51
- package/dist/external-tools/janus/from-download.js +45 -70
- package/dist/external-tools/janus/from-path.js +19 -37
- package/dist/external-tools/janus/from-vfs.js +22 -43
- package/dist/external-tools/janus/resolve.js +45 -63
- package/dist/external-tools/janus/types.js +1 -17
- package/dist/external-tools/jre/asset-names.js +109 -82
- package/dist/external-tools/jre/detect-platform-arch.js +25 -49
- package/dist/external-tools/jre/from-download.js +71 -67
- package/dist/external-tools/jre/from-java-home.js +27 -54
- package/dist/external-tools/jre/from-path.js +27 -49
- package/dist/external-tools/jre/from-vfs.js +39 -60
- package/dist/external-tools/jre/resolve.js +55 -68
- package/dist/external-tools/jre/types.js +1 -17
- package/dist/external-tools/manifest.js +130 -150
- package/dist/external-tools/opengrep/asset-names.js +60 -72
- package/dist/external-tools/opengrep/from-download.js +58 -80
- package/dist/external-tools/opengrep/from-path.js +19 -37
- package/dist/external-tools/opengrep/from-vfs.js +23 -43
- package/dist/external-tools/opengrep/resolve.js +43 -63
- package/dist/external-tools/opengrep/types.js +1 -17
- package/dist/external-tools/sbt/asset-names.js +21 -30
- package/dist/external-tools/sbt/from-download.js +50 -61
- package/dist/external-tools/sbt/from-path.js +23 -38
- package/dist/external-tools/sbt/from-vfs.js +30 -44
- package/dist/external-tools/sbt/resolve.js +45 -63
- package/dist/external-tools/sbt/types.js +1 -17
- package/dist/external-tools/synp/asset-names.js +11 -29
- package/dist/external-tools/synp/from-download.js +24 -41
- package/dist/external-tools/synp/from-path.js +19 -37
- package/dist/external-tools/synp/from-vfs.js +22 -43
- package/dist/external-tools/synp/resolve.js +43 -62
- package/dist/external-tools/synp/types.js +1 -17
- package/dist/external-tools/trivy/asset-names.js +51 -62
- package/dist/external-tools/trivy/from-download.js +42 -64
- package/dist/external-tools/trivy/from-path.js +19 -37
- package/dist/external-tools/trivy/from-vfs.js +22 -43
- package/dist/external-tools/trivy/resolve.js +43 -63
- package/dist/external-tools/trivy/types.js +1 -17
- package/dist/external-tools/trufflehog/asset-names.js +54 -66
- package/dist/external-tools/trufflehog/from-download.js +44 -62
- package/dist/external-tools/trufflehog/from-path.js +21 -37
- package/dist/external-tools/trufflehog/from-vfs.js +26 -43
- package/dist/external-tools/trufflehog/resolve.js +43 -63
- package/dist/external-tools/trufflehog/types.js +1 -17
- package/dist/external-tools/uv/asset-names.js +64 -74
- package/dist/external-tools/uv/from-download.js +44 -65
- package/dist/external-tools/uv/from-path.js +19 -37
- package/dist/external-tools/uv/from-vfs.js +22 -43
- package/dist/external-tools/uv/resolve.js +42 -63
- package/dist/external-tools/uv/types.js +1 -17
- package/dist/fs/_internal.js +40 -42
- package/dist/fs/access.d.ts +32 -0
- package/dist/fs/access.js +66 -0
- package/dist/fs/encoding.js +80 -97
- package/dist/fs/find-up.js +126 -147
- package/dist/fs/inspect.js +168 -99
- package/dist/fs/path-cache.js +31 -32
- package/dist/fs/read-dir.js +102 -79
- package/dist/fs/read-file.js +177 -118
- package/dist/fs/read-json-cache.js +150 -134
- package/dist/fs/read-json.js +172 -187
- package/dist/fs/resolve-module.d.ts +57 -0
- package/dist/fs/resolve-module.js +40 -0
- package/dist/fs/safe.js +278 -169
- package/dist/fs/types.js +1 -17
- package/dist/fs/unique.js +52 -48
- package/dist/fs/validate.js +56 -43
- package/dist/fs/write-json.js +109 -75
- package/dist/git/_internal.js +251 -216
- package/dist/git/changed.js +191 -74
- package/dist/git/repo.js +118 -104
- package/dist/git/staged.js +172 -62
- package/dist/git/types.js +1 -17
- package/dist/git/unstaged.js +175 -62
- package/dist/github/constants.js +25 -33
- package/dist/github/errors.js +46 -38
- package/dist/github/fetch.js +137 -82
- package/dist/github/ghsa.js +217 -151
- package/dist/github/refs-cache.js +54 -43
- package/dist/github/refs-graphql.js +97 -89
- package/dist/github/refs-rest.js +70 -101
- package/dist/github/refs.js +105 -64
- package/dist/github/token.js +96 -48
- package/dist/github/types.js +1 -17
- package/dist/globs/_internal.js +73 -82
- package/dist/globs/defaults.js +40 -59
- package/dist/globs/match.js +93 -77
- package/dist/globs/matcher.js +104 -92
- package/dist/globs/stream.js +43 -55
- package/dist/globs/types.js +1 -17
- package/dist/http-request/_internal.js +11 -38
- package/dist/http-request/browser-fetch.js +19 -29
- package/dist/http-request/browser.js +188 -206
- package/dist/http-request/checksums.js +101 -65
- package/dist/http-request/download-types.js +1 -17
- package/dist/http-request/download.js +195 -196
- package/dist/http-request/errors.js +39 -47
- package/dist/http-request/headers.js +95 -80
- package/dist/http-request/http-request.js +10 -35
- package/dist/http-request/node.js +71 -97
- package/dist/http-request/request-attempt.js +232 -285
- package/dist/http-request/request-types.js +1 -17
- package/dist/http-request/request.js +106 -108
- package/dist/http-request/response-reader.js +47 -51
- package/dist/http-request/response-types.js +22 -38
- package/dist/http-request/user-agent.js +73 -55
- package/dist/integrity.js +105 -106
- package/dist/ipc/_internal.js +34 -48
- package/dist/ipc/directory.js +55 -63
- package/dist/ipc/paths.js +52 -45
- package/dist/ipc/types.js +1 -17
- package/dist/ipc/write.js +81 -74
- package/dist/ipc-cli/get.js +29 -56
- package/dist/ipc-cli/types.js +1 -17
- package/dist/json/edit.js +182 -242
- package/dist/json/format.js +202 -103
- package/dist/json/parse.js +206 -109
- package/dist/json/types.js +1 -17
- package/dist/links/create.js +93 -60
- package/dist/links/types.js +1 -17
- package/dist/logger/_internal.js +109 -73
- package/dist/logger/browser.js +45 -56
- package/dist/logger/colors.js +31 -49
- package/dist/logger/console.js +89 -112
- package/dist/logger/default.js +19 -33
- package/dist/logger/logger.js +5 -29
- package/dist/logger/node.js +794 -854
- package/dist/logger/symbols-builder.js +54 -56
- package/dist/logger/symbols.js +135 -118
- package/dist/logger/types.js +1 -17
- package/dist/memo/_internal.js +39 -49
- package/dist/memo/async.js +133 -117
- package/dist/memo/clear.js +25 -34
- package/dist/memo/decorator.js +43 -37
- package/dist/memo/memoize.js +97 -88
- package/dist/memo/once.js +42 -41
- package/dist/memo/types.js +1 -17
- package/dist/memo/weak.js +45 -41
- package/dist/node/async-hooks.js +9 -30
- package/dist/node/child-process.js +9 -30
- package/dist/node/crypto.js +9 -30
- package/dist/node/events.js +9 -30
- package/dist/node/fs-promises.js +9 -30
- package/dist/node/fs.js +9 -30
- package/dist/node/http.js +9 -30
- package/dist/node/https.js +9 -30
- package/dist/node/module.js +20 -34
- package/dist/node/os.js +9 -30
- package/dist/node/path.js +9 -30
- package/dist/node/timers-promises.js +9 -30
- package/dist/node/url.js +9 -30
- package/dist/node/util.js +9 -30
- package/dist/objects/getters.js +185 -126
- package/dist/objects/inspect.js +85 -52
- package/dist/objects/mutate.js +96 -76
- package/dist/objects/predicates.js +112 -59
- package/dist/objects/sort.js +120 -76
- package/dist/objects/types.js +1 -17
- package/dist/packages/edit-class.js +198 -265
- package/dist/packages/edit.js +79 -86
- package/dist/packages/exports.js +146 -157
- package/dist/packages/isolation.js +159 -209
- package/dist/packages/licenses.js +207 -189
- package/dist/packages/manifest.js +134 -172
- package/dist/packages/normalize.js +91 -102
- package/dist/packages/operations.d.ts +2 -0
- package/dist/packages/operations.js +283 -254
- package/dist/packages/provenance.js +195 -245
- package/dist/packages/specs.js +94 -84
- package/dist/packages/types.js +1 -17
- package/dist/packages/validation.js +49 -50
- package/dist/paths/_internal.js +82 -86
- package/dist/paths/conversion.js +112 -65
- package/dist/paths/dirnames.js +17 -42
- package/dist/paths/exts.js +23 -54
- package/dist/paths/filenames.js +21 -50
- package/dist/paths/globs.js +15 -38
- package/dist/paths/normalize.js +215 -236
- package/dist/paths/packages.js +34 -49
- package/dist/paths/predicates.js +184 -106
- package/dist/paths/resolve.js +146 -128
- package/dist/paths/rewire.js +108 -72
- package/dist/paths/socket.js +252 -132
- package/dist/paths/walk.d.ts +40 -0
- package/dist/paths/walk.js +58 -0
- package/dist/perf/_internal.js +10 -28
- package/dist/perf/enabled.js +21 -30
- package/dist/perf/metrics.js +81 -67
- package/dist/perf/report.js +79 -80
- package/dist/perf/timer.js +180 -126
- package/dist/perf/types.js +1 -17
- package/dist/pkg-ext/data.js +29 -82
- package/dist/pkg-ext/types.js +1 -17
- package/dist/primordials/array.js +120 -198
- package/dist/primordials/buffer.js +28 -51
- package/dist/primordials/date.js +26 -51
- package/dist/primordials/error.js +33 -59
- package/dist/primordials/function.js +21 -41
- package/dist/primordials/globals.js +25 -48
- package/dist/primordials/json.js +14 -30
- package/dist/primordials/map-set.js +88 -152
- package/dist/primordials/math.js +59 -116
- package/dist/primordials/number.js +41 -76
- package/dist/primordials/object.js +56 -116
- package/dist/primordials/promise.js +28 -52
- package/dist/primordials/reflect.js +24 -52
- package/dist/primordials/regexp.js +25 -47
- package/dist/primordials/string.js +114 -167
- package/dist/primordials/symbol.js +40 -72
- package/dist/primordials/uncurry.js +38 -55
- package/dist/primordials/url.js +27 -66
- package/dist/process/_internal.js +7 -32
- package/dist/process/abort.js +29 -35
- package/dist/process/lock-instance.js +26 -30
- package/dist/process/lock-manager.js +279 -307
- package/dist/process/lock-types.js +1 -17
- package/dist/process/spawn/_internal.js +43 -55
- package/dist/process/spawn/child.js +172 -211
- package/dist/process/spawn/errors.js +116 -113
- package/dist/process/spawn/stdio.js +51 -35
- package/dist/process/spawn/types.js +1 -17
- package/dist/process/transient.js +49 -66
- package/dist/promises/_internal.d.ts +8 -2
- package/dist/promises/_internal.js +31 -38
- package/dist/promises/iterate.js +238 -102
- package/dist/promises/options.js +123 -101
- package/dist/promises/queue.js +115 -136
- package/dist/promises/resolvers.js +77 -46
- package/dist/promises/retry.js +156 -101
- package/dist/promises/types.js +1 -17
- package/dist/regexps/escape.js +32 -30
- package/dist/regexps/hex.js +16 -33
- package/dist/regexps/spec.js +53 -81
- package/dist/releases/github-archives.js +127 -118
- package/dist/releases/github-asset-url.js +162 -155
- package/dist/releases/github-assets.js +37 -49
- package/dist/releases/github-auth.js +32 -48
- package/dist/releases/github-downloads.js +118 -138
- package/dist/releases/github-listing.js +175 -154
- package/dist/releases/github-retry-config.d.ts +31 -0
- package/dist/releases/github-retry-config.js +46 -0
- package/dist/releases/github-types.js +1 -17
- package/dist/releases/socket-btm.js +273 -192
- package/dist/schema/parse.js +35 -36
- package/dist/schema/types.js +1 -17
- package/dist/schema/validate.js +118 -99
- package/dist/sea/detect.js +57 -52
- package/dist/secrets/_internal.js +86 -67
- package/dist/secrets/find.js +96 -77
- package/dist/secrets/keychain.js +315 -309
- package/dist/secrets/linux.js +133 -135
- package/dist/secrets/macos.js +151 -147
- package/dist/secrets/rc.js +182 -181
- package/dist/secrets/socket-api-token.js +28 -43
- package/dist/secrets/types.js +1 -17
- package/dist/secrets/windows.js +184 -242
- package/dist/shadow/skip.js +51 -70
- package/dist/shadow/types.js +1 -17
- package/dist/shell/parse.d.ts +26 -0
- package/dist/shell/parse.js +35 -0
- package/dist/shell/quote.d.ts +19 -0
- package/dist/shell/quote.js +30 -0
- package/dist/smol/detect.js +67 -43
- package/dist/smol/http.js +33 -37
- package/dist/smol/https.js +31 -37
- package/dist/smol/manifest.js +33 -37
- package/dist/smol/path.d.ts +51 -0
- package/dist/smol/path.js +38 -0
- package/dist/smol/primordial.js +35 -37
- package/dist/smol/purl.js +34 -37
- package/dist/smol/versions.js +31 -37
- package/dist/smol/vfs.js +46 -38
- package/dist/sorts/_internal.js +14 -40
- package/dist/sorts/natural.js +57 -64
- package/dist/sorts/semver.js +33 -43
- package/dist/sorts/strings.js +24 -30
- package/dist/sorts/types.js +1 -17
- package/dist/spinner/default.js +72 -63
- package/dist/spinner/format.js +86 -71
- package/dist/spinner/spinner.js +749 -797
- package/dist/spinner/types.js +1 -17
- package/dist/spinner/with.js +193 -137
- package/dist/ssri/convert.js +64 -47
- package/dist/ssri/parse.js +38 -37
- package/dist/ssri/validate.js +51 -34
- package/dist/stdio/_internal.js +50 -46
- package/dist/stdio/clear.js +208 -86
- package/dist/stdio/divider.js +170 -97
- package/dist/stdio/footer.js +116 -110
- package/dist/stdio/header.js +117 -90
- package/dist/stdio/progress.js +189 -218
- package/dist/stdio/prompts.js +244 -168
- package/dist/stdio/stderr.js +173 -78
- package/dist/stdio/stdout.js +177 -94
- package/dist/streams/parallel.js +58 -50
- package/dist/streams/transform.js +36 -45
- package/dist/strings/format.js +145 -63
- package/dist/strings/predicates.js +56 -34
- package/dist/strings/search.js +52 -42
- package/dist/strings/transform.js +113 -72
- package/dist/strings/types.js +1 -17
- package/dist/strings/width.js +89 -82
- package/dist/tables/bordered.js +81 -81
- package/dist/tables/padding.js +36 -46
- package/dist/tables/simple.js +62 -70
- package/dist/tables/types.js +1 -17
- package/dist/temporal/instant.js +72 -81
- package/dist/temporal/now.js +40 -31
- package/dist/temporal/slots.js +42 -36
- package/dist/temporal/system.js +36 -36
- package/dist/temporal/temporal.js +11 -41
- package/dist/themes/context.js +131 -69
- package/dist/themes/resolve.js +207 -132
- package/dist/themes/themes.js +225 -194
- package/dist/themes/types.js +1 -17
- package/dist/url/parse.js +48 -51
- package/dist/url/predicates.js +24 -31
- package/dist/url/search-params.js +133 -101
- package/dist/url/types.js +1 -17
- package/dist/versions/_internal.js +31 -33
- package/dist/versions/compare.js +80 -58
- package/dist/versions/modify.js +41 -39
- package/dist/versions/parse.js +88 -64
- package/dist/versions/range.js +58 -41
- package/dist/versions/types.js +1 -17
- package/dist/words/article.js +22 -30
- package/dist/words/capitalize.js +25 -34
- package/dist/words/pluralize.js +23 -31
- package/dist/words/types.js +1 -17
- package/package.json +42 -5
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,40 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [6.0.4](https://github.com/SocketDev/socket-lib/releases/tag/v6.0.4) - 2026-05-28
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`shell/quote` — `quote(argv)`.** Escape an argv array into a single POSIX-`sh`-safe command string for display, logging, or copy-pasteable reproductions. Wraps the vendored `shell-quote`. For spawning, prefer `child_process.spawn` with an argv array over quoting into a shell string.
|
|
13
|
+
- **`shell/parse` — `parseShell(line)`.** Tokenize a command line into typed entries (bare strings, operators, comments, globs), preserving shell structure. Use when you need the operators / comments back; for plain argv extraction continue to use `argv/parse-args-string`.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **`argv/parse-args-string` now delegates to the vendored `shell-quote` parser** instead of the hand-rolled regex. Output narrows to bare-string tokens: inner quotes on mixed `key="value"` tokens are stripped (`--bar="x y"` → `--bar=x y`), `$VAR` collapses to empty, operators and comments are dropped. The function's own `@example` already documented the stripped form; only one unit test relied on the old shape.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **`make-fetch-happen` fetcher is now lazily initialized.** `packages/operations.ts` was creating the fetcher at module load, which forced `make-fetch-happen` (and the npm-pack bundle behind it) to load for any consumer of the module — even ones that only used pure helpers. Initialization now defers to first use.
|
|
22
|
+
- **`Global*` primordial aliases normalize embedded acronyms.** The generator was title-casing the first letter only, leaving embedded acronyms screaming (`encodeURIComponent` → `GlobalEncodeURIComponent`). DOM/URI/URL now lowercase past the first letter so aliases read as single TitleCase words. Concrete renames in `DEFAULT_ALIAS_MAP`: `GlobalDecodeURIComponent` → `GlobalDecodeUriComponent`, `GlobalEncodeURIComponent` → `GlobalEncodeUriComponent`.
|
|
23
|
+
|
|
24
|
+
## [6.0.3](https://github.com/SocketDev/socket-lib/releases/tag/v6.0.3) - 2026-05-26
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **`paths/walk` — `walkUp(from, { cwd, stopAt })`.** Lazy generator yielding a path then each ancestor up to (and including) the filesystem root or a `stopAt` boundary. `fs/find-up` now builds on it.
|
|
29
|
+
- **`fs/access` — `canAccess` / `canRead` / `canWrite` / `canExecute`.** Sync boolean permission checks over `fs.accessSync` (F_OK / R_OK / W_OK / X_OK). For "I'm about to write" prefer attempting the write over a pre-check (TOCTOU); use these when the answer drives a branch.
|
|
30
|
+
- **`fs/resolve-module` — `requireResolveFrom(fromDir, specifier)` / `requireResolveFromCwd(specifier)`.** `require.resolve` anchored at an arbitrary directory (e.g. "the `typescript` THIS project would load"). `nothrow: true` returns `undefined` instead of throwing.
|
|
31
|
+
- **`releases/github-retry-config` — `GITHUB_RETRY_CONFIG`, `resolveBaseDelayMs()`, `DEFAULT_BASE_DELAY_MS`.** Shared backoff config for the GitHub release helpers. The base retry delay is overridable via the `SOCKET_GITHUB_RETRY_BASE_DELAY_MS` env var (default 5000ms; set `0` for near-instant retries) — useful in CI / tests to skip the exponential-backoff wait.
|
|
32
|
+
- **`smol/path` — `getSmolPath()`.** Lazy accessor for socket-btm's `node:smol-path` native binding; `undefined` on stock Node. `walkUp`, `canAccess`, and `findUp` now prefer the native fast path (`dirname` / `access` / batched find-up) when running on a smol binary and fall back to the JS implementation otherwise — transparent to callers.
|
|
33
|
+
|
|
34
|
+
### Changed (breaking)
|
|
35
|
+
|
|
36
|
+
- **`ai/profiles` exports a single `AI_PROFILE` capability ladder** instead of the four standalone `*_PROFILE` constants. The tiers are `AI_PROFILE.read` ⊂ `.edit` ⊂ `.create` ⊂ `.full`, ordered least-to-most capable. Migration: `READ_ONLY_PROFILE` → `AI_PROFILE.read`; `EDIT_ONLY_PROFILE` → `AI_PROFILE.create` (the old `EDIT_ONLY` allowed `Write`/`MultiEdit`); `FULL_FIX_PROFILE` → `AI_PROFILE.full`. New `AI_PROFILE.edit` is the narrowest fix tier — `Edit` on existing files only, no `Write`/`MultiEdit` — for lint autofix and in-place codemods.
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
|
|
40
|
+
- **Every `AI_PROFILE` tier now denies `Agent`.** Sub-agent spawning is blocked across all profiles, since a sub-agent can escape the parent's tool restrictions.
|
|
41
|
+
|
|
8
42
|
## [6.0.2](https://github.com/SocketDev/socket-lib/releases/tag/v6.0.2) - 2026-05-26
|
|
9
43
|
|
|
10
44
|
### Added
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
//#region \0rolldown/runtime.js
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __exportAll = (all, no_symbols) => {
|
|
11
|
+
let target = {};
|
|
12
|
+
for (var name in all) {
|
|
13
|
+
__defProp(target, name, {
|
|
14
|
+
get: all[name],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
if (!no_symbols) {
|
|
19
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
20
|
+
}
|
|
21
|
+
return target;
|
|
22
|
+
};
|
|
23
|
+
var __copyProps = (to, from, except, desc) => {
|
|
24
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
25
|
+
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
26
|
+
key = keys[i];
|
|
27
|
+
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
28
|
+
__defProp(to, key, {
|
|
29
|
+
get: ((k) => from[k]).bind(null, key),
|
|
30
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return to;
|
|
36
|
+
};
|
|
37
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
38
|
+
value: mod,
|
|
39
|
+
enumerable: true
|
|
40
|
+
}) : target, mod));
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
|
|
44
|
+
exports.__exportAll = __exportAll;
|
|
45
|
+
exports.__toESM = __toESM;
|
package/dist/abort/signal.js
CHANGED
|
@@ -1,64 +1,58 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Socket Lib - Built with
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
createCompositeAbortSignal: () => createCompositeAbortSignal,
|
|
24
|
-
createTimeoutSignal: () => createTimeoutSignal
|
|
25
|
-
});
|
|
26
|
-
module.exports = __toCommonJS(signal_exports);
|
|
27
|
-
var import_error = require("../primordials/error");
|
|
28
|
-
var import_math = require("../primordials/math");
|
|
29
|
-
var import_number = require("../primordials/number");
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_primordials_error = require('../primordials/error.js');
|
|
5
|
+
const require_primordials_math = require('../primordials/math.js');
|
|
6
|
+
const require_primordials_number = require('../primordials/number.js');
|
|
7
|
+
|
|
8
|
+
//#region src/abort/signal.ts
|
|
9
|
+
/**
|
|
10
|
+
* @file Abort signal utilities — composite signal construction from multiple
|
|
11
|
+
* sources and timeout-driven signal creation.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Create a composite AbortSignal from multiple signals.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ;```typescript
|
|
18
|
+
* const ac1 = new AbortController()
|
|
19
|
+
* const ac2 = new AbortController()
|
|
20
|
+
* const signal = createCompositeAbortSignal(ac1.signal, ac2.signal)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
30
23
|
function createCompositeAbortSignal(...signals) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
45
|
-
}
|
|
46
|
-
return controller.signal;
|
|
24
|
+
const validSignals = signals.filter((s) => s != null);
|
|
25
|
+
if (validSignals.length === 0) return new AbortController().signal;
|
|
26
|
+
if (validSignals.length === 1) return validSignals[0];
|
|
27
|
+
const controller = new AbortController();
|
|
28
|
+
for (const signal of validSignals) {
|
|
29
|
+
if (signal.aborted) {
|
|
30
|
+
controller.abort();
|
|
31
|
+
return controller.signal;
|
|
32
|
+
}
|
|
33
|
+
signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
34
|
+
}
|
|
35
|
+
return controller.signal;
|
|
47
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Create an AbortSignal that triggers after a timeout.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ;```typescript
|
|
42
|
+
* const signal = createTimeoutSignal(5000) // aborts after 5 seconds
|
|
43
|
+
* fetch('https://example.com', { signal })
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @throws {TypeError} If `ms` is not a number, is NaN, is not finite, or is not
|
|
47
|
+
* positive.
|
|
48
|
+
*/
|
|
48
49
|
function createTimeoutSignal(ms) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
throw new import_error.TypeErrorCtor("timeout must be a finite number");
|
|
54
|
-
}
|
|
55
|
-
if (ms <= 0) {
|
|
56
|
-
throw new import_error.TypeErrorCtor("timeout must be a positive number");
|
|
57
|
-
}
|
|
58
|
-
return AbortSignal.timeout((0, import_math.MathCeil)(ms));
|
|
50
|
+
if (typeof ms !== "number" || require_primordials_number.NumberIsNaN(ms)) throw new require_primordials_error.TypeErrorCtor("timeout must be a number");
|
|
51
|
+
if (!require_primordials_number.NumberIsFinite(ms)) throw new require_primordials_error.TypeErrorCtor("timeout must be a finite number");
|
|
52
|
+
if (ms <= 0) throw new require_primordials_error.TypeErrorCtor("timeout must be a positive number");
|
|
53
|
+
return AbortSignal.timeout(require_primordials_math.MathCeil(ms));
|
|
59
54
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
});
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
exports.createCompositeAbortSignal = createCompositeAbortSignal;
|
|
58
|
+
exports.createTimeoutSignal = createTimeoutSignal;
|
package/dist/ai/discover.js
CHANGED
|
@@ -1,128 +1,128 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Socket Lib - Built with
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
var discover_exports = {};
|
|
32
|
-
__export(discover_exports, {
|
|
33
|
-
cachePathFor: () => cachePathFor,
|
|
34
|
-
discoverAiAgents: () => discoverAiAgents,
|
|
35
|
-
discoverFresh: () => discoverFresh,
|
|
36
|
-
getDiscoveredAiAgents: () => getDiscoveredAiAgents,
|
|
37
|
-
readDiskCache: () => readDiskCache,
|
|
38
|
-
resetAiAgentDiscoveryCache: () => resetAiAgentDiscoveryCache,
|
|
39
|
-
writeDiskCache: () => writeDiskCache
|
|
40
|
-
});
|
|
41
|
-
module.exports = __toCommonJS(discover_exports);
|
|
42
|
-
var import_node_fs = require("node:fs");
|
|
43
|
-
var import_promises = require("node:fs/promises");
|
|
44
|
-
var import_node_path = __toESM(require("node:path"), 1);
|
|
45
|
-
var import_which = require("../bin/which");
|
|
46
|
-
var import_message = require("../errors/message");
|
|
47
|
-
var import_default = require("../logger/default");
|
|
48
|
-
var import_json = require("../primordials/json");
|
|
49
|
-
const logger = (0, import_default.getDefaultLogger)();
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
|
5
|
+
const require_primordials_json = require('../primordials/json.js');
|
|
6
|
+
const require_bin_which = require('../bin/which.js');
|
|
7
|
+
const require_errors_message = require('../errors/message.js');
|
|
8
|
+
const require_logger_default = require('../logger/default.js');
|
|
9
|
+
let node_fs = require("node:fs");
|
|
10
|
+
let node_fs_promises = require("node:fs/promises");
|
|
11
|
+
let node_path = require("node:path");
|
|
12
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
13
|
+
|
|
14
|
+
//#region src/ai/discover.mts
|
|
15
|
+
/**
|
|
16
|
+
* @file Detect which AI agent CLIs are installed on PATH. Strategy:
|
|
17
|
+
* which()-based lookup with a two-tier cache:
|
|
18
|
+
*
|
|
19
|
+
* 1. In-process Map — survives until the Node process exits.
|
|
20
|
+
* 2. On-disk JSON at `<repo>/.cache/agent-discovery.json`, TTL 1h — survives
|
|
21
|
+
* across subprocess invocations (per-file ai-lint-fix batches) without
|
|
22
|
+
* re-running which(). Cache invalidation: stale on-disk cache is detected
|
|
23
|
+
* by mtime comparison; missing or expired → fresh which() pass + rewrite.
|
|
24
|
+
* Why two tiers: hooks and skills spawn dozens of short-lived Node
|
|
25
|
+
* processes per session. In-process alone misses the cross-process
|
|
26
|
+
* speedup; on-disk alone hits the filesystem on every call. The
|
|
27
|
+
* combination keeps repeated lookups under a millisecond after the
|
|
28
|
+
* cold-start cost.
|
|
29
|
+
*/
|
|
30
|
+
const logger = require_logger_default.getDefaultLogger();
|
|
50
31
|
const KNOWN_AGENTS = [
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
32
|
+
"claude",
|
|
33
|
+
"codex",
|
|
34
|
+
"gemini",
|
|
35
|
+
"opencode"
|
|
55
36
|
];
|
|
56
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Cache TTL in milliseconds (1 hour).
|
|
39
|
+
*/
|
|
40
|
+
const CACHE_TTL_MS = 3600 * 1e3;
|
|
57
41
|
let inProcessCache;
|
|
58
42
|
function cachePathFor(repoRoot) {
|
|
59
|
-
|
|
43
|
+
return node_path.default.join(repoRoot, ".cache", "agent-discovery.json");
|
|
60
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Discover which AI agent CLIs are installed.
|
|
47
|
+
*
|
|
48
|
+
* @param options.repoRoot - Where to read/write the on-disk cache. Defaults to
|
|
49
|
+
* process.cwd(). Skill runners typically pass the target repo's root.
|
|
50
|
+
* @param options.refresh - When true, bypass both caches and re-run which().
|
|
51
|
+
* Useful after `npm i -g <agent>` mid-session.
|
|
52
|
+
*
|
|
53
|
+
* Returns a map of agent → absolute binary path. Agents that aren't installed
|
|
54
|
+
* are absent from the map (not present-with-undefined), so callers can use
|
|
55
|
+
* `'claude' in agents` for the existence check.
|
|
56
|
+
*/
|
|
61
57
|
async function discoverAiAgents(options = {}) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
await writeDiskCache(cachePath, fresh);
|
|
77
|
-
return fresh;
|
|
58
|
+
const { refresh = false, repoRoot = process.cwd() } = options;
|
|
59
|
+
if (!refresh && inProcessCache) return inProcessCache;
|
|
60
|
+
const cachePath = cachePathFor(repoRoot);
|
|
61
|
+
if (!refresh) {
|
|
62
|
+
const fromDisk = readDiskCache(cachePath);
|
|
63
|
+
if (fromDisk) {
|
|
64
|
+
inProcessCache = fromDisk;
|
|
65
|
+
return fromDisk;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const fresh = discoverFresh();
|
|
69
|
+
inProcessCache = fresh;
|
|
70
|
+
await writeDiskCache(cachePath, fresh);
|
|
71
|
+
return fresh;
|
|
78
72
|
}
|
|
79
73
|
function discoverFresh() {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
return out;
|
|
74
|
+
const out = {};
|
|
75
|
+
for (const name of KNOWN_AGENTS) {
|
|
76
|
+
const found = require_bin_which.whichSync(name);
|
|
77
|
+
if (typeof found === "string" && found) out[name] = found;
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
88
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Synchronous in-process lookup. Skips disk cache + which(). Returns undefined
|
|
83
|
+
* if discoverAiAgents() hasn't been called yet in this process, OR returns the
|
|
84
|
+
* most recent discovery result.
|
|
85
|
+
*
|
|
86
|
+
* Useful in fast paths where the caller has already populated the cache and
|
|
87
|
+
* just wants to read it back.
|
|
88
|
+
*/
|
|
89
89
|
function getDiscoveredAiAgents() {
|
|
90
|
-
|
|
90
|
+
return inProcessCache;
|
|
91
91
|
}
|
|
92
92
|
function readDiskCache(cachePath) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
return parsed.agents;
|
|
103
|
-
} catch {
|
|
104
|
-
return void 0;
|
|
105
|
-
}
|
|
93
|
+
if (!(0, node_fs.existsSync)(cachePath)) return;
|
|
94
|
+
try {
|
|
95
|
+
const parsed = require_primordials_json.JSONParse((0, node_fs.readFileSync)(cachePath, "utf8"));
|
|
96
|
+
if (typeof parsed !== "object" || parsed === null || typeof parsed.writtenAt !== "number" || Date.now() - parsed.writtenAt > CACHE_TTL_MS) return;
|
|
97
|
+
return parsed.agents;
|
|
98
|
+
} catch {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
106
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Reset the in-process cache. Tests use this; production callers shouldn't need
|
|
104
|
+
* it (use `refresh: true` on discoverAiAgents()).
|
|
105
|
+
*/
|
|
107
106
|
function resetAiAgentDiscoveryCache() {
|
|
108
|
-
|
|
107
|
+
inProcessCache = void 0;
|
|
109
108
|
}
|
|
110
109
|
async function writeDiskCache(cachePath, agents) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
110
|
+
try {
|
|
111
|
+
await (0, node_fs_promises.mkdir)(node_path.default.dirname(cachePath), { recursive: true });
|
|
112
|
+
(0, node_fs.writeFileSync)(cachePath, require_primordials_json.JSONStringify({
|
|
113
|
+
agents,
|
|
114
|
+
writtenAt: Date.now()
|
|
115
|
+
}, void 0, 2) + "\n");
|
|
116
|
+
} catch (e) {
|
|
117
|
+
logger.error(`discoverAiAgents: cache write failed (${require_errors_message.errorMessage(e)})`);
|
|
118
|
+
}
|
|
118
119
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
});
|
|
120
|
+
|
|
121
|
+
//#endregion
|
|
122
|
+
exports.cachePathFor = cachePathFor;
|
|
123
|
+
exports.discoverAiAgents = discoverAiAgents;
|
|
124
|
+
exports.discoverFresh = discoverFresh;
|
|
125
|
+
exports.getDiscoveredAiAgents = getDiscoveredAiAgents;
|
|
126
|
+
exports.readDiskCache = readDiskCache;
|
|
127
|
+
exports.resetAiAgentDiscoveryCache = resetAiAgentDiscoveryCache;
|
|
128
|
+
exports.writeDiskCache = writeDiskCache;
|
package/dist/ai/profiles.d.mts
CHANGED
|
@@ -2,38 +2,61 @@
|
|
|
2
2
|
* @file Pre-built lockdown profiles for spawnAiAgent. Per CLAUDE.md
|
|
3
3
|
* "Programmatic Claude calls" rule: every spawn must set tools / disallow /
|
|
4
4
|
* permissionMode (and the helper always sets --no-session-persistence +
|
|
5
|
-
* --add-dir cwd).
|
|
6
|
-
*
|
|
5
|
+
* --add-dir cwd). `AI_PROFILE` is a capability ladder — each tier permits
|
|
6
|
+
* everything the tier above it does, plus one more capability. Spread a tier
|
|
7
|
+
* and override per call (`tools`/`disallow` to tighten further, `model`,
|
|
8
|
+
* `addDirs`). Choose the LEAST-capable tier that gets the job done:
|
|
7
9
|
*
|
|
8
|
-
* - `
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* - `
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* - `
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
10
|
+
* - `AI_PROFILE.read` — research / scanning. Read + Grep + Glob + WebFetch +
|
|
11
|
+
* WebSearch. No Edit, no Write, no Bash. Static-analysis skills
|
|
12
|
+
* (scanning-quality, scanning-security).
|
|
13
|
+
* - `AI_PROFILE.edit` — in-place edits only. Read + Edit + Grep + Glob. NO
|
|
14
|
+
* Write (can't create files), NO MultiEdit, NO Bash. Lint autofix /
|
|
15
|
+
* codemods constrained to existing files.
|
|
16
|
+
* - `AI_PROFILE.create` — edit AND create files. Adds MultiEdit + Write on top
|
|
17
|
+
* of `.edit`. Still no Bash. Codegen, adding a test, refactors that split
|
|
18
|
+
* modules.
|
|
19
|
+
* - `AI_PROFILE.full` — `.create` plus Bash, allowlisted to git / pnpm / node.
|
|
20
|
+
* Skills that commit, run tests, install deps. No "wide open" tier exists
|
|
21
|
+
* by design — letting an agent run arbitrary tools is the lockdown rule's
|
|
22
|
+
* exact failure mode. The ladder is read ⊂ edit ⊂ create ⊂ full: each
|
|
23
|
+
* tier's tool set is a superset of the one above.
|
|
19
24
|
*/
|
|
20
25
|
import type { PermissionMode } from './types.mts';
|
|
21
|
-
interface
|
|
26
|
+
export interface AiProfile {
|
|
22
27
|
readonly allow: readonly string[];
|
|
23
28
|
readonly disallow: readonly string[];
|
|
24
29
|
readonly permissionMode: PermissionMode;
|
|
25
30
|
readonly tools: readonly string[];
|
|
26
31
|
}
|
|
27
32
|
/**
|
|
28
|
-
*
|
|
33
|
+
* Capability ladder of lockdown profiles, ordered least → most capable. Key
|
|
34
|
+
* order documents the ladder; each tier is a strict superset of the previous
|
|
35
|
+
* tier's tool surface.
|
|
29
36
|
*/
|
|
30
|
-
export declare const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
export declare const AI_PROFILE: {
|
|
38
|
+
readonly read: {
|
|
39
|
+
readonly allow: readonly [];
|
|
40
|
+
readonly disallow: readonly ["Agent", "Bash", "Edit", "MultiEdit", "Write"];
|
|
41
|
+
readonly permissionMode: 'dontAsk';
|
|
42
|
+
readonly tools: readonly ["Glob", "Grep", "Read", "WebFetch", "WebSearch"];
|
|
43
|
+
};
|
|
44
|
+
readonly edit: {
|
|
45
|
+
readonly allow: readonly [];
|
|
46
|
+
readonly disallow: readonly ["Agent", "Bash", "MultiEdit", "WebFetch", "WebSearch", "Write"];
|
|
47
|
+
readonly permissionMode: 'acceptEdits';
|
|
48
|
+
readonly tools: readonly ["Edit", "Glob", "Grep", "Read"];
|
|
49
|
+
};
|
|
50
|
+
readonly create: {
|
|
51
|
+
readonly allow: readonly [];
|
|
52
|
+
readonly disallow: readonly ["Agent", "Bash", "WebFetch", "WebSearch"];
|
|
53
|
+
readonly permissionMode: 'acceptEdits';
|
|
54
|
+
readonly tools: readonly ["Edit", "Glob", "Grep", "MultiEdit", "Read", "Write"];
|
|
55
|
+
};
|
|
56
|
+
readonly full: {
|
|
57
|
+
readonly allow: readonly ["Bash(git status:*)", "Bash(git diff:*)", "Bash(git log:*)", "Bash(git add:*)", "Bash(git commit:*)", "Bash(node:*)", "Bash(pnpm exec:*)", "Bash(pnpm run:*)", "Bash(pnpm test:*)"];
|
|
58
|
+
readonly disallow: readonly ["Agent", "WebFetch", "WebSearch"];
|
|
59
|
+
readonly permissionMode: 'acceptEdits';
|
|
60
|
+
readonly tools: readonly ["Bash", "Edit", "Glob", "Grep", "MultiEdit", "Read", "Write"];
|
|
61
|
+
};
|
|
62
|
+
};
|