@knowzai/cli 0.1.0 → 0.2.0
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/assets/portable/.env.example +3 -0
- package/assets/portable/docker-compose.yml +18 -0
- package/assets/portable/releases.json +22 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/base-command.d.ts +21 -2
- package/dist/base-command.d.ts.map +1 -1
- package/dist/base-command.js +47 -4
- package/dist/base-command.js.map +1 -1
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +5 -1
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/auth/status.d.ts +1 -1
- package/dist/commands/auth/status.d.ts.map +1 -1
- package/dist/commands/auth/status.js +4 -0
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/chat.d.ts +5 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +32 -13
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/config/get.d.ts.map +1 -1
- package/dist/commands/config/get.js +3 -1
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/list.d.ts.map +1 -1
- package/dist/commands/config/list.js +12 -4
- package/dist/commands/config/list.js.map +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/export.d.ts +27 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +155 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +27 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +124 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/index/scan.d.ts.map +1 -1
- package/dist/commands/index/scan.js +24 -5
- package/dist/commands/index/scan.js.map +1 -1
- package/dist/commands/knowledge/amend.d.ts +1 -0
- package/dist/commands/knowledge/amend.d.ts.map +1 -1
- package/dist/commands/knowledge/amend.js +11 -2
- package/dist/commands/knowledge/amend.js.map +1 -1
- package/dist/commands/knowledge/attach.d.ts +19 -0
- package/dist/commands/knowledge/attach.d.ts.map +1 -0
- package/dist/commands/knowledge/attach.js +51 -0
- package/dist/commands/knowledge/attach.js.map +1 -0
- package/dist/commands/knowledge/create.d.ts +9 -1
- package/dist/commands/knowledge/create.d.ts.map +1 -1
- package/dist/commands/knowledge/create.js +26 -4
- package/dist/commands/knowledge/create.js.map +1 -1
- package/dist/commands/knowledge/update.d.ts +1 -0
- package/dist/commands/knowledge/update.d.ts.map +1 -1
- package/dist/commands/knowledge/update.js +4 -1
- package/dist/commands/knowledge/update.js.map +1 -1
- package/dist/commands/login.d.ts +19 -3
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +113 -64
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +35 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/mcp/serve.d.ts +16 -0
- package/dist/commands/mcp/serve.d.ts.map +1 -0
- package/dist/commands/mcp/serve.js +50 -0
- package/dist/commands/mcp/serve.js.map +1 -0
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/commands/menu.js +39 -3
- package/dist/commands/menu.js.map +1 -1
- package/dist/commands/peer/accept-fingerprint.d.ts +17 -0
- package/dist/commands/peer/accept-fingerprint.d.ts.map +1 -0
- package/dist/commands/peer/accept-fingerprint.js +35 -0
- package/dist/commands/peer/accept-fingerprint.js.map +1 -0
- package/dist/commands/peer/add.d.ts +22 -0
- package/dist/commands/peer/add.d.ts.map +1 -0
- package/dist/commands/peer/add.js +44 -0
- package/dist/commands/peer/add.js.map +1 -0
- package/dist/commands/peer/cancel.d.ts +13 -0
- package/dist/commands/peer/cancel.d.ts.map +1 -0
- package/dist/commands/peer/cancel.js +20 -0
- package/dist/commands/peer/cancel.js.map +1 -0
- package/dist/commands/peer/link.d.ts +16 -0
- package/dist/commands/peer/link.d.ts.map +1 -0
- package/dist/commands/peer/link.js +32 -0
- package/dist/commands/peer/link.js.map +1 -0
- package/dist/commands/peer/links.d.ts +12 -0
- package/dist/commands/peer/links.d.ts.map +1 -0
- package/dist/commands/peer/links.js +25 -0
- package/dist/commands/peer/links.js.map +1 -0
- package/dist/commands/peer/list.d.ts +10 -0
- package/dist/commands/peer/list.d.ts.map +1 -0
- package/dist/commands/peer/list.js +22 -0
- package/dist/commands/peer/list.js.map +1 -0
- package/dist/commands/peer/pull.d.ts +19 -0
- package/dist/commands/peer/pull.d.ts.map +1 -0
- package/dist/commands/peer/pull.js +30 -0
- package/dist/commands/peer/pull.js.map +1 -0
- package/dist/commands/peer/push.d.ts +19 -0
- package/dist/commands/peer/push.d.ts.map +1 -0
- package/dist/commands/peer/push.js +30 -0
- package/dist/commands/peer/push.js.map +1 -0
- package/dist/commands/peer/remove.d.ts +12 -0
- package/dist/commands/peer/remove.d.ts.map +1 -0
- package/dist/commands/peer/remove.js +19 -0
- package/dist/commands/peer/remove.js.map +1 -0
- package/dist/commands/peer/rotate-key.d.ts +14 -0
- package/dist/commands/peer/rotate-key.d.ts.map +1 -0
- package/dist/commands/peer/rotate-key.js +26 -0
- package/dist/commands/peer/rotate-key.js.map +1 -0
- package/dist/commands/peer/run.d.ts +13 -0
- package/dist/commands/peer/run.d.ts.map +1 -0
- package/dist/commands/peer/run.js +31 -0
- package/dist/commands/peer/run.js.map +1 -0
- package/dist/commands/peer/runs.d.ts +15 -0
- package/dist/commands/peer/runs.d.ts.map +1 -0
- package/dist/commands/peer/runs.js +32 -0
- package/dist/commands/peer/runs.js.map +1 -0
- package/dist/commands/peer/test.d.ts +13 -0
- package/dist/commands/peer/test.d.ts.map +1 -0
- package/dist/commands/peer/test.js +30 -0
- package/dist/commands/peer/test.js.map +1 -0
- package/dist/commands/peer/unlink.d.ts +13 -0
- package/dist/commands/peer/unlink.d.ts.map +1 -0
- package/dist/commands/peer/unlink.js +20 -0
- package/dist/commands/peer/unlink.js.map +1 -0
- package/dist/commands/pg/status.d.ts.map +1 -1
- package/dist/commands/pg/status.js +6 -3
- package/dist/commands/pg/status.js.map +1 -1
- package/dist/commands/pg/up.d.ts.map +1 -1
- package/dist/commands/pg/up.js +9 -4
- package/dist/commands/pg/up.js.map +1 -1
- package/dist/commands/platform/status.d.ts.map +1 -1
- package/dist/commands/platform/status.js +4 -4
- package/dist/commands/platform/status.js.map +1 -1
- package/dist/commands/profile/purge.d.ts +20 -0
- package/dist/commands/profile/purge.d.ts.map +1 -0
- package/dist/commands/profile/purge.js +43 -0
- package/dist/commands/profile/purge.js.map +1 -0
- package/dist/commands/repo/context.d.ts.map +1 -1
- package/dist/commands/repo/context.js +3 -1
- package/dist/commands/repo/context.js.map +1 -1
- package/dist/commands/repo/graph.d.ts +3 -6
- package/dist/commands/repo/graph.d.ts.map +1 -1
- package/dist/commands/repo/graph.js +24 -40
- package/dist/commands/repo/graph.js.map +1 -1
- package/dist/commands/repo/index/index.d.ts +1 -0
- package/dist/commands/repo/index/index.d.ts.map +1 -1
- package/dist/commands/repo/index/index.js +100 -12
- package/dist/commands/repo/index/index.js.map +1 -1
- package/dist/commands/repo/search.d.ts.map +1 -1
- package/dist/commands/repo/search.js +2 -0
- package/dist/commands/repo/search.js.map +1 -1
- package/dist/commands/repo/setup.d.ts +9 -2
- package/dist/commands/repo/setup.d.ts.map +1 -1
- package/dist/commands/repo/setup.js +84 -8
- package/dist/commands/repo/setup.js.map +1 -1
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +21 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transfer.d.ts +30 -0
- package/dist/commands/transfer.d.ts.map +1 -0
- package/dist/commands/transfer.js +140 -0
- package/dist/commands/transfer.js.map +1 -0
- package/dist/commands/tui.js +1 -1
- package/dist/commands/tui.js.map +1 -1
- package/dist/commands/up.d.ts +5 -2
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +41 -12
- package/dist/commands/up.js.map +1 -1
- package/dist/lib/attach.d.ts +48 -0
- package/dist/lib/attach.d.ts.map +1 -0
- package/dist/lib/attach.js +91 -0
- package/dist/lib/attach.js.map +1 -0
- package/dist/lib/chat-render.d.ts +39 -0
- package/dist/lib/chat-render.d.ts.map +1 -0
- package/dist/lib/chat-render.js +77 -0
- package/dist/lib/chat-render.js.map +1 -0
- package/dist/lib/cmek-guard.d.ts +52 -0
- package/dist/lib/cmek-guard.d.ts.map +1 -0
- package/dist/lib/cmek-guard.js +73 -0
- package/dist/lib/cmek-guard.js.map +1 -0
- package/dist/lib/content.d.ts +7 -0
- package/dist/lib/content.d.ts.map +1 -1
- package/dist/lib/content.js +9 -2
- package/dist/lib/content.js.map +1 -1
- package/dist/lib/credential-purge.d.ts +52 -0
- package/dist/lib/credential-purge.d.ts.map +1 -0
- package/dist/lib/credential-purge.js +37 -0
- package/dist/lib/credential-purge.js.map +1 -0
- package/dist/lib/ingest.d.ts.map +1 -1
- package/dist/lib/ingest.js +7 -3
- package/dist/lib/ingest.js.map +1 -1
- package/dist/lib/local-mcp-server.d.ts +82 -0
- package/dist/lib/local-mcp-server.d.ts.map +1 -0
- package/dist/lib/local-mcp-server.js +252 -0
- package/dist/lib/local-mcp-server.js.map +1 -0
- package/dist/lib/local-mcp-stdio.d.ts +8 -0
- package/dist/lib/local-mcp-stdio.d.ts.map +1 -0
- package/dist/lib/local-mcp-stdio.js +50 -0
- package/dist/lib/local-mcp-stdio.js.map +1 -0
- package/dist/lib/login-guided.d.ts +20 -0
- package/dist/lib/login-guided.d.ts.map +1 -0
- package/dist/lib/login-guided.js +89 -0
- package/dist/lib/login-guided.js.map +1 -0
- package/dist/lib/login.d.ts +58 -12
- package/dist/lib/login.d.ts.map +1 -1
- package/dist/lib/login.js +170 -12
- package/dist/lib/login.js.map +1 -1
- package/dist/lib/onboarding.d.ts +56 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +67 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/peer-command.d.ts +51 -0
- package/dist/lib/peer-command.d.ts.map +1 -0
- package/dist/lib/peer-command.js +120 -0
- package/dist/lib/peer-command.js.map +1 -0
- package/dist/lib/peer-support.d.ts +67 -0
- package/dist/lib/peer-support.d.ts.map +1 -0
- package/dist/lib/peer-support.js +154 -0
- package/dist/lib/peer-support.js.map +1 -0
- package/dist/lib/platform-frontdoor-runtime.d.ts.map +1 -1
- package/dist/lib/platform-frontdoor-runtime.js +4 -0
- package/dist/lib/platform-frontdoor-runtime.js.map +1 -1
- package/dist/lib/platform-frontdoor.d.ts +18 -2
- package/dist/lib/platform-frontdoor.d.ts.map +1 -1
- package/dist/lib/platform-frontdoor.js +148 -9
- package/dist/lib/platform-frontdoor.js.map +1 -1
- package/dist/lib/platform-lifecycle.d.ts +7 -0
- package/dist/lib/platform-lifecycle.d.ts.map +1 -1
- package/dist/lib/platform-lifecycle.js +14 -3
- package/dist/lib/platform-lifecycle.js.map +1 -1
- package/dist/lib/platform-onboarding.d.ts +1 -0
- package/dist/lib/platform-onboarding.d.ts.map +1 -1
- package/dist/lib/platform-onboarding.js +13 -2
- package/dist/lib/platform-onboarding.js.map +1 -1
- package/dist/lib/platform-profile-purge.d.ts +1 -1
- package/dist/lib/platform-profile-purge.d.ts.map +1 -1
- package/dist/lib/platform-profile-purge.js +2 -1
- package/dist/lib/platform-profile-purge.js.map +1 -1
- package/dist/lib/platform-provider-prompt.d.ts +4 -0
- package/dist/lib/platform-provider-prompt.d.ts.map +1 -1
- package/dist/lib/platform-provider-prompt.js +4 -0
- package/dist/lib/platform-provider-prompt.js.map +1 -1
- package/dist/lib/platform-release-manifest.d.ts +14 -0
- package/dist/lib/platform-release-manifest.d.ts.map +1 -1
- package/dist/lib/platform-release-manifest.js +24 -0
- package/dist/lib/platform-release-manifest.js.map +1 -1
- package/dist/lib/portability-shared.d.ts +49 -0
- package/dist/lib/portability-shared.d.ts.map +1 -0
- package/dist/lib/portability-shared.js +220 -0
- package/dist/lib/portability-shared.js.map +1 -0
- package/dist/lib/project-mcp-config.d.ts +14 -0
- package/dist/lib/project-mcp-config.d.ts.map +1 -0
- package/dist/lib/project-mcp-config.js +78 -0
- package/dist/lib/project-mcp-config.js.map +1 -0
- package/dist/lib/release-package-graph.d.ts +154 -0
- package/dist/lib/release-package-graph.d.ts.map +1 -0
- package/dist/lib/release-package-graph.js +249 -0
- package/dist/lib/release-package-graph.js.map +1 -0
- package/dist/lib/repo-binding.d.ts +7 -2
- package/dist/lib/repo-binding.d.ts.map +1 -1
- package/dist/lib/repo-binding.js +131 -18
- package/dist/lib/repo-binding.js.map +1 -1
- package/dist/lib/repo-command-support.d.ts +3 -1
- package/dist/lib/repo-command-support.d.ts.map +1 -1
- package/dist/lib/repo-command-support.js.map +1 -1
- package/dist/lib/repo-local-mcp-backend.d.ts +65 -0
- package/dist/lib/repo-local-mcp-backend.d.ts.map +1 -0
- package/dist/lib/repo-local-mcp-backend.js +288 -0
- package/dist/lib/repo-local-mcp-backend.js.map +1 -0
- package/dist/lib/repo-local-mcp-runtime.d.ts +17 -0
- package/dist/lib/repo-local-mcp-runtime.d.ts.map +1 -0
- package/dist/lib/repo-local-mcp-runtime.js +136 -0
- package/dist/lib/repo-local-mcp-runtime.js.map +1 -0
- package/dist/lib/repo-scope-migration.d.ts +4 -0
- package/dist/lib/repo-scope-migration.d.ts.map +1 -0
- package/dist/lib/repo-scope-migration.js +55 -0
- package/dist/lib/repo-scope-migration.js.map +1 -0
- package/dist/lib/repo-scope.d.ts +9 -0
- package/dist/lib/repo-scope.d.ts.map +1 -0
- package/dist/lib/repo-scope.js +15 -0
- package/dist/lib/repo-scope.js.map +1 -0
- package/dist/lib/safe-file.d.ts +141 -0
- package/dist/lib/safe-file.d.ts.map +1 -0
- package/dist/lib/safe-file.js +296 -0
- package/dist/lib/safe-file.js.map +1 -0
- package/dist/lib/setup-console.d.ts +1 -1
- package/dist/lib/setup-console.d.ts.map +1 -1
- package/dist/lib/setup-console.js +3 -1
- package/dist/lib/setup-console.js.map +1 -1
- package/dist/lib/setup-page.d.ts.map +1 -1
- package/dist/lib/setup-page.js +18 -6
- package/dist/lib/setup-page.js.map +1 -1
- package/dist/lib/setup-plan.d.ts +2 -1
- package/dist/lib/setup-plan.d.ts.map +1 -1
- package/dist/lib/setup-plan.js +9 -2
- package/dist/lib/setup-plan.js.map +1 -1
- package/dist/lib/setup-server.d.ts.map +1 -1
- package/dist/lib/setup-server.js +13 -3
- package/dist/lib/setup-server.js.map +1 -1
- package/dist/lib/sso-login.d.ts +42 -0
- package/dist/lib/sso-login.d.ts.map +1 -0
- package/dist/lib/sso-login.js +135 -0
- package/dist/lib/sso-login.js.map +1 -0
- package/dist/lib/transfer.d.ts +80 -0
- package/dist/lib/transfer.d.ts.map +1 -0
- package/dist/lib/transfer.js +173 -0
- package/dist/lib/transfer.js.map +1 -0
- package/dist/lib/tui.d.ts +0 -6
- package/dist/lib/tui.d.ts.map +1 -1
- package/dist/lib/tui.js +6 -1
- package/dist/lib/tui.js.map +1 -1
- package/dist/lib/ui.js +1 -1
- package/dist/lib/ui.js.map +1 -1
- package/dist/menu/run.d.ts +7 -0
- package/dist/menu/run.d.ts.map +1 -1
- package/dist/menu/run.js +38 -2
- package/dist/menu/run.js.map +1 -1
- package/oclif.manifest.json +3400 -1361
- package/package.json +15 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-scope.d.ts","sourceRoot":"","sources":["../../src/lib/repo-scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,KAAK,oBAAoB,GAAG;IAC1B,wBAAwB,IAAI,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IACvE,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ExitCode, KnowzError } from '@knowzai/core';
|
|
2
|
+
export async function assertRepoScopeReady(store, binding) {
|
|
3
|
+
const pending = await store.getPendingScopeMigration();
|
|
4
|
+
if (pending) {
|
|
5
|
+
const expected = binding.vaultId === pending.oldVaultId ? pending.newVaultId : pending.oldVaultId;
|
|
6
|
+
throw new KnowzError(`Repository scope migration is incomplete (binding=${binding.vaultId}, other=${expected}). ` +
|
|
7
|
+
'Rerun `knowz repo setup --vault <hosted>` before serving, indexing, or searching.', ExitCode.Usage);
|
|
8
|
+
}
|
|
9
|
+
const inventory = await store.scopeInventory();
|
|
10
|
+
const foreign = inventory.vaultIds.filter((vaultId) => vaultId !== binding.vaultId);
|
|
11
|
+
if (foreign.length > 0 || inventory.unscopedItemCount > 0) {
|
|
12
|
+
throw new KnowzError('Repository binding/store scope mismatch. Re-run repository setup or rebuild the local index.', ExitCode.Usage);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=repo-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-scope.js","sourceRoot":"","sources":["../../src/lib/repo-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AASrD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAA2B,EAC3B,OAAmD;IAEnD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,wBAAwB,EAAE,CAAC;IACvD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAClG,MAAM,IAAI,UAAU,CAClB,qDAAqD,OAAO,CAAC,OAAO,WAAW,QAAQ,KAAK;YAC1F,mFAAmF,EACrF,QAAQ,CAAC,KAAK,CACf,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,UAAU,CAClB,8FAA8F,EAC9F,QAAQ,CAAC,KAAK,CACf,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { type Stats } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
/**
|
|
4
|
+
* CLI_SecurityReleaseReadiness H7 — one shared gate for every path the CLI reads
|
|
5
|
+
* on the user's behalf and then ships somewhere durable.
|
|
6
|
+
*
|
|
7
|
+
* Four file-consuming surfaces existed with four different (or absent) checks:
|
|
8
|
+
* `knowledge attach` only asked "is this a regular file?", `knowledge create
|
|
9
|
+
* --file` and `ingest add` asked nothing at all, and `index scan` skipped
|
|
10
|
+
* dotfiles during a directory WALK but happily indexed one named directly.
|
|
11
|
+
* So `knowz ingest add ~/.ssh/id_rsa` or `knowz knowledge create k --file .env`
|
|
12
|
+
* uploaded credentials to the cloud, and a symlink planted in a shared
|
|
13
|
+
* checkout could redirect an otherwise-innocent path at anything readable.
|
|
14
|
+
*
|
|
15
|
+
* Three enforcements, applied uniformly:
|
|
16
|
+
*
|
|
17
|
+
* 1. DENIED PATHS — well-known credential files, matched on the RESOLVED path
|
|
18
|
+
* so a symlink or `..` cannot route around the list.
|
|
19
|
+
* 2. SYMLINKS — rejected outright (`lstat`, not `stat`). A symlink is the
|
|
20
|
+
* mechanism by which a path the user vetted becomes a path they did not.
|
|
21
|
+
* 3. BOUNDED SIZE — a hard ceiling, so a multi-gigabyte or pseudo-infinite file
|
|
22
|
+
* cannot be read into memory in one `readFileSync`.
|
|
23
|
+
*
|
|
24
|
+
* A check that only inspects a PATH is advisory: between the `lstat` that
|
|
25
|
+
* approved it and the `readFileSync` that consumed it, the path can be replaced
|
|
26
|
+
* with a symlink to anything readable. So the reading surfaces do not re-resolve
|
|
27
|
+
* the path at all — `openSafeFile`/`readSafeFile` open ONCE with `O_NOFOLLOW`,
|
|
28
|
+
* `fstat` that descriptor, and consume that same descriptor. The file that was
|
|
29
|
+
* judged is the file that is read. (Same shape as the indexer's own read loop,
|
|
30
|
+
* `packages/indexer/src/indexer.ts`.)
|
|
31
|
+
*
|
|
32
|
+
* This gate fails CLOSED and deliberately ships no override flag: nothing in the
|
|
33
|
+
* established UX depends on ingesting a credential file, and an `--allow-secrets`
|
|
34
|
+
* escape hatch would be a permanent invitation to do exactly the thing the gate
|
|
35
|
+
* exists to prevent. Users who genuinely need a secret file in a vault can copy
|
|
36
|
+
* it to a non-denied path, which is an explicit, auditable act.
|
|
37
|
+
*/
|
|
38
|
+
/**
|
|
39
|
+
* Ceiling for paths read WHOLE into memory (`readFileSync`) — knowledge
|
|
40
|
+
* `--file`, `ingest add`, `index scan`. Matches the indexer's own `maxFileBytes`
|
|
41
|
+
* so the three text surfaces agree on what "too big to hold" means.
|
|
42
|
+
*/
|
|
43
|
+
export declare const MAX_SAFE_TEXT_BYTES = 1000000;
|
|
44
|
+
/**
|
|
45
|
+
* Ceiling for paths STREAMED to the cloud (`knowledge attach`). The uploader
|
|
46
|
+
* reads at the server-dictated chunk size, so this is not a memory bound — it is
|
|
47
|
+
* a sanity ceiling that stops a runaway or pseudo-infinite file (a device node
|
|
48
|
+
* that stats as huge, a sparse multi-terabyte file) from becoming an unbounded
|
|
49
|
+
* upload. Deliberately far above any real attachment.
|
|
50
|
+
*/
|
|
51
|
+
export declare const MAX_SAFE_UPLOAD_BYTES: number;
|
|
52
|
+
/** Back-compat alias for the in-memory ceiling. */
|
|
53
|
+
export declare const MAX_SAFE_FILE_BYTES = 1000000;
|
|
54
|
+
export interface SafeFileOptions {
|
|
55
|
+
/** Override the size ceiling (bytes). */
|
|
56
|
+
maxBytes?: number;
|
|
57
|
+
/** Label used in the error message, e.g. `knowledge attach`. */
|
|
58
|
+
operation?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface SafeFileRejection {
|
|
61
|
+
path: string;
|
|
62
|
+
reason: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Classify one path. Returns a rejection reason, or undefined when the path is
|
|
66
|
+
* safe to read. Never throws — callers aggregate so every offender is named.
|
|
67
|
+
*/
|
|
68
|
+
export declare function checkSafeFile(path: string, opts?: SafeFileOptions): SafeFileRejection | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Gate a batch of paths. Throws a single `KnowzError` naming EVERY offender and
|
|
71
|
+
* why, so a user with ten files does not discover the problems one run at a time.
|
|
72
|
+
*
|
|
73
|
+
* This is the BATCH pre-flight — it reports every offender before any work
|
|
74
|
+
* starts. It is not, on its own, the thing that makes a read safe: a path
|
|
75
|
+
* approved here can be swapped before it is consumed. Every surface that then
|
|
76
|
+
* READS the bytes must go through `openSafeFile`/`readSafeFile`.
|
|
77
|
+
*/
|
|
78
|
+
export declare function assertSafeFiles(paths: readonly string[], opts?: SafeFileOptions): void;
|
|
79
|
+
/** An open, policy-approved descriptor. The caller owns closing `fd`. */
|
|
80
|
+
export interface SafeFileHandle {
|
|
81
|
+
/** Open descriptor, already judged. Read from THIS — never re-open the path. */
|
|
82
|
+
fd: number;
|
|
83
|
+
/** `fstat` of the open descriptor, so size/mtime describe the judged file. */
|
|
84
|
+
stat: Stats;
|
|
85
|
+
/** The resolved path the descriptor was opened from (for messages only). */
|
|
86
|
+
path: string;
|
|
87
|
+
}
|
|
88
|
+
/** True only when Node can bind policy to the opened final path component. */
|
|
89
|
+
export declare function supportsRaceResistantSafeOpen(platform?: NodeJS.Platform): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Open a path under the full policy and hand back the OPEN DESCRIPTOR.
|
|
92
|
+
*
|
|
93
|
+
* The name policy is applied to the resolved path first (cheap, and it keeps
|
|
94
|
+
* the credential list authoritative), then the file is opened exactly once with
|
|
95
|
+
* `O_NOFOLLOW` and judged by `fstat` on that descriptor. Nothing after this
|
|
96
|
+
* point re-resolves the path, so there is no window in which the approved file
|
|
97
|
+
* and the consumed file can differ.
|
|
98
|
+
*
|
|
99
|
+
* Throws the same `KnowzError` shape as `assertSafeFiles`. The caller MUST
|
|
100
|
+
* `closeSync(handle.fd)`; `readSafeFile` does that for you.
|
|
101
|
+
*/
|
|
102
|
+
export declare function openSafeFile(path: string, opts?: SafeFileOptions): SafeFileHandle;
|
|
103
|
+
/** Content plus the `fstat` of the descriptor it was read from. */
|
|
104
|
+
export interface SafeFileContent {
|
|
105
|
+
content: string;
|
|
106
|
+
stat: Stats;
|
|
107
|
+
path: string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Read a whole file under the policy, from the descriptor that was judged.
|
|
111
|
+
*
|
|
112
|
+
* Returns the `fstat` alongside the content so callers that record size/mtime
|
|
113
|
+
* (e.g. `ingest add`'s file state) describe the bytes they actually read rather
|
|
114
|
+
* than whatever a later `statSync` of the path would report.
|
|
115
|
+
*/
|
|
116
|
+
export declare function readSafeFile(path: string, opts?: SafeFileOptions): SafeFileContent;
|
|
117
|
+
/**
|
|
118
|
+
* Re-run the open-time policy and immediately release the descriptor.
|
|
119
|
+
*
|
|
120
|
+
* A last-moment re-judgement for surfaces that can only hand a PATH to whatever
|
|
121
|
+
* consumes the bytes. It catches a swap that happened after the batch
|
|
122
|
+
* pre-flight, but it does NOT close the race — the consumer still re-opens the
|
|
123
|
+
* name afterwards. Prefer `openSafeFile` and pass the descriptor along;
|
|
124
|
+
* `knowledge attach` does exactly that (`lib/attach.ts` → `FilesApi.upload`'s
|
|
125
|
+
* `fd`). Reach for this only where handing a descriptor over is impossible.
|
|
126
|
+
*/
|
|
127
|
+
export declare function assertSafeFileAtOpen(path: string, opts?: SafeFileOptions): Stats;
|
|
128
|
+
/**
|
|
129
|
+
* Directory-walk predicate for `index scan`: the same policy, expressed as a
|
|
130
|
+
* skip decision rather than an error, because a walk over a large tree should
|
|
131
|
+
* step over a denied file instead of aborting the whole scan.
|
|
132
|
+
*/
|
|
133
|
+
export declare function isSafeToIndex(path: string): boolean;
|
|
134
|
+
/** Exposed for tests and for callers that want to explain the policy. */
|
|
135
|
+
export declare const SAFE_FILE_POLICY: {
|
|
136
|
+
readonly deniedBasenames: Set<string>;
|
|
137
|
+
readonly deniedExtensions: Set<string>;
|
|
138
|
+
readonly deniedDirectorySegments: Set<string>;
|
|
139
|
+
readonly homeDir: typeof homedir;
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=safe-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-file.d.ts","sourceRoot":"","sources":["../../src/lib/safe-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,UAAY,CAAC;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,QAAyB,CAAC;AAE5D,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,UAAsB,CAAC;AA8CvD,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AA6CD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,iBAAiB,GAAG,SAAS,CA0BrG;AAYD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,GAAE,eAAoB,GAAG,IAAI,CAI1F;AAED,yEAAyE;AACzE,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAC;IACX,8EAA8E;IAC9E,IAAI,EAAE,KAAK,CAAC;IACZ,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;CACd;AASD,8EAA8E;AAC9E,wBAAgB,6BAA6B,CAAC,QAAQ,kBAAmB,GAAG,OAAO,CAElF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,cAAc,CAwCrF;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,eAAe,CAOtF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,KAAK,CAIpF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,yEAAyE;AACzE,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAC"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { closeSync, constants as fsConstants, fstatSync, lstatSync, openSync, readFileSync, realpathSync, } from 'node:fs';
|
|
2
|
+
import { basename, isAbsolute, resolve, sep } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { ExitCode, KnowzError } from '@knowzai/core';
|
|
5
|
+
/**
|
|
6
|
+
* CLI_SecurityReleaseReadiness H7 — one shared gate for every path the CLI reads
|
|
7
|
+
* on the user's behalf and then ships somewhere durable.
|
|
8
|
+
*
|
|
9
|
+
* Four file-consuming surfaces existed with four different (or absent) checks:
|
|
10
|
+
* `knowledge attach` only asked "is this a regular file?", `knowledge create
|
|
11
|
+
* --file` and `ingest add` asked nothing at all, and `index scan` skipped
|
|
12
|
+
* dotfiles during a directory WALK but happily indexed one named directly.
|
|
13
|
+
* So `knowz ingest add ~/.ssh/id_rsa` or `knowz knowledge create k --file .env`
|
|
14
|
+
* uploaded credentials to the cloud, and a symlink planted in a shared
|
|
15
|
+
* checkout could redirect an otherwise-innocent path at anything readable.
|
|
16
|
+
*
|
|
17
|
+
* Three enforcements, applied uniformly:
|
|
18
|
+
*
|
|
19
|
+
* 1. DENIED PATHS — well-known credential files, matched on the RESOLVED path
|
|
20
|
+
* so a symlink or `..` cannot route around the list.
|
|
21
|
+
* 2. SYMLINKS — rejected outright (`lstat`, not `stat`). A symlink is the
|
|
22
|
+
* mechanism by which a path the user vetted becomes a path they did not.
|
|
23
|
+
* 3. BOUNDED SIZE — a hard ceiling, so a multi-gigabyte or pseudo-infinite file
|
|
24
|
+
* cannot be read into memory in one `readFileSync`.
|
|
25
|
+
*
|
|
26
|
+
* A check that only inspects a PATH is advisory: between the `lstat` that
|
|
27
|
+
* approved it and the `readFileSync` that consumed it, the path can be replaced
|
|
28
|
+
* with a symlink to anything readable. So the reading surfaces do not re-resolve
|
|
29
|
+
* the path at all — `openSafeFile`/`readSafeFile` open ONCE with `O_NOFOLLOW`,
|
|
30
|
+
* `fstat` that descriptor, and consume that same descriptor. The file that was
|
|
31
|
+
* judged is the file that is read. (Same shape as the indexer's own read loop,
|
|
32
|
+
* `packages/indexer/src/indexer.ts`.)
|
|
33
|
+
*
|
|
34
|
+
* This gate fails CLOSED and deliberately ships no override flag: nothing in the
|
|
35
|
+
* established UX depends on ingesting a credential file, and an `--allow-secrets`
|
|
36
|
+
* escape hatch would be a permanent invitation to do exactly the thing the gate
|
|
37
|
+
* exists to prevent. Users who genuinely need a secret file in a vault can copy
|
|
38
|
+
* it to a non-denied path, which is an explicit, auditable act.
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* Ceiling for paths read WHOLE into memory (`readFileSync`) — knowledge
|
|
42
|
+
* `--file`, `ingest add`, `index scan`. Matches the indexer's own `maxFileBytes`
|
|
43
|
+
* so the three text surfaces agree on what "too big to hold" means.
|
|
44
|
+
*/
|
|
45
|
+
export const MAX_SAFE_TEXT_BYTES = 1_000_000;
|
|
46
|
+
/**
|
|
47
|
+
* Ceiling for paths STREAMED to the cloud (`knowledge attach`). The uploader
|
|
48
|
+
* reads at the server-dictated chunk size, so this is not a memory bound — it is
|
|
49
|
+
* a sanity ceiling that stops a runaway or pseudo-infinite file (a device node
|
|
50
|
+
* that stats as huge, a sparse multi-terabyte file) from becoming an unbounded
|
|
51
|
+
* upload. Deliberately far above any real attachment.
|
|
52
|
+
*/
|
|
53
|
+
export const MAX_SAFE_UPLOAD_BYTES = 2 * 1024 * 1024 * 1024;
|
|
54
|
+
/** Back-compat alias for the in-memory ceiling. */
|
|
55
|
+
export const MAX_SAFE_FILE_BYTES = MAX_SAFE_TEXT_BYTES;
|
|
56
|
+
/**
|
|
57
|
+
* Exact basenames that are credential material by convention. Matched
|
|
58
|
+
* case-insensitively on the resolved path's final segment.
|
|
59
|
+
*/
|
|
60
|
+
const DENIED_BASENAMES = new Set([
|
|
61
|
+
'.env',
|
|
62
|
+
'.envrc',
|
|
63
|
+
'.netrc',
|
|
64
|
+
'_netrc',
|
|
65
|
+
'.pgpass',
|
|
66
|
+
'.npmrc',
|
|
67
|
+
'.yarnrc',
|
|
68
|
+
'.git-credentials',
|
|
69
|
+
'.htpasswd',
|
|
70
|
+
'credentials',
|
|
71
|
+
'credentials.json',
|
|
72
|
+
'id_rsa',
|
|
73
|
+
'id_dsa',
|
|
74
|
+
'id_ecdsa',
|
|
75
|
+
'id_ed25519',
|
|
76
|
+
'known_hosts',
|
|
77
|
+
'authorized_keys',
|
|
78
|
+
'secring.gpg',
|
|
79
|
+
'shadow',
|
|
80
|
+
'terraform.tfstate',
|
|
81
|
+
]);
|
|
82
|
+
/** Extensions that carry private-key or certificate material. */
|
|
83
|
+
const DENIED_EXTENSIONS = new Set(['pem', 'key', 'p12', 'pfx', 'jks', 'keystore', 'asc', 'ppk']);
|
|
84
|
+
/**
|
|
85
|
+
* Directory segments whose contents are credential stores. Matched as a full
|
|
86
|
+
* path segment on the resolved path, so `./my.aws/notes.md` is unaffected.
|
|
87
|
+
*/
|
|
88
|
+
const DENIED_DIRECTORY_SEGMENTS = new Set([
|
|
89
|
+
'.ssh',
|
|
90
|
+
'.gnupg',
|
|
91
|
+
'.aws',
|
|
92
|
+
'.azure',
|
|
93
|
+
'.kube',
|
|
94
|
+
'.docker',
|
|
95
|
+
'.knowz',
|
|
96
|
+
]);
|
|
97
|
+
function deniedReason(resolvedPath) {
|
|
98
|
+
const name = basename(resolvedPath).toLowerCase();
|
|
99
|
+
if (DENIED_BASENAMES.has(name))
|
|
100
|
+
return `"${basename(resolvedPath)}" is a well-known credential file`;
|
|
101
|
+
if (/^secrets?\./i.test(name))
|
|
102
|
+
return `"${basename(resolvedPath)}" is a secret file`;
|
|
103
|
+
// EVERY `.env.*` is denied — `.env.local`, `.env.production`, and the
|
|
104
|
+
// "template" spellings alike. The redaction policy (`lib/redact.ts`) already
|
|
105
|
+
// treats the whole family as sensitive, and a per-name allowlist is exactly
|
|
106
|
+
// the wrong shape here: `.env.example` files routinely accumulate real values
|
|
107
|
+
// as people edit in place, and one allowed spelling is all an attacker needs
|
|
108
|
+
// (`cp .env .env.sample`). Uniformity is the property worth having; a genuine
|
|
109
|
+
// template can be copied to a non-`.env` name, which is an explicit act.
|
|
110
|
+
if (name.startsWith('.env.'))
|
|
111
|
+
return `"${basename(resolvedPath)}" is an environment secret file`;
|
|
112
|
+
const ext = name.includes('.') ? name.slice(name.lastIndexOf('.') + 1) : '';
|
|
113
|
+
if (ext && DENIED_EXTENSIONS.has(ext))
|
|
114
|
+
return `".${ext}" files carry private-key or certificate material`;
|
|
115
|
+
const segments = resolvedPath.split(sep).slice(0, -1);
|
|
116
|
+
for (const segment of segments) {
|
|
117
|
+
if (DENIED_DIRECTORY_SEGMENTS.has(segment.toLowerCase())) {
|
|
118
|
+
return `it lives under a credential directory ("${segment}")`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Resolve a path for policy checks WITHOUT following the final symlink — the
|
|
125
|
+
* link itself is rejected, so `realpath` is only used to normalise `..` and
|
|
126
|
+
* intermediate links for the denied-path match.
|
|
127
|
+
*/
|
|
128
|
+
function policyPath(path) {
|
|
129
|
+
const absolute = isAbsolute(path) ? path : resolve(process.cwd(), path);
|
|
130
|
+
try {
|
|
131
|
+
// realpath the PARENT so intermediate symlinks are normalised while the
|
|
132
|
+
// final component stays exactly what the user named.
|
|
133
|
+
const parent = resolve(absolute, '..');
|
|
134
|
+
return resolve(realpathSync(parent), basename(absolute));
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return absolute;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Classify one path. Returns a rejection reason, or undefined when the path is
|
|
142
|
+
* safe to read. Never throws — callers aggregate so every offender is named.
|
|
143
|
+
*/
|
|
144
|
+
export function checkSafeFile(path, opts = {}) {
|
|
145
|
+
const maxBytes = opts.maxBytes ?? MAX_SAFE_TEXT_BYTES;
|
|
146
|
+
const resolved = policyPath(path);
|
|
147
|
+
let stat;
|
|
148
|
+
try {
|
|
149
|
+
stat = lstatSync(resolved);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return { path, reason: 'it does not exist or is not readable' };
|
|
153
|
+
}
|
|
154
|
+
if (stat.isSymbolicLink()) {
|
|
155
|
+
return {
|
|
156
|
+
path,
|
|
157
|
+
reason: 'it is a symbolic link (a link can point somewhere you did not intend; pass the real path)',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
if (!stat.isFile())
|
|
161
|
+
return { path, reason: 'it is not a regular file' };
|
|
162
|
+
const denied = deniedReason(resolved);
|
|
163
|
+
if (denied)
|
|
164
|
+
return { path, reason: denied };
|
|
165
|
+
if (stat.size > maxBytes) {
|
|
166
|
+
return { path, reason: `it is ${stat.size} bytes, over the ${maxBytes}-byte limit for a single file` };
|
|
167
|
+
}
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
/** One message shape for every refusal, whether it names one path or ten. */
|
|
171
|
+
function refusal(rejections, opts) {
|
|
172
|
+
const operation = opts.operation ? `${opts.operation}: ` : '';
|
|
173
|
+
const detail = rejections.map((r) => ` ${r.path} — ${r.reason}`).join('\n');
|
|
174
|
+
return new KnowzError(`${operation}refusing to read ${rejections.length} path(s):\n${detail}`, ExitCode.Usage);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Gate a batch of paths. Throws a single `KnowzError` naming EVERY offender and
|
|
178
|
+
* why, so a user with ten files does not discover the problems one run at a time.
|
|
179
|
+
*
|
|
180
|
+
* This is the BATCH pre-flight — it reports every offender before any work
|
|
181
|
+
* starts. It is not, on its own, the thing that makes a read safe: a path
|
|
182
|
+
* approved here can be swapped before it is consumed. Every surface that then
|
|
183
|
+
* READS the bytes must go through `openSafeFile`/`readSafeFile`.
|
|
184
|
+
*/
|
|
185
|
+
export function assertSafeFiles(paths, opts = {}) {
|
|
186
|
+
const rejections = paths.map((p) => checkSafeFile(p, opts)).filter((r) => Boolean(r));
|
|
187
|
+
if (!rejections.length)
|
|
188
|
+
return;
|
|
189
|
+
throw refusal(rejections, opts);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* `O_NOFOLLOW` makes the kernel refuse to open a symlink at all, which closes
|
|
193
|
+
* the check-then-open race for the final path component. Windows has no such
|
|
194
|
+
* flag; there `checkSafeFile`'s `lstat` remains the (advisory) symlink guard.
|
|
195
|
+
*/
|
|
196
|
+
const O_NOFOLLOW = fsConstants.O_NOFOLLOW ?? 0;
|
|
197
|
+
/** True only when Node can bind policy to the opened final path component. */
|
|
198
|
+
export function supportsRaceResistantSafeOpen(platform = process.platform) {
|
|
199
|
+
return platform !== 'win32' && O_NOFOLLOW !== 0;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Open a path under the full policy and hand back the OPEN DESCRIPTOR.
|
|
203
|
+
*
|
|
204
|
+
* The name policy is applied to the resolved path first (cheap, and it keeps
|
|
205
|
+
* the credential list authoritative), then the file is opened exactly once with
|
|
206
|
+
* `O_NOFOLLOW` and judged by `fstat` on that descriptor. Nothing after this
|
|
207
|
+
* point re-resolves the path, so there is no window in which the approved file
|
|
208
|
+
* and the consumed file can differ.
|
|
209
|
+
*
|
|
210
|
+
* Throws the same `KnowzError` shape as `assertSafeFiles`. The caller MUST
|
|
211
|
+
* `closeSync(handle.fd)`; `readSafeFile` does that for you.
|
|
212
|
+
*/
|
|
213
|
+
export function openSafeFile(path, opts = {}) {
|
|
214
|
+
const maxBytes = opts.maxBytes ?? MAX_SAFE_TEXT_BYTES;
|
|
215
|
+
const resolved = policyPath(path);
|
|
216
|
+
const denied = deniedReason(resolved);
|
|
217
|
+
if (denied)
|
|
218
|
+
throw refusal([{ path, reason: denied }], opts);
|
|
219
|
+
let fd;
|
|
220
|
+
try {
|
|
221
|
+
fd = openSync(resolved, fsConstants.O_RDONLY | O_NOFOLLOW);
|
|
222
|
+
}
|
|
223
|
+
catch (e) {
|
|
224
|
+
const code = e.code;
|
|
225
|
+
// ELOOP (Linux/macOS) / EMLINK (some BSDs) is O_NOFOLLOW refusing a symlink.
|
|
226
|
+
if (code === 'ELOOP' || code === 'EMLINK') {
|
|
227
|
+
throw refusal([{ path, reason: 'it is a symbolic link (a link can point somewhere you did not intend; pass the real path)' }], opts);
|
|
228
|
+
}
|
|
229
|
+
if (code === 'EISDIR')
|
|
230
|
+
throw refusal([{ path, reason: 'it is not a regular file' }], opts);
|
|
231
|
+
throw refusal([{ path, reason: 'it does not exist or is not readable' }], opts);
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
const stat = fstatSync(fd);
|
|
235
|
+
// A symlink cannot reach here on a platform with O_NOFOLLOW; on one without
|
|
236
|
+
// it, `fstat` still catches the non-regular targets that matter (device
|
|
237
|
+
// nodes, FIFOs, directories).
|
|
238
|
+
if (!stat.isFile())
|
|
239
|
+
throw refusal([{ path, reason: 'it is not a regular file' }], opts);
|
|
240
|
+
if (stat.size > maxBytes) {
|
|
241
|
+
throw refusal([{ path, reason: `it is ${stat.size} bytes, over the ${maxBytes}-byte limit for a single file` }], opts);
|
|
242
|
+
}
|
|
243
|
+
return { fd, stat, path: resolved };
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
closeSync(fd);
|
|
247
|
+
throw e;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Read a whole file under the policy, from the descriptor that was judged.
|
|
252
|
+
*
|
|
253
|
+
* Returns the `fstat` alongside the content so callers that record size/mtime
|
|
254
|
+
* (e.g. `ingest add`'s file state) describe the bytes they actually read rather
|
|
255
|
+
* than whatever a later `statSync` of the path would report.
|
|
256
|
+
*/
|
|
257
|
+
export function readSafeFile(path, opts = {}) {
|
|
258
|
+
const handle = openSafeFile(path, opts);
|
|
259
|
+
try {
|
|
260
|
+
return { content: readFileSync(handle.fd, 'utf8'), stat: handle.stat, path: handle.path };
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
closeSync(handle.fd);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Re-run the open-time policy and immediately release the descriptor.
|
|
268
|
+
*
|
|
269
|
+
* A last-moment re-judgement for surfaces that can only hand a PATH to whatever
|
|
270
|
+
* consumes the bytes. It catches a swap that happened after the batch
|
|
271
|
+
* pre-flight, but it does NOT close the race — the consumer still re-opens the
|
|
272
|
+
* name afterwards. Prefer `openSafeFile` and pass the descriptor along;
|
|
273
|
+
* `knowledge attach` does exactly that (`lib/attach.ts` → `FilesApi.upload`'s
|
|
274
|
+
* `fd`). Reach for this only where handing a descriptor over is impossible.
|
|
275
|
+
*/
|
|
276
|
+
export function assertSafeFileAtOpen(path, opts = {}) {
|
|
277
|
+
const handle = openSafeFile(path, opts);
|
|
278
|
+
closeSync(handle.fd);
|
|
279
|
+
return handle.stat;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Directory-walk predicate for `index scan`: the same policy, expressed as a
|
|
283
|
+
* skip decision rather than an error, because a walk over a large tree should
|
|
284
|
+
* step over a denied file instead of aborting the whole scan.
|
|
285
|
+
*/
|
|
286
|
+
export function isSafeToIndex(path) {
|
|
287
|
+
return checkSafeFile(path) === undefined;
|
|
288
|
+
}
|
|
289
|
+
/** Exposed for tests and for callers that want to explain the policy. */
|
|
290
|
+
export const SAFE_FILE_POLICY = {
|
|
291
|
+
deniedBasenames: DENIED_BASENAMES,
|
|
292
|
+
deniedExtensions: DENIED_EXTENSIONS,
|
|
293
|
+
deniedDirectorySegments: DENIED_DIRECTORY_SEGMENTS,
|
|
294
|
+
homeDir: homedir,
|
|
295
|
+
};
|
|
296
|
+
//# sourceMappingURL=safe-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-file.js","sourceRoot":"","sources":["../../src/lib/safe-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-console.d.ts","sourceRoot":"","sources":["../../src/lib/setup-console.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAQrE,OAAO,EAAqD,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC9G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EACL,cAAc,EACd,cAAc,EAEd,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-console.d.ts","sourceRoot":"","sources":["../../src/lib/setup-console.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAQrE,OAAO,EAAqD,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC9G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EACL,cAAc,EACd,cAAc,EAEd,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAC3C,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,OAAO,cAAc,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,cAAc,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtF,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnD;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,OAAO,UAAU,CAAC,KAAwB,GAClD,OAAO,CAAC,kBAAkB,CAAC,CAe7B;AAsDD,8FAA8F;AAC9F,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,GAAE,wBAA6B,GAC1C,OAAO,CAAC,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAiH5C"}
|
|
@@ -107,7 +107,9 @@ export async function launchSetupConsole(options, dependencies = {}) {
|
|
|
107
107
|
ports,
|
|
108
108
|
storage: detectedState?.storage,
|
|
109
109
|
components,
|
|
110
|
-
|
|
110
|
+
// §2026-08-31 R-U4: straight seed — a detected preloaded (possibly air-gapped)
|
|
111
|
+
// stack must never be silently coerced to pulling. Explicit flag still wins.
|
|
112
|
+
imageMode: options.imageMode ?? detectedState?.imageMode ?? 'pull',
|
|
111
113
|
account: options.account,
|
|
112
114
|
};
|
|
113
115
|
const formSchema = deriveSetupFormSchema(loadRequiredEnvByPreset(), FIELD_MAP);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-console.js","sourceRoot":"","sources":["../../src/lib/setup-console.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"setup-console.js","sourceRoot":"","sources":["../../src/lib/setup-console.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-page.d.ts","sourceRoot":"","sources":["../../src/lib/setup-page.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-page.d.ts","sourceRoot":"","sources":["../../src/lib/setup-page.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AAGvF,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AA0CD,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAinBxD"}
|