@centient/secrets 0.9.0 → 0.10.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.
Files changed (93) hide show
  1. package/README.md +70 -2
  2. package/dist/cli/secrets-cli.d.ts.map +1 -1
  3. package/dist/cli/secrets-cli.js +191 -32
  4. package/dist/cli/secrets-cli.js.map +1 -1
  5. package/dist/crypto/darwin-keychain.d.ts +394 -0
  6. package/dist/crypto/darwin-keychain.d.ts.map +1 -0
  7. package/dist/crypto/darwin-keychain.js +793 -0
  8. package/dist/crypto/darwin-keychain.js.map +1 -0
  9. package/dist/crypto/vault-common.d.ts +55 -12
  10. package/dist/crypto/vault-common.d.ts.map +1 -1
  11. package/dist/crypto/vault-common.js +74 -71
  12. package/dist/crypto/vault-common.js.map +1 -1
  13. package/dist/environment/EnvironmentManager.d.ts.map +1 -1
  14. package/dist/environment/EnvironmentManager.js +5 -10
  15. package/dist/environment/EnvironmentManager.js.map +1 -1
  16. package/dist/index.d.ts +20 -6
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +23 -5
  19. package/dist/index.js.map +1 -1
  20. package/dist/key-providers/keychain-provider.d.ts +30 -2
  21. package/dist/key-providers/keychain-provider.d.ts.map +1 -1
  22. package/dist/key-providers/keychain-provider.js +29 -5
  23. package/dist/key-providers/keychain-provider.js.map +1 -1
  24. package/dist/key-providers/onepassword-provider.d.ts +65 -5
  25. package/dist/key-providers/onepassword-provider.d.ts.map +1 -1
  26. package/dist/key-providers/onepassword-provider.js +159 -67
  27. package/dist/key-providers/onepassword-provider.js.map +1 -1
  28. package/dist/key-providers/op-cli.d.ts +78 -0
  29. package/dist/key-providers/op-cli.d.ts.map +1 -0
  30. package/dist/key-providers/op-cli.js +123 -0
  31. package/dist/key-providers/op-cli.js.map +1 -0
  32. package/dist/key-providers/passphrase-provider.d.ts +20 -0
  33. package/dist/key-providers/passphrase-provider.d.ts.map +1 -1
  34. package/dist/key-providers/passphrase-provider.js +49 -0
  35. package/dist/key-providers/passphrase-provider.js.map +1 -1
  36. package/dist/key-providers/probe.d.ts +46 -0
  37. package/dist/key-providers/probe.d.ts.map +1 -0
  38. package/dist/key-providers/probe.js +70 -0
  39. package/dist/key-providers/probe.js.map +1 -0
  40. package/dist/key-providers/types.d.ts +51 -1
  41. package/dist/key-providers/types.d.ts.map +1 -1
  42. package/dist/platform/agent-detect.d.ts +39 -3
  43. package/dist/platform/agent-detect.d.ts.map +1 -1
  44. package/dist/platform/agent-detect.js +55 -9
  45. package/dist/platform/agent-detect.js.map +1 -1
  46. package/dist/platform/session-context.d.ts +77 -0
  47. package/dist/platform/session-context.d.ts.map +1 -0
  48. package/dist/platform/session-context.js +83 -0
  49. package/dist/platform/session-context.js.map +1 -0
  50. package/dist/secret-state.d.ts +54 -0
  51. package/dist/secret-state.d.ts.map +1 -0
  52. package/dist/secret-state.js +2 -0
  53. package/dist/secret-state.js.map +1 -0
  54. package/dist/vault/session-vault-errors.d.ts +72 -4
  55. package/dist/vault/session-vault-errors.d.ts.map +1 -1
  56. package/dist/vault/session-vault-errors.js +95 -4
  57. package/dist/vault/session-vault-errors.js.map +1 -1
  58. package/dist/vault/session-vault.d.ts +102 -2
  59. package/dist/vault/session-vault.d.ts.map +1 -1
  60. package/dist/vault/session-vault.js +225 -36
  61. package/dist/vault/session-vault.js.map +1 -1
  62. package/dist/vault/types.d.ts +42 -1
  63. package/dist/vault/types.d.ts.map +1 -1
  64. package/dist/vault/types.js.map +1 -1
  65. package/dist/vault/vault-env.d.ts +14 -0
  66. package/dist/vault/vault-env.d.ts.map +1 -1
  67. package/dist/vault/vault-env.js +15 -0
  68. package/dist/vault/vault-env.js.map +1 -1
  69. package/dist/vault/vault-gpg.d.ts +5 -1
  70. package/dist/vault/vault-gpg.d.ts.map +1 -1
  71. package/dist/vault/vault-gpg.js +9 -8
  72. package/dist/vault/vault-gpg.js.map +1 -1
  73. package/dist/vault/vault-libsecret.d.ts +5 -1
  74. package/dist/vault/vault-libsecret.d.ts.map +1 -1
  75. package/dist/vault/vault-libsecret.js +9 -8
  76. package/dist/vault/vault-libsecret.js.map +1 -1
  77. package/dist/vault/vault-onepassword.d.ts +118 -0
  78. package/dist/vault/vault-onepassword.d.ts.map +1 -0
  79. package/dist/vault/vault-onepassword.js +270 -0
  80. package/dist/vault/vault-onepassword.js.map +1 -0
  81. package/dist/vault/vault-utils.d.ts +33 -0
  82. package/dist/vault/vault-utils.d.ts.map +1 -1
  83. package/dist/vault/vault-utils.js +61 -0
  84. package/dist/vault/vault-utils.js.map +1 -1
  85. package/dist/vault/vault-windows.d.ts +5 -1
  86. package/dist/vault/vault-windows.d.ts.map +1 -1
  87. package/dist/vault/vault-windows.js +9 -8
  88. package/dist/vault/vault-windows.js.map +1 -1
  89. package/dist/vault/vault.d.ts +116 -4
  90. package/dist/vault/vault.d.ts.map +1 -1
  91. package/dist/vault/vault.js +251 -12
  92. package/dist/vault/vault.js.map +1 -1
  93. package/package.json +1 -1
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Shared 1Password `op` CLI helper (ADR-004 §6).
3
+ *
4
+ * Two independent layers call `op` for different purposes — `OnePasswordProvider`
5
+ * for the vault *encryption key* (ADR-001) and `OnePasswordVault` for credential
6
+ * *values* (ADR-004) — and before this module each carried its own copy of the
7
+ * availability probe and its own `execFileSync` invocation. One source of truth
8
+ * for how `op` is invoked, how long it may take, and what "available and
9
+ * authenticated" means (P6).
10
+ *
11
+ * No dependency on `@1password/sdk` — `execFileSync` only, matching ADR-001's
12
+ * zero-new-runtime-deps position.
13
+ */
14
+ import { execFileSync } from "node:child_process";
15
+ // =============================================================================
16
+ // Timeouts
17
+ // =============================================================================
18
+ /** Probe calls (`--version`, `account list`) — fast or the CLI is unusable. */
19
+ export const OP_PROBE_TIMEOUT_MS = 5_000;
20
+ /** Metadata reads (`item get`, `item list`) — a network round-trip. */
21
+ export const OP_READ_TIMEOUT_MS = 15_000;
22
+ /** Mutations and secret reads — desktop-app approval may sit in front of these. */
23
+ export const OP_WRITE_TIMEOUT_MS = 30_000;
24
+ /** A failed `op` invocation, with whatever the CLI wrote to stderr. */
25
+ export class OpCliError extends Error {
26
+ args;
27
+ stderr;
28
+ cause;
29
+ constructor(
30
+ /** The argv `op` was called with — never contains secret values. */
31
+ args,
32
+ /** `op`'s stderr, trimmed; empty when the process produced none. */
33
+ stderr,
34
+ /** The underlying spawn/exit error. Narrows `Error.cause` to this value. */
35
+ cause) {
36
+ super(`op ${args.join(" ")} failed${stderr ? `: ${stderr}` : ""}`);
37
+ this.args = args;
38
+ this.stderr = stderr;
39
+ this.cause = cause;
40
+ this.name = "OpCliError";
41
+ Object.setPrototypeOf(this, new.target.prototype);
42
+ }
43
+ /**
44
+ * True when the failure is 1Password reporting the item simply is not there,
45
+ * as opposed to an auth, network, or configuration problem.
46
+ *
47
+ * The distinction is load-bearing for ADR-004 §7: a not-found is a normal
48
+ * `null`/`false` return, while an unexpected failure additionally warrants a
49
+ * one-time stderr warning so a misconfiguration cannot stay silent (P2).
50
+ * `op` has no stable exit code for this, so the message is the only signal.
51
+ */
52
+ get isNotFound() {
53
+ return /(?:not found|isn't an item|no item matching|doesn't exist|item not found)/i.test(this.stderr);
54
+ }
55
+ }
56
+ /**
57
+ * Invoke `op` and return its stdout, trimmed.
58
+ *
59
+ * @param args - argv after the binary. **Never** put a secret value here — pass
60
+ * it via {@link RunOpOptions.input} instead (ADR-004 §4).
61
+ * @throws {@link OpCliError} on spawn failure, non-zero exit, or timeout.
62
+ */
63
+ export function runOp(args, opts = {}) {
64
+ try {
65
+ const out = execFileSync("op", [...args], {
66
+ encoding: "utf8",
67
+ stdio: ["pipe", "pipe", "pipe"],
68
+ timeout: opts.timeoutMs ?? OP_READ_TIMEOUT_MS,
69
+ ...(opts.input !== undefined ? { input: opts.input } : {}),
70
+ });
71
+ return typeof out === "string" ? out.trim() : "";
72
+ }
73
+ catch (err) {
74
+ throw new OpCliError(args, extractStderr(err), err);
75
+ }
76
+ }
77
+ /** Pull stderr off an `execFileSync` failure without assuming its shape. */
78
+ function extractStderr(err) {
79
+ if (typeof err !== "object" || err === null)
80
+ return "";
81
+ const stderr = err.stderr;
82
+ if (typeof stderr === "string")
83
+ return stderr.trim();
84
+ if (Buffer.isBuffer(stderr))
85
+ return stderr.toString("utf8").trim();
86
+ return "";
87
+ }
88
+ // =============================================================================
89
+ // Availability
90
+ // =============================================================================
91
+ /**
92
+ * Whether the `op` CLI is present **and** authenticated.
93
+ *
94
+ * True when the binary is on `PATH` and either `OP_SERVICE_ACCOUNT_TOKEN` is
95
+ * set (headless/CI mode, which needs no further check) or at least one account
96
+ * is configured (desktop app or a prior `op signin`).
97
+ *
98
+ * This answers only "can we talk to 1Password?" — it says nothing about whether
99
+ * a caller *should*. ADR-004's credential backend is opt-in precisely because
100
+ * `op` being installed must never by itself route secrets into 1Password (§1);
101
+ * that selection decision belongs to the caller, not here.
102
+ */
103
+ export function detectOpCli() {
104
+ try {
105
+ runOp(["--version"], { timeoutMs: OP_PROBE_TIMEOUT_MS });
106
+ }
107
+ catch {
108
+ return false;
109
+ }
110
+ if (process.env.OP_SERVICE_ACCOUNT_TOKEN)
111
+ return true;
112
+ try {
113
+ const output = runOp(["account", "list", "--format=json"], {
114
+ timeoutMs: OP_PROBE_TIMEOUT_MS,
115
+ });
116
+ // `op` prints "[]" when no accounts are configured.
117
+ return output !== "[]" && output.length > 2;
118
+ }
119
+ catch {
120
+ return false;
121
+ }
122
+ }
123
+ //# sourceMappingURL=op-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"op-cli.js","sourceRoot":"","sources":["../../src/key-providers/op-cli.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * per-vault salt. The passphrase and derived key are never persisted; only
6
6
  * non-secret KDF metadata plus a verifier are written beside the vault.
7
7
  */
8
+ import type { SecretState } from "../secret-state.js";
8
9
  import type { KeyProvider, KeyProviderError, KeyProviderType } from "./types.js";
9
10
  export declare const PASSPHRASE_METADATA_VERSION = 1;
10
11
  export declare const PASSPHRASE_KDF: "scrypt";
@@ -70,6 +71,25 @@ export declare class PassphraseProvider implements KeyProvider {
70
71
  */
71
72
  setupKey(): Buffer | null;
72
73
  deleteKey(): boolean;
74
+ /**
75
+ * The five-way state of the vault master key (#188), value-free.
76
+ *
77
+ * A passphrase-derived key is not stored anywhere, so what this can honestly
78
+ * answer about is the KDF metadata that makes it derivable at all:
79
+ *
80
+ * - metadata missing → `absent` (nothing to unlock; run `secrets init`);
81
+ * - metadata present and this process has a TTY → `found`, the key is
82
+ * derivable here;
83
+ * - metadata present and there is no TTY → `locked` — present, and this
84
+ * context cannot unlock it because no passphrase prompt can render. That
85
+ * is the same distinction the Keychain backend draws, for the same reason:
86
+ * reporting `absent` to a daemon would say "not configured" about a vault
87
+ * that is configured and merely unreachable from there.
88
+ *
89
+ * Deliberately does not prompt, does not derive, and does not touch
90
+ * `getLastError()` — a probe is a read-only diagnostic.
91
+ */
92
+ probeKey(): SecretState;
73
93
  private readMetadata;
74
94
  private promptForPassphrase;
75
95
  private clearLastError;
@@ -1 +1 @@
1
- {"version":3,"file":"passphrase-provider.d.ts","sourceRoot":"","sources":["../../src/key-providers/passphrase-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AAMpB,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,cAAc,EAAG,QAAiB,CAAC;AAChD,eAAO,MAAM,6BAA6B,EAAG,aAAsB,CAAC;AACpE,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAC5E,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,6BAA6B,QAKzC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,mBAM3C,CAAC;AAMF,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,CAAC,EAAE,MAAM,CAAC;IACV,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,wCAAwC;IACxC,CAAC,EAAE,MAAM,CAAC;IACV,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,2BAA2B,CAAC;IAC5C,GAAG,EAAE,OAAO,cAAc,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,SAAS,EAAE,OAAO,6BAA6B,CAAC;QAChD,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AAElE,MAAM,WAAW,yBAAyB;IACxC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,wEAAwE;IACxE,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAMD,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMxE;AAMD,qBAAa,kBAAmB,YAAW,WAAW;IACpD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,SAAS,CAAiC;gBAEtC,OAAO,GAAE,yBAA8B;IAQnD,yEAAyE;IACzE,MAAM,CAAC,MAAM,IAAI,OAAO;IAIxB,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,YAAY,IAAI,gBAAgB,GAAG,IAAI;IAIvC,MAAM,IAAI,MAAM,GAAG,IAAI;IAmCvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ/B;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IA8DzB,SAAS,IAAI,OAAO;IAcpB,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;CAGrB;AAMD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,mBAAmD,GAC1D,MAAM,CAOR"}
1
+ {"version":3,"file":"passphrase-provider.d.ts","sourceRoot":"","sources":["../../src/key-providers/passphrase-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AAMpB,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,cAAc,EAAG,QAAiB,CAAC;AAChD,eAAO,MAAM,6BAA6B,EAAG,aAAsB,CAAC;AACpE,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAC5E,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,6BAA6B,QAKzC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,mBAM3C,CAAC;AAMF,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,CAAC,EAAE,MAAM,CAAC;IACV,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,wCAAwC;IACxC,CAAC,EAAE,MAAM,CAAC;IACV,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,2BAA2B,CAAC;IAC5C,GAAG,EAAE,OAAO,cAAc,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,SAAS,EAAE,OAAO,6BAA6B,CAAC;QAChD,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AAElE,MAAM,WAAW,yBAAyB;IACxC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,wEAAwE;IACxE,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAMD,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMxE;AAMD,qBAAa,kBAAmB,YAAW,WAAW;IACpD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,SAAS,CAAiC;gBAEtC,OAAO,GAAE,yBAA8B;IAQnD,yEAAyE;IACzE,MAAM,CAAC,MAAM,IAAI,OAAO;IAIxB,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,YAAY,IAAI,gBAAgB,GAAG,IAAI;IAIvC,MAAM,IAAI,MAAM,GAAG,IAAI;IAmCvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ/B;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IA8DzB,SAAS,IAAI,OAAO;IAcpB;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,IAAI,WAAW;IA6BvB,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;CAGrB;AAMD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,mBAAmD,GAC1D,MAAM,CAOR"}
@@ -156,6 +156,55 @@ export class PassphraseProvider {
156
156
  return false;
157
157
  }
158
158
  }
159
+ /**
160
+ * The five-way state of the vault master key (#188), value-free.
161
+ *
162
+ * A passphrase-derived key is not stored anywhere, so what this can honestly
163
+ * answer about is the KDF metadata that makes it derivable at all:
164
+ *
165
+ * - metadata missing → `absent` (nothing to unlock; run `secrets init`);
166
+ * - metadata present and this process has a TTY → `found`, the key is
167
+ * derivable here;
168
+ * - metadata present and there is no TTY → `locked` — present, and this
169
+ * context cannot unlock it because no passphrase prompt can render. That
170
+ * is the same distinction the Keychain backend draws, for the same reason:
171
+ * reporting `absent` to a daemon would say "not configured" about a vault
172
+ * that is configured and merely unreachable from there.
173
+ *
174
+ * Deliberately does not prompt, does not derive, and does not touch
175
+ * `getLastError()` — a probe is a read-only diagnostic.
176
+ */
177
+ probeKey() {
178
+ let raw;
179
+ try {
180
+ raw = readFileSync(this.metadataPath, "utf8");
181
+ }
182
+ catch (err) {
183
+ if (isNotFoundError(err))
184
+ return { kind: "absent" };
185
+ return {
186
+ kind: "failed",
187
+ detail: `Failed to read passphrase metadata at ${this.metadataPath}: ${err instanceof Error ? err.message : String(err)}`,
188
+ };
189
+ }
190
+ let parsed;
191
+ try {
192
+ parsed = JSON.parse(raw);
193
+ }
194
+ catch {
195
+ return {
196
+ kind: "failed",
197
+ detail: `Passphrase metadata at ${this.metadataPath} is not valid JSON.`,
198
+ };
199
+ }
200
+ if (validateMetadata(parsed) === null) {
201
+ return {
202
+ kind: "failed",
203
+ detail: `Passphrase metadata at ${this.metadataPath} is invalid or unsupported.`,
204
+ };
205
+ }
206
+ return process.stdin.isTTY === true ? { kind: "found" } : { kind: "locked" };
207
+ }
159
208
  readMetadata() {
160
209
  let parsed;
161
210
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"passphrase-provider.js","sourceRoot":"","sources":["../../src/key-providers/passphrase-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passphrase-provider.js","sourceRoot":"","sources":["../../src/key-providers/passphrase-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Key-layer state probe (#188).
3
+ *
4
+ * The companion to `probeBackendState()` in `../vault/vault.ts`. That one
5
+ * answers for a credential VALUE in the active `VaultBackend`; this one
6
+ * answers for the vault MASTER KEY in the active `KeyProvider`.
7
+ *
8
+ * Both layers are here because fixing one is half a fix: a credential value
9
+ * that becomes readable from a sessionless context is worthless if the key
10
+ * that decrypts the vault around it is not, and a diagnostic that can only see
11
+ * one layer will confidently report a healthy store while the other layer is
12
+ * dark. ADR-005's amendment to ADR-002 forbids the one-layer fix for exactly
13
+ * this reason.
14
+ *
15
+ * The result is value-free: no variant carries key material.
16
+ */
17
+ import type { SecretState } from "../secret-state.js";
18
+ import type { ResolveKeyProviderOptions } from "./resolve.js";
19
+ import type { KeyProvider, KeyProviderType } from "./types.js";
20
+ /** A value-free answer about the vault master key. */
21
+ export interface KeyStateProbe {
22
+ /** Always `"key"` — distinguishes this from the value-layer probe. */
23
+ layer: "key";
24
+ /** Which provider answered, or null when none could be resolved. */
25
+ provider: KeyProviderType | null;
26
+ state: SecretState;
27
+ }
28
+ /**
29
+ * Probe a specific provider's master-key state.
30
+ *
31
+ * A provider that does not implement `probeKey()` yields `not-applicable` with
32
+ * the provider name in its reason — never a guess, and never `absent`.
33
+ * Guessing `absent` for a provider that simply cannot answer is the exact
34
+ * collapse this ticket exists to kill: it would report "no key configured"
35
+ * for a key that is present and merely unreachable from here.
36
+ */
37
+ export declare function probeKeyProvider(provider: KeyProvider): KeyStateProbe;
38
+ /**
39
+ * Probe the master key of the provider this process would actually use.
40
+ *
41
+ * When no provider can be resolved at all the state is `failed` carrying the
42
+ * resolver's own message — deliberately not `absent`, which would claim the
43
+ * key is not stored when the truth is that nothing was asked.
44
+ */
45
+ export declare function probeKeyProviderState(options?: ResolveKeyProviderOptions): KeyStateProbe;
46
+ //# sourceMappingURL=probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/key-providers/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE/D,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,KAAK,EAAE,KAAK,CAAC;IACb,oEAAoE;IACpE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,WAAW,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAuBrE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,yBAA8B,GACtC,aAAa,CAUf"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Key-layer state probe (#188).
3
+ *
4
+ * The companion to `probeBackendState()` in `../vault/vault.ts`. That one
5
+ * answers for a credential VALUE in the active `VaultBackend`; this one
6
+ * answers for the vault MASTER KEY in the active `KeyProvider`.
7
+ *
8
+ * Both layers are here because fixing one is half a fix: a credential value
9
+ * that becomes readable from a sessionless context is worthless if the key
10
+ * that decrypts the vault around it is not, and a diagnostic that can only see
11
+ * one layer will confidently report a healthy store while the other layer is
12
+ * dark. ADR-005's amendment to ADR-002 forbids the one-layer fix for exactly
13
+ * this reason.
14
+ *
15
+ * The result is value-free: no variant carries key material.
16
+ */
17
+ import { resolveKeyProvider } from "./resolve.js";
18
+ /**
19
+ * Probe a specific provider's master-key state.
20
+ *
21
+ * A provider that does not implement `probeKey()` yields `not-applicable` with
22
+ * the provider name in its reason — never a guess, and never `absent`.
23
+ * Guessing `absent` for a provider that simply cannot answer is the exact
24
+ * collapse this ticket exists to kill: it would report "no key configured"
25
+ * for a key that is present and merely unreachable from here.
26
+ */
27
+ export function probeKeyProvider(provider) {
28
+ if (typeof provider.probeKey !== "function") {
29
+ return {
30
+ layer: "key",
31
+ provider: provider.name,
32
+ state: {
33
+ kind: "not-applicable",
34
+ reason: `key provider "${provider.name}" cannot report key state without unlocking it`,
35
+ },
36
+ };
37
+ }
38
+ try {
39
+ return { layer: "key", provider: provider.name, state: provider.probeKey() };
40
+ }
41
+ catch (err) {
42
+ return {
43
+ layer: "key",
44
+ provider: provider.name,
45
+ state: {
46
+ kind: "failed",
47
+ detail: err instanceof Error ? err.message : String(err),
48
+ },
49
+ };
50
+ }
51
+ }
52
+ /**
53
+ * Probe the master key of the provider this process would actually use.
54
+ *
55
+ * When no provider can be resolved at all the state is `failed` carrying the
56
+ * resolver's own message — deliberately not `absent`, which would claim the
57
+ * key is not stored when the truth is that nothing was asked.
58
+ */
59
+ export function probeKeyProviderState(options = {}) {
60
+ const resolution = resolveKeyProvider(options);
61
+ if (!resolution.ok) {
62
+ return {
63
+ layer: "key",
64
+ provider: null,
65
+ state: { kind: "failed", detail: resolution.error.message },
66
+ };
67
+ }
68
+ return probeKeyProvider(resolution.provider);
69
+ }
70
+ //# sourceMappingURL=probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/key-providers/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAalD;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAqB;IACpD,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,KAAK,EAAE;gBACL,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,iBAAiB,QAAQ,CAAC,IAAI,gDAAgD;aACvF;SACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC/E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACzD;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAqC,EAAE;IAEvC,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE;SAC5D,CAAC;IACJ,CAAC;IACD,OAAO,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC"}
@@ -8,6 +8,7 @@
8
8
  * All methods return null/false on failure — never throw (consistent
9
9
  * with vault-common.ts conventions).
10
10
  */
11
+ import type { SecretState } from "../secret-state.js";
11
12
  /** Supported key provider backends. */
12
13
  export type KeyProviderType = "keychain" | "1password" | "passphrase";
13
14
  /** Optional diagnostic exposed after a provider returns null/false. */
@@ -58,6 +59,25 @@ export interface KeyProvider {
58
59
  * to surface clear auth failures such as wrong passphrase or non-TTY prompt.
59
60
  */
60
61
  getLastError?(): KeyProviderError | null;
62
+ /**
63
+ * Optional value-free probe of the master key's state (#188).
64
+ *
65
+ * `getKey()` returns `null` for "no key stored" and for "the key is there
66
+ * and this context cannot open it" alike; that collapse is what turns a
67
+ * change of execution context into a silent outage. This answers the two
68
+ * apart, without being able to return any key material.
69
+ *
70
+ * **`found` means `getKey()` would succeed**, not merely that an entry
71
+ * exists somewhere. Presence is not readability, so an implementation must
72
+ * exercise the same access path `getKey()` would and discard what it read.
73
+ *
74
+ * Optional because not every provider can answer honestly: a provider that
75
+ * would have to prompt for a passphrase, or authenticate to a remote vault,
76
+ * should report `not-applicable` (or omit the method) rather than guess.
77
+ * `probeKeyProviderState()` maps an absent implementation to a
78
+ * `not-applicable` with the provider name in its reason.
79
+ */
80
+ probeKey?(): SecretState;
61
81
  }
62
82
  /** 1Password-specific configuration. */
63
83
  export interface OnePasswordConfig {
@@ -66,12 +86,42 @@ export interface OnePasswordConfig {
66
86
  /** 1Password item name (default: "centient-vault-key"). */
67
87
  item?: string;
68
88
  }
89
+ /**
90
+ * 1Password configuration for the **credential-value** backend (ADR-004).
91
+ *
92
+ * Deliberately separate from {@link OnePasswordConfig}, which names the item
93
+ * holding the vault *encryption key* (ADR-001). The two are independent layers:
94
+ * an operator may keep the key in `Private` while credentials live in a shared
95
+ * vault, or use 1Password for one and the Keychain for the other. Overloading a
96
+ * single `vault` field would conflate them.
97
+ */
98
+ export interface OnePasswordBackendConfig {
99
+ /**
100
+ * 1Password vault holding credential values. **Required — no default.**
101
+ *
102
+ * Unlike the key block (which defaults to `"Private"`), guessing here could
103
+ * write credentials into a personal vault the operator never intended, so an
104
+ * unset value under an explicit `backend: "1password"` fails closed.
105
+ */
106
+ vault?: string;
107
+ /** Tag applied to items, and filtered on when listing. Default `"centient"`. */
108
+ tag?: string;
109
+ }
110
+ /** Explicit credential-storage backend selection. */
111
+ export type SecretsBackendType = "1password";
69
112
  /** Global secrets configuration from ~/.centient/config.json. */
70
113
  export interface SecretsConfig {
71
114
  /** Explicit provider choice. Omit for auto-detection. */
72
115
  provider?: KeyProviderType;
73
- /** 1Password-specific settings. */
116
+ /** 1Password-specific settings for the vault-encryption KEY (ADR-001). */
74
117
  onePassword?: OnePasswordConfig;
118
+ /**
119
+ * Explicit credential-storage backend (ADR-004). Omit for the auto-cascade;
120
+ * 1Password is never auto-selected.
121
+ */
122
+ backend?: SecretsBackendType;
123
+ /** Settings for the 1Password credential-VALUE backend (ADR-004). */
124
+ onePasswordBackend?: OnePasswordBackendConfig;
75
125
  }
76
126
  /** Top-level structure of ~/.centient/config.json. */
77
127
  export interface CentientConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/key-providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,uCAAuC;AACvC,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;AAEtE,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B;;;;OAIG;IACH,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;IAExB;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE/B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC;IAErB;;;;;OAKG;IACH,YAAY,CAAC,IAAI,gBAAgB,GAAG,IAAI,CAAC;CAC1C;AAMD,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,mCAAmC;IACnC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/key-providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,uCAAuC;AACvC,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;AAEtE,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B;;;;OAIG;IACH,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;IAExB;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE/B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC;IAErB;;;;;OAKG;IACH,YAAY,CAAC,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAEzC;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,IAAI,WAAW,CAAC;CAC1B;AAMD,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAE7C,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB"}
@@ -2,14 +2,50 @@
2
2
  * Agent Environment Detection
3
3
  *
4
4
  * Detects whether the process is running inside an AI agent session
5
- * (Claude Code, MCP context, etc.). Auth commands that require human
6
- * interaction are blocked in these environments.
5
+ * (Claude Code, MCP subprocess, etc.) by testing the environment markers such
6
+ * a session sets.
7
7
  *
8
- * Shared by: vault.ts, cli, secrets-cli.ts
8
+ * **What this gates (the whole list).** This is the single implementation; the
9
+ * only call sites are:
10
+ *
11
+ * - `cli/secrets-cli.ts` — `runSecrets()` refuses every `centient secrets`
12
+ * subcommand when it returns true, and
13
+ * - `environment/EnvironmentManager.ts` — the environment mutation commands
14
+ * (create / switch / delete-style auth operations).
15
+ *
16
+ * It does **not** gate the programmatic API: `openVault()`, `getCredential()`,
17
+ * `storeCredential()`, and `SessionVault.get()` contain no agent check, and
18
+ * `vault.ts` does not call this function. (An earlier version of this comment
19
+ * claimed it was "shared by vault.ts" — it never was.)
20
+ *
21
+ * **This is a UX guardrail, not a security boundary.** It reads environment
22
+ * variables the calling process itself controls, so any agent can clear them
23
+ * (`env -u CLAUDECODE …`) and walk straight through. Its job is to stop an
24
+ * agent from *accidentally* driving the operator CLI, nothing more. See
25
+ * `docs/threat-model.md` §4.4 and ADR-005 §3, which demotes this check
26
+ * explicitly; repairing the marker names (#189) does not re-promote it.
27
+ *
28
+ * **Marker accuracy matters** precisely because the check is cheap: before
29
+ * #189 it tested `CLAUDE_CODE_ENTRY_POINT` (a misspelling of the real
30
+ * `CLAUDE_CODE_ENTRYPOINT`) and leaned on `CLAUDE_PROJECT_DIR`, which
31
+ * hook-spawned subprocesses get but live interactive sessions do not — so the
32
+ * gate never fired for the sessions it was written for. `tests/agent-detect.test.ts`
33
+ * pins each marker individually so a rename cannot silently disable it again.
9
34
  */
35
+ /**
36
+ * Environment variables whose presence marks an AI agent session.
37
+ *
38
+ * Package-internal (not re-exported from `index.ts`) — exported so tests and
39
+ * the CLI test harnesses clear exactly this set rather than a hand-copied one
40
+ * that can drift.
41
+ */
42
+ export declare const AGENT_ENV_MARKERS: readonly ["CLAUDECODE", "CLAUDE_CODE_ENTRYPOINT", "CLAUDE_PROJECT_DIR", "CLAUDE_CODE_SESSION", "MCP_CONTEXT", "MCP_SERVER_NAME", "ANTHROPIC_API_KEY_SOURCE"];
10
43
  /**
11
44
  * Returns true if the current process appears to be running inside an
12
45
  * AI agent environment (Claude Code, MCP subprocess, etc.).
46
+ *
47
+ * Advisory only — see the module docstring. A false result does not mean "a
48
+ * human is at the keyboard", it means "no marker was found".
13
49
  */
14
50
  export declare function isAgentEnvironment(): boolean;
15
51
  //# sourceMappingURL=agent-detect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-detect.d.ts","sourceRoot":"","sources":["../../src/platform/agent-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAS5C"}
1
+ {"version":3,"file":"agent-detect.d.ts","sourceRoot":"","sources":["../../src/platform/agent-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,8JAepB,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
@@ -2,21 +2,67 @@
2
2
  * Agent Environment Detection
3
3
  *
4
4
  * Detects whether the process is running inside an AI agent session
5
- * (Claude Code, MCP context, etc.). Auth commands that require human
6
- * interaction are blocked in these environments.
5
+ * (Claude Code, MCP subprocess, etc.) by testing the environment markers such
6
+ * a session sets.
7
7
  *
8
- * Shared by: vault.ts, cli, secrets-cli.ts
8
+ * **What this gates (the whole list).** This is the single implementation; the
9
+ * only call sites are:
10
+ *
11
+ * - `cli/secrets-cli.ts` — `runSecrets()` refuses every `centient secrets`
12
+ * subcommand when it returns true, and
13
+ * - `environment/EnvironmentManager.ts` — the environment mutation commands
14
+ * (create / switch / delete-style auth operations).
15
+ *
16
+ * It does **not** gate the programmatic API: `openVault()`, `getCredential()`,
17
+ * `storeCredential()`, and `SessionVault.get()` contain no agent check, and
18
+ * `vault.ts` does not call this function. (An earlier version of this comment
19
+ * claimed it was "shared by vault.ts" — it never was.)
20
+ *
21
+ * **This is a UX guardrail, not a security boundary.** It reads environment
22
+ * variables the calling process itself controls, so any agent can clear them
23
+ * (`env -u CLAUDECODE …`) and walk straight through. Its job is to stop an
24
+ * agent from *accidentally* driving the operator CLI, nothing more. See
25
+ * `docs/threat-model.md` §4.4 and ADR-005 §3, which demotes this check
26
+ * explicitly; repairing the marker names (#189) does not re-promote it.
27
+ *
28
+ * **Marker accuracy matters** precisely because the check is cheap: before
29
+ * #189 it tested `CLAUDE_CODE_ENTRY_POINT` (a misspelling of the real
30
+ * `CLAUDE_CODE_ENTRYPOINT`) and leaned on `CLAUDE_PROJECT_DIR`, which
31
+ * hook-spawned subprocesses get but live interactive sessions do not — so the
32
+ * gate never fired for the sessions it was written for. `tests/agent-detect.test.ts`
33
+ * pins each marker individually so a rename cannot silently disable it again.
9
34
  */
35
+ /**
36
+ * Environment variables whose presence marks an AI agent session.
37
+ *
38
+ * Package-internal (not re-exported from `index.ts`) — exported so tests and
39
+ * the CLI test harnesses clear exactly this set rather than a hand-copied one
40
+ * that can drift.
41
+ */
42
+ export const AGENT_ENV_MARKERS = [
43
+ /** Set by every live Claude Code session (interactive and headless). */
44
+ "CLAUDECODE",
45
+ /** Set by Claude Code to name how the session was launched (cli, vscode, …). */
46
+ "CLAUDE_CODE_ENTRYPOINT",
47
+ /** Set in Claude Code hook-spawned subprocesses; absent in live sessions. */
48
+ "CLAUDE_PROJECT_DIR",
49
+ /** Session identifier exposed by some Claude Code integrations. */
50
+ "CLAUDE_CODE_SESSION",
51
+ /** Set by MCP hosts for servers running under a model context. */
52
+ "MCP_CONTEXT",
53
+ /** Set by MCP hosts to name the server being run. */
54
+ "MCP_SERVER_NAME",
55
+ /** Legacy marker retained from the pre-#189 set; harmless if unset. */
56
+ "ANTHROPIC_API_KEY_SOURCE",
57
+ ];
10
58
  /**
11
59
  * Returns true if the current process appears to be running inside an
12
60
  * AI agent environment (Claude Code, MCP subprocess, etc.).
61
+ *
62
+ * Advisory only — see the module docstring. A false result does not mean "a
63
+ * human is at the keyboard", it means "no marker was found".
13
64
  */
14
65
  export function isAgentEnvironment() {
15
- return !!(process.env["CLAUDE_PROJECT_DIR"] ||
16
- process.env["MCP_CONTEXT"] ||
17
- process.env["CLAUDE_CODE_SESSION"] ||
18
- process.env["CLAUDE_CODE_ENTRY_POINT"] ||
19
- process.env["ANTHROPIC_API_KEY_SOURCE"] ||
20
- process.env["MCP_SERVER_NAME"]);
66
+ return AGENT_ENV_MARKERS.some((name) => !!process.env[name]);
21
67
  }
22
68
  //# sourceMappingURL=agent-detect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-detect.js","sourceRoot":"","sources":["../../src/platform/agent-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAC/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"agent-detect.js","sourceRoot":"","sources":["../../src/platform/agent-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,wEAAwE;IACxE,YAAY;IACZ,gFAAgF;IAChF,wBAAwB;IACxB,6EAA6E;IAC7E,oBAAoB;IACpB,mEAAmE;IACnE,qBAAqB;IACrB,kEAAkE;IAClE,aAAa;IACb,qDAAqD;IACrD,iBAAiB;IACjB,uEAAuE;IACvE,0BAA0B;CAClB,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC"}