@ia-qa/self-healing 1.18.0 → 1.19.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 (49) hide show
  1. package/README.md +98 -1
  2. package/TUTORIAL.md +58 -0
  3. package/dist/ai/models.d.ts +12 -0
  4. package/dist/ai/models.js +33 -1
  5. package/dist/ai/models.js.map +1 -1
  6. package/dist/ai/resolver.d.ts +29 -6
  7. package/dist/ai/resolver.js +42 -7
  8. package/dist/ai/resolver.js.map +1 -1
  9. package/dist/cli/args.js +2 -0
  10. package/dist/cli/args.js.map +1 -1
  11. package/dist/cli/fix.js +9 -2
  12. package/dist/cli/fix.js.map +1 -1
  13. package/dist/cli/index.js +47 -0
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/map.d.ts +15 -4
  16. package/dist/cli/map.js +66 -13
  17. package/dist/cli/map.js.map +1 -1
  18. package/dist/cli/secret.d.ts +1 -0
  19. package/dist/cli/secret.js +172 -0
  20. package/dist/cli/secret.js.map +1 -0
  21. package/dist/cli/session.d.ts +24 -0
  22. package/dist/cli/session.js +119 -0
  23. package/dist/cli/session.js.map +1 -0
  24. package/dist/cli/skill.d.ts +37 -14
  25. package/dist/cli/skill.js +36 -30
  26. package/dist/cli/skill.js.map +1 -1
  27. package/dist/config.d.ts +23 -2
  28. package/dist/config.js +50 -0
  29. package/dist/config.js.map +1 -1
  30. package/dist/index.d.ts +5 -2
  31. package/dist/index.js +11 -3
  32. package/dist/index.js.map +1 -1
  33. package/dist/secretStore.d.ts +49 -0
  34. package/dist/secretStore.js +244 -0
  35. package/dist/secretStore.js.map +1 -0
  36. package/dist/sessionCheck.d.ts +96 -0
  37. package/dist/sessionCheck.js +182 -0
  38. package/dist/sessionCheck.js.map +1 -0
  39. package/dist/unrepaired.d.ts +73 -0
  40. package/dist/unrepaired.js +0 -0
  41. package/dist/unrepaired.js.map +1 -0
  42. package/dist/volatile.d.ts +8 -0
  43. package/dist/volatile.js +24 -7
  44. package/dist/volatile.js.map +1 -1
  45. package/dist/volatileBlindSpot.d.ts +67 -0
  46. package/dist/volatileBlindSpot.js +0 -0
  47. package/dist/volatileBlindSpot.js.map +1 -0
  48. package/package.json +1 -1
  49. package/skills/ia-qa-heal/SKILL.md +29 -3
package/dist/config.js CHANGED
@@ -55,8 +55,11 @@ exports.configuredTestPaths = configuredTestPaths;
55
55
  exports.saveConfig = saveConfig;
56
56
  exports.supportsTolerantEnvFile = supportsTolerantEnvFile;
57
57
  exports.envLoadHint = envLoadHint;
58
+ exports.looksLikeSecret = looksLikeSecret;
59
+ exports.maskSecret = maskSecret;
58
60
  exports.resolveSecret = resolveSecret;
59
61
  exports.configuredBaseUrl = configuredBaseUrl;
62
+ const secretStore_1 = require("./secretStore");
60
63
  const fs = __importStar(require("fs"));
61
64
  const path = __importStar(require("path"));
62
65
  exports.CONFIG_DIR = '.ia-qa';
@@ -382,10 +385,44 @@ function envLoadHint(command = '<command>', version = process.versions.node) {
382
385
  * chain (env vars, `~/.aws/credentials`, SSO, instance profile…).
383
386
  * The AWS SDK is imported lazily so env-only users don't need it at runtime.
384
387
  */
388
+ /**
389
+ * Does this look like a credential rather than the NAME of one?
390
+ *
391
+ * The shapes providers actually issue, plus a long opaque run. Deliberately narrow: an
392
+ * environment variable name is short, upper-case and underscore-separated, so a false
393
+ * positive here would refuse a legitimate name — and the cost of a false negative is only
394
+ * that the ordinary "not set" message is printed instead.
395
+ */
396
+ function looksLikeSecret(value) {
397
+ return /^(sk-|sk_|AIza|ghp_|gsk_|xoxb-|Bearer )/.test(value) || /^[A-Za-z0-9_\-]{40,}$/.test(value);
398
+ }
399
+ /** The first and last few characters only — enough to recognise it, never enough to use it. */
400
+ function maskSecret(value) {
401
+ return value.length <= 12 ? '[redacted]' : `${value.slice(0, 4)}…${value.slice(-2)} (${value.length} characters)`;
402
+ }
385
403
  async function resolveSecret(ref) {
404
+ if (typeof ref === 'string') {
405
+ // Someone pasted the key where the reference goes. Saying "missing key" here sends them
406
+ // to wrap the value in `{ source, key }`, which is the WORSE mistake below.
407
+ throw new Error(`A secret was written directly in ${exports.CONFIG_DIR}/config.json.\n` +
408
+ ` That file holds REFERENCES only — it is committed, and a value here is a leaked\n` +
409
+ ` credential. Put the value in your environment and name it:\n` +
410
+ ` { "source": "env", "key": "MY_API_KEY" }\n` +
411
+ ` Then rotate what you pasted: assume it is already in your git history.`);
412
+ }
386
413
  if (!ref || !ref.key) {
387
414
  throw new Error('Invalid secret reference: missing "key".');
388
415
  }
416
+ // The value where a NAME belongs. Found by execution: the "not set" message below printed
417
+ // the key back into the terminal — and into any log that captured it. A secrets resolver
418
+ // that echoes a secret is the one bug this whole indirection exists to make impossible.
419
+ if (looksLikeSecret(ref.key)) {
420
+ throw new Error(`"key" holds what looks like the credential itself (${maskSecret(ref.key)}), not the name of a variable.\n` +
421
+ ` ${exports.CONFIG_DIR}/config.json is committed: a value here is a leaked credential, so it is\n` +
422
+ ` refused rather than used. Put the value in your environment and name it:\n` +
423
+ ` { "source": "${ref.source ?? 'env'}", "key": "MY_API_KEY" }\n` +
424
+ ` Then rotate the one you pasted: assume it is already in your git history.`);
425
+ }
389
426
  if (ref.source === 'env') {
390
427
  const value = process.env[ref.key];
391
428
  if (!value) {
@@ -403,6 +440,19 @@ async function resolveSecret(ref) {
403
440
  }
404
441
  return value;
405
442
  }
443
+ if (ref.source === 'keychain') {
444
+ // The OS store. Nothing is exported, so nothing is inherited by whatever else runs in
445
+ // this session — see `secretStore.ts` for what that does and does not buy.
446
+ const got = (0, secretStore_1.readSecret)(ref.key);
447
+ if (!got.ok || !got.value) {
448
+ throw new Error(`"${ref.key}" is not in this machine's credential store — ${got.ok ? 'it resolved to nothing' : got.reason}.\n` +
449
+ ` Store it once, from a terminal: ia-qa-heal secret set ${ref.key}\n` +
450
+ ` It asks for the value, shows nothing, and writes it to ${(0, secretStore_1.storeDescription)()}.\n` +
451
+ ` In CI there is no store: use { "source": "env", "key": "${ref.key}" } and give the\n` +
452
+ ` runner the secret.`);
453
+ }
454
+ return got.value;
455
+ }
406
456
  if (ref.source === 'aws-ssm') {
407
457
  // Ships separately: the AWS SDK is ~5 MB and only the "aws-ssm" source needs
408
458
  // it, so it is an optional peer rather than a tax on every install.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  export { aiClick, aiFill, llmResolverStub, createAiResolver } from './playwright/healer';
2
2
  export type { HealerOptions } from './playwright/healer';
3
- export { aiResolve, prefilter, buildPrompt, parseModelJson } from './ai/resolver';
3
+ export { egressHost, PROVIDER_HOST, aiResolve, prefilter, buildPrompt, parseModelJson } from './ai/resolver';
4
4
  export type { AiResolveOptions, AiResolveResult, AiResolution, AiProvider } from './ai/resolver';
5
5
  export { AI_PROVIDERS, findProvider, defaultKeyEnv, renderModelList } from './ai/models';
6
+ export { COMPATIBLE_EXAMPLES } from './ai/models';
6
7
  export type { AiModelInfo, AiProviderInfo } from './ai/models';
7
8
  export { extractInteractiveElements, loadMapping, saveMapping } from './aom';
8
9
  export type { MappedElement, PageMapping } from './aom';
@@ -30,7 +31,7 @@ export { launchBrowser } from './launcher';
30
31
  export type { BrowserChoice, LaunchedBrowser } from './launcher';
31
32
  export type { MapUrlOptions, MapUrlResult } from './mapUrl';
32
33
  export { computeRewrites, applyRewrites, collectFiles, replaceQuoted } from './fixEngine';
33
- export { loadConfig, resolveSecret, layoutDir, layoutPath, LAYOUT_DIRNAME, setBaseDir, mappingDir, baselineDir } from './config';
34
+ export { loadConfig, resolveSecret, looksLikeSecret, maskSecret, layoutDir, layoutPath, LAYOUT_DIRNAME, setBaseDir, mappingDir, baselineDir } from './config';
34
35
  export { configuredTestPaths } from './config';
35
36
  export { runMap, LoginWallError } from './cli/map';
36
37
  export type { MapResult, MapFailure, MapPageStat } from './cli/map';
@@ -59,3 +60,5 @@ export { extractLayout, stripLayoutFromPages, minPagesForLayout } from './layout
59
60
  export type { LayoutMapping } from './layout';
60
61
  export { buildOverview, renderOverview, renderNavigation, renderNavigationSvg, layoutGraph, navigationGraph, writeOverview, overviewPath, navigationPath, navigationSvgPath, OVERVIEW_FILENAME, NAVIGATION_FILENAME, NAVIGATION_SVG_FILENAME, } from './overview';
61
62
  export type { AppOverview, OverviewPage, NavEdge, ShellLink, PlacedNode, NavigationGraph, HubFan } from './overview';
63
+ export { createSkillVerb } from "./cli/skill";
64
+ export type { SkillVerb, SkillVerbSpec } from "./cli/skill";
package/dist/index.js CHANGED
@@ -1,14 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.captureDir = exports.unionElements = exports.mergeCaptures = exports.globToRegex = exports.readTestDepth = exports.collectUnattributable = exports.computePageDepth = exports.computeTestDepth = exports.saveExercised = exports.EXERCISED_FILENAME = exports.contractPageNames = exports.exercisedPath = exports.loadExercised = exports.usagePath = exports.usageFiles = exports.loadUsage = exports.saveUsage = exports.ingestPaths = exports.scanText = exports.crawlApp = exports.sitemapsFromRobots = exports.isSitemapIndex = exports.extractLocs = exports.discoverFromSitemap = exports.UNSAFE_URL_RE = exports.mergePages = exports.toCandidate = exports.normalizedPath = exports.isSafeCandidateUrl = exports.resolvePageName = exports.pageNameFromUrl = exports.mapUrl = exports.markdownPath = exports.saveMarkdown = exports.renderPageContract = exports.saveMapping = exports.loadMapping = exports.extractInteractiveElements = exports.renderModelList = exports.defaultKeyEnv = exports.findProvider = exports.AI_PROVIDERS = exports.parseModelJson = exports.buildPrompt = exports.prefilter = exports.aiResolve = exports.createAiResolver = exports.llmResolverStub = exports.aiFill = exports.aiClick = void 0;
4
- exports.overviewPath = exports.writeOverview = exports.navigationGraph = exports.layoutGraph = exports.renderNavigationSvg = exports.renderNavigation = exports.renderOverview = exports.buildOverview = exports.minPagesForLayout = exports.stripLayoutFromPages = exports.extractLayout = exports.isWebAddress = exports.readSitemap = exports.writeSetup = exports.planSetup = exports.listShape = exports.groupListChurn = exports.maskDigits = exports.groupNumericLabelDrift = exports.detectTestCommand = exports.auditProject = exports.runFix = exports.HISTORY_FILENAME = exports.historyPath = exports.WIDE_RUN_SHARE = exports.pageChurn = exports.readHistory = exports.checkCounts = exports.checkHeadline = exports.checkVerdict = exports.checkProject = exports.dirDiffAggregate = exports.runBaseline = exports.LoginWallError = exports.runMap = exports.configuredTestPaths = exports.baselineDir = exports.mappingDir = exports.setBaseDir = exports.LAYOUT_DIRNAME = exports.layoutPath = exports.layoutDir = exports.resolveSecret = exports.loadConfig = exports.replaceQuoted = exports.collectFiles = exports.applyRewrites = exports.computeRewrites = exports.launchBrowser = exports.CAPTURE_DIRNAME = void 0;
5
- exports.NAVIGATION_SVG_FILENAME = exports.NAVIGATION_FILENAME = exports.OVERVIEW_FILENAME = exports.navigationSvgPath = exports.navigationPath = void 0;
3
+ exports.globToRegex = exports.readTestDepth = exports.collectUnattributable = exports.computePageDepth = exports.computeTestDepth = exports.saveExercised = exports.EXERCISED_FILENAME = exports.contractPageNames = exports.exercisedPath = exports.loadExercised = exports.usagePath = exports.usageFiles = exports.loadUsage = exports.saveUsage = exports.ingestPaths = exports.scanText = exports.crawlApp = exports.sitemapsFromRobots = exports.isSitemapIndex = exports.extractLocs = exports.discoverFromSitemap = exports.UNSAFE_URL_RE = exports.mergePages = exports.toCandidate = exports.normalizedPath = exports.isSafeCandidateUrl = exports.resolvePageName = exports.pageNameFromUrl = exports.mapUrl = exports.markdownPath = exports.saveMarkdown = exports.renderPageContract = exports.saveMapping = exports.loadMapping = exports.extractInteractiveElements = exports.COMPATIBLE_EXAMPLES = exports.renderModelList = exports.defaultKeyEnv = exports.findProvider = exports.AI_PROVIDERS = exports.parseModelJson = exports.buildPrompt = exports.prefilter = exports.aiResolve = exports.PROVIDER_HOST = exports.egressHost = exports.createAiResolver = exports.llmResolverStub = exports.aiFill = exports.aiClick = void 0;
4
+ exports.renderNavigation = exports.renderOverview = exports.buildOverview = exports.minPagesForLayout = exports.stripLayoutFromPages = exports.extractLayout = exports.isWebAddress = exports.readSitemap = exports.writeSetup = exports.planSetup = exports.listShape = exports.groupListChurn = exports.maskDigits = exports.groupNumericLabelDrift = exports.detectTestCommand = exports.auditProject = exports.runFix = exports.HISTORY_FILENAME = exports.historyPath = exports.WIDE_RUN_SHARE = exports.pageChurn = exports.readHistory = exports.checkCounts = exports.checkHeadline = exports.checkVerdict = exports.checkProject = exports.dirDiffAggregate = exports.runBaseline = exports.LoginWallError = exports.runMap = exports.configuredTestPaths = exports.baselineDir = exports.mappingDir = exports.setBaseDir = exports.LAYOUT_DIRNAME = exports.layoutPath = exports.layoutDir = exports.maskSecret = exports.looksLikeSecret = exports.resolveSecret = exports.loadConfig = exports.replaceQuoted = exports.collectFiles = exports.applyRewrites = exports.computeRewrites = exports.launchBrowser = exports.CAPTURE_DIRNAME = exports.captureDir = exports.unionElements = exports.mergeCaptures = void 0;
5
+ exports.createSkillVerb = exports.NAVIGATION_SVG_FILENAME = exports.NAVIGATION_FILENAME = exports.OVERVIEW_FILENAME = exports.navigationSvgPath = exports.navigationPath = exports.overviewPath = exports.writeOverview = exports.navigationGraph = exports.layoutGraph = exports.renderNavigationSvg = void 0;
6
6
  var healer_1 = require("./playwright/healer");
7
7
  Object.defineProperty(exports, "aiClick", { enumerable: true, get: function () { return healer_1.aiClick; } });
8
8
  Object.defineProperty(exports, "aiFill", { enumerable: true, get: function () { return healer_1.aiFill; } });
9
9
  Object.defineProperty(exports, "llmResolverStub", { enumerable: true, get: function () { return healer_1.llmResolverStub; } });
10
10
  Object.defineProperty(exports, "createAiResolver", { enumerable: true, get: function () { return healer_1.createAiResolver; } });
11
11
  var resolver_1 = require("./ai/resolver");
12
+ Object.defineProperty(exports, "egressHost", { enumerable: true, get: function () { return resolver_1.egressHost; } });
13
+ Object.defineProperty(exports, "PROVIDER_HOST", { enumerable: true, get: function () { return resolver_1.PROVIDER_HOST; } });
12
14
  Object.defineProperty(exports, "aiResolve", { enumerable: true, get: function () { return resolver_1.aiResolve; } });
13
15
  Object.defineProperty(exports, "prefilter", { enumerable: true, get: function () { return resolver_1.prefilter; } });
14
16
  Object.defineProperty(exports, "buildPrompt", { enumerable: true, get: function () { return resolver_1.buildPrompt; } });
@@ -18,6 +20,8 @@ Object.defineProperty(exports, "AI_PROVIDERS", { enumerable: true, get: function
18
20
  Object.defineProperty(exports, "findProvider", { enumerable: true, get: function () { return models_1.findProvider; } });
19
21
  Object.defineProperty(exports, "defaultKeyEnv", { enumerable: true, get: function () { return models_1.defaultKeyEnv; } });
20
22
  Object.defineProperty(exports, "renderModelList", { enumerable: true, get: function () { return models_1.renderModelList; } });
23
+ var models_2 = require("./ai/models");
24
+ Object.defineProperty(exports, "COMPATIBLE_EXAMPLES", { enumerable: true, get: function () { return models_2.COMPATIBLE_EXAMPLES; } });
21
25
  var aom_1 = require("./aom");
22
26
  Object.defineProperty(exports, "extractInteractiveElements", { enumerable: true, get: function () { return aom_1.extractInteractiveElements; } });
23
27
  Object.defineProperty(exports, "loadMapping", { enumerable: true, get: function () { return aom_1.loadMapping; } });
@@ -87,6 +91,8 @@ Object.defineProperty(exports, "replaceQuoted", { enumerable: true, get: functio
87
91
  var config_1 = require("./config");
88
92
  Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
89
93
  Object.defineProperty(exports, "resolveSecret", { enumerable: true, get: function () { return config_1.resolveSecret; } });
94
+ Object.defineProperty(exports, "looksLikeSecret", { enumerable: true, get: function () { return config_1.looksLikeSecret; } });
95
+ Object.defineProperty(exports, "maskSecret", { enumerable: true, get: function () { return config_1.maskSecret; } });
90
96
  Object.defineProperty(exports, "layoutDir", { enumerable: true, get: function () { return config_1.layoutDir; } });
91
97
  Object.defineProperty(exports, "layoutPath", { enumerable: true, get: function () { return config_1.layoutPath; } });
92
98
  Object.defineProperty(exports, "LAYOUT_DIRNAME", { enumerable: true, get: function () { return config_1.LAYOUT_DIRNAME; } });
@@ -163,4 +169,6 @@ Object.defineProperty(exports, "navigationSvgPath", { enumerable: true, get: fun
163
169
  Object.defineProperty(exports, "OVERVIEW_FILENAME", { enumerable: true, get: function () { return overview_1.OVERVIEW_FILENAME; } });
164
170
  Object.defineProperty(exports, "NAVIGATION_FILENAME", { enumerable: true, get: function () { return overview_1.NAVIGATION_FILENAME; } });
165
171
  Object.defineProperty(exports, "NAVIGATION_SVG_FILENAME", { enumerable: true, get: function () { return overview_1.NAVIGATION_SVG_FILENAME; } });
172
+ var skill_1 = require("./cli/skill");
173
+ Object.defineProperty(exports, "createSkillVerb", { enumerable: true, get: function () { return skill_1.createSkillVerb; } });
166
174
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * The OS credential store, as a third `source` for a secret reference.
3
+ *
4
+ * **What this buys, precisely.** `source: "env"` protects three real things — the value never
5
+ * reaches a committed file, a transcript, or a tool argument. It does not protect the
6
+ * *process*: once a human exports the key, everything an agent launches inherits it, which is
7
+ * how `dotenv-cli -- ia-qa-discover-ai plan` works at all. Measured on a real shell: a spawned
8
+ * process read the whole 164-character key out of `process.env`.
9
+ *
10
+ * With `source: "keychain"` the value stops being **ambient**. Only this tool asks the OS for
11
+ * it, at the moment it needs it, and nothing else in the session inherits it.
12
+ *
13
+ * **What it does not buy, and must never be sold as.** It is not a barrier against an agent
14
+ * that decides to read the key: an agent can run the same OS command. What changes is that
15
+ * obtaining the value becomes an explicit, visible act in the transcript rather than an
16
+ * ambient inheritance — something a human reviewing the session can see, and something the
17
+ * skill files forbid by name. Anyone describing this as "the agent cannot read the key" is
18
+ * describing a different feature.
19
+ *
20
+ * **No home-made vault.** Where the OS has no store this refuses and names `env`, rather than
21
+ * inventing an encrypted file and calling it a keychain. A vault this package wrote would be
22
+ * a vault this package would have to defend.
23
+ */
24
+ /** Everything lands under one service name, so `list` and `rm` need no bookkeeping per key. */
25
+ export declare const SERVICE = "ia-qa";
26
+ export type StoreKind = 'macos' | 'windows' | 'linux' | 'unsupported';
27
+ export declare function storeKind(platform?: NodeJS.Platform): StoreKind;
28
+ /** Where the names live. Names only — a value is never written here. */
29
+ export declare function indexPath(home?: string): string;
30
+ export type StoreResult = {
31
+ ok: true;
32
+ value?: string;
33
+ } | {
34
+ ok: false;
35
+ reason: string;
36
+ };
37
+ export declare function writeSecret(name: string, value: string, home?: string): StoreResult;
38
+ export declare function readSecret(name: string, home?: string): StoreResult;
39
+ export declare function removeSecret(name: string, home?: string): StoreResult;
40
+ /**
41
+ * The names this tool has stored, and only the names.
42
+ *
43
+ * Kept in a file of our own rather than asked of the OS: the three stores list their contents
44
+ * three different ways, and one of them (`security dump-keychain`) prompts the user. A names
45
+ * index is the same everywhere and holds nothing worth protecting.
46
+ */
47
+ export declare function listSecrets(home?: string): string[];
48
+ /** One line for a human deciding whether this machine can do it at all. */
49
+ export declare function storeDescription(kind?: StoreKind): string;
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SERVICE = void 0;
37
+ exports.storeKind = storeKind;
38
+ exports.indexPath = indexPath;
39
+ exports.writeSecret = writeSecret;
40
+ exports.readSecret = readSecret;
41
+ exports.removeSecret = removeSecret;
42
+ exports.listSecrets = listSecrets;
43
+ exports.storeDescription = storeDescription;
44
+ const child_process_1 = require("child_process");
45
+ const fs = __importStar(require("fs"));
46
+ const os = __importStar(require("os"));
47
+ const path = __importStar(require("path"));
48
+ /**
49
+ * The OS credential store, as a third `source` for a secret reference.
50
+ *
51
+ * **What this buys, precisely.** `source: "env"` protects three real things — the value never
52
+ * reaches a committed file, a transcript, or a tool argument. It does not protect the
53
+ * *process*: once a human exports the key, everything an agent launches inherits it, which is
54
+ * how `dotenv-cli -- ia-qa-discover-ai plan` works at all. Measured on a real shell: a spawned
55
+ * process read the whole 164-character key out of `process.env`.
56
+ *
57
+ * With `source: "keychain"` the value stops being **ambient**. Only this tool asks the OS for
58
+ * it, at the moment it needs it, and nothing else in the session inherits it.
59
+ *
60
+ * **What it does not buy, and must never be sold as.** It is not a barrier against an agent
61
+ * that decides to read the key: an agent can run the same OS command. What changes is that
62
+ * obtaining the value becomes an explicit, visible act in the transcript rather than an
63
+ * ambient inheritance — something a human reviewing the session can see, and something the
64
+ * skill files forbid by name. Anyone describing this as "the agent cannot read the key" is
65
+ * describing a different feature.
66
+ *
67
+ * **No home-made vault.** Where the OS has no store this refuses and names `env`, rather than
68
+ * inventing an encrypted file and calling it a keychain. A vault this package wrote would be
69
+ * a vault this package would have to defend.
70
+ */
71
+ /** Everything lands under one service name, so `list` and `rm` need no bookkeeping per key. */
72
+ exports.SERVICE = 'ia-qa';
73
+ function storeKind(platform = process.platform) {
74
+ if (platform === 'darwin')
75
+ return 'macos';
76
+ if (platform === 'win32')
77
+ return 'windows';
78
+ if (platform === 'linux')
79
+ return 'linux';
80
+ return 'unsupported';
81
+ }
82
+ /** Where the names live. Names only — a value is never written here. */
83
+ function indexPath(home = os.homedir()) {
84
+ return path.join(home, '.ia-qa', 'secrets.json');
85
+ }
86
+ /** Windows keeps one DPAPI blob per name: encrypted for this user account, on this machine. */
87
+ function blobPath(name, home = os.homedir()) {
88
+ return path.join(home, '.ia-qa', 'secrets', `${encodeURIComponent(name)}.dpapi`);
89
+ }
90
+ const UNSUPPORTED = (kind) => kind === 'linux'
91
+ ? 'No OS credential store here: `secret-tool` (libsecret) is not installed. Install it, or use ' +
92
+ '{ "source": "env", "key": "…" } and export the value in your shell.'
93
+ : `No OS credential store on this platform (${process.platform}). Use ` +
94
+ '{ "source": "env", "key": "…" } and export the value in your shell.';
95
+ function sh(cmd, args, input, env) {
96
+ const r = (0, child_process_1.spawnSync)(cmd, args, {
97
+ encoding: 'utf8',
98
+ input: input ?? '',
99
+ windowsHide: true,
100
+ ...(env ? { env: { ...process.env, ...env } } : {}),
101
+ });
102
+ return { code: r.status ?? 1, out: `${r.stdout ?? ''}${r.stderr ?? ''}` };
103
+ }
104
+ const hasBinary = (cmd) => sh(process.platform === 'win32' ? 'where' : 'which', [cmd]).code === 0;
105
+ /**
106
+ * PowerShell reads the value from **stdin**, never from a command line.
107
+ *
108
+ * An argument is visible in the process list and in the shell history for as long as the
109
+ * process lives. This is the one place in the package where a plaintext secret exists in
110
+ * memory at all, so it does not also get a second home.
111
+ */
112
+ // The path travels in an environment variable, not in `$args`: `powershell -Command "<script>"
113
+ // followed by more words does NOT bind them to `$args`, which produced a null `Split-Path`
114
+ // argument on the first real run. An env var also sidesteps a whole class of quoting bugs on
115
+ // a path with a space in it — and a path is not a secret.
116
+ const PS_WRITE = `$ErrorActionPreference='Stop';$v=[Console]::In.ReadToEnd().TrimEnd("\`r","\`n");` +
117
+ `$p=$env:IAQA_BLOB;$dir=Split-Path -Parent $p;if(-not(Test-Path $dir)){New-Item -ItemType Directory -Path $dir -Force|Out-Null};` +
118
+ `ConvertTo-SecureString -String $v -AsPlainText -Force|ConvertFrom-SecureString|Set-Content -Path $p -Encoding ascii`;
119
+ // `.Trim()` is load-bearing: `Set-Content` writes a trailing newline, `-Raw` keeps it, and
120
+ // `ConvertTo-SecureString` rejects the result with "the input string format is incorrect".
121
+ // Found on the first real write/read round-trip, not by reading the code.
122
+ const PS_READ = `$ErrorActionPreference='Stop';$s=(Get-Content -Path $env:IAQA_BLOB -Raw).Trim()|ConvertTo-SecureString;` +
123
+ `$b=[Runtime.InteropServices.Marshal]::SecureStringToBSTR($s);` +
124
+ `[Console]::Out.Write([Runtime.InteropServices.Marshal]::PtrToStringAuto($b));` +
125
+ `[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($b)`;
126
+ function writeSecret(name, value, home = os.homedir()) {
127
+ const kind = storeKind();
128
+ if (kind === 'macos') {
129
+ // The value goes on the command line here — `security` takes it no other way. It is
130
+ // visible to `ps` for this user for the instant the process lives. Said out loud rather
131
+ // than left for someone to discover.
132
+ const r = sh('security', ['add-generic-password', '-U', '-s', exports.SERVICE, '-a', name, '-w', value]);
133
+ if (r.code !== 0)
134
+ return { ok: false, reason: `macOS keychain refused it: ${r.out.trim() || `exit ${r.code}`}` };
135
+ }
136
+ else if (kind === 'windows') {
137
+ const r = sh('powershell', ['-NoProfile', '-NonInteractive', '-Command', PS_WRITE], value, { IAQA_BLOB: blobPath(name, home) });
138
+ if (r.code !== 0)
139
+ return { ok: false, reason: `Windows DPAPI refused it: ${r.out.trim() || `exit ${r.code}`}` };
140
+ }
141
+ else if (kind === 'linux') {
142
+ if (!hasBinary('secret-tool'))
143
+ return { ok: false, reason: UNSUPPORTED('linux') };
144
+ const r = sh('secret-tool', ['store', '--label', `${exports.SERVICE} ${name}`, 'service', exports.SERVICE, 'account', name], value);
145
+ if (r.code !== 0)
146
+ return { ok: false, reason: `secret-tool refused it: ${r.out.trim() || `exit ${r.code}`}` };
147
+ }
148
+ else {
149
+ return { ok: false, reason: UNSUPPORTED(kind) };
150
+ }
151
+ rememberName(name, home);
152
+ return { ok: true };
153
+ }
154
+ function readSecret(name, home = os.homedir()) {
155
+ const kind = storeKind();
156
+ if (kind === 'macos') {
157
+ const r = sh('security', ['find-generic-password', '-s', exports.SERVICE, '-a', name, '-w']);
158
+ if (r.code !== 0)
159
+ return { ok: false, reason: `not in the macOS keychain under ${exports.SERVICE}/${name}` };
160
+ return { ok: true, value: r.out.replace(/\r?\n$/, '') };
161
+ }
162
+ if (kind === 'windows') {
163
+ const file = blobPath(name, home);
164
+ if (!fs.existsSync(file))
165
+ return { ok: false, reason: `not stored here (${file} does not exist)` };
166
+ const r = sh('powershell', ['-NoProfile', '-NonInteractive', '-Command', PS_READ], '', { IAQA_BLOB: file });
167
+ if (r.code !== 0) {
168
+ // The likely cause is named, and what actually happened is shown. An error message
169
+ // that asserts a cause it did not verify is the thing this package spends its design
170
+ // refusing — the first draft of this branch blamed cross-account DPAPI for what was a
171
+ // trailing newline.
172
+ return {
173
+ ok: false,
174
+ reason: `stored, but it could not be decrypted here. A DPAPI blob is bound to the Windows user ` +
175
+ `AND the machine that wrote it, so copying .ia-qa/secrets between machines or accounts ` +
176
+ `does not work — set it again on this one. What the store said: ${r.out.trim().split('\n')[0] || `exit ${r.code}`}`,
177
+ };
178
+ }
179
+ return { ok: true, value: r.out };
180
+ }
181
+ if (kind === 'linux') {
182
+ if (!hasBinary('secret-tool'))
183
+ return { ok: false, reason: UNSUPPORTED('linux') };
184
+ const r = sh('secret-tool', ['lookup', 'service', exports.SERVICE, 'account', name]);
185
+ if (r.code !== 0 || !r.out)
186
+ return { ok: false, reason: `not in the keyring under ${exports.SERVICE}/${name}` };
187
+ return { ok: true, value: r.out.replace(/\r?\n$/, '') };
188
+ }
189
+ return { ok: false, reason: UNSUPPORTED(kind) };
190
+ }
191
+ function removeSecret(name, home = os.homedir()) {
192
+ const kind = storeKind();
193
+ if (kind === 'macos')
194
+ sh('security', ['delete-generic-password', '-s', exports.SERVICE, '-a', name]);
195
+ else if (kind === 'windows')
196
+ fs.rmSync(blobPath(name, home), { force: true });
197
+ else if (kind === 'linux')
198
+ sh('secret-tool', ['clear', 'service', exports.SERVICE, 'account', name]);
199
+ else
200
+ return { ok: false, reason: UNSUPPORTED(kind) };
201
+ forgetName(name, home);
202
+ return { ok: true };
203
+ }
204
+ /**
205
+ * The names this tool has stored, and only the names.
206
+ *
207
+ * Kept in a file of our own rather than asked of the OS: the three stores list their contents
208
+ * three different ways, and one of them (`security dump-keychain`) prompts the user. A names
209
+ * index is the same everywhere and holds nothing worth protecting.
210
+ */
211
+ function listSecrets(home = os.homedir()) {
212
+ try {
213
+ const parsed = JSON.parse(fs.readFileSync(indexPath(home), 'utf8'));
214
+ return Array.isArray(parsed) ? parsed.filter((n) => typeof n === 'string').sort() : [];
215
+ }
216
+ catch {
217
+ return [];
218
+ }
219
+ }
220
+ function saveNames(names, home) {
221
+ const file = indexPath(home);
222
+ fs.mkdirSync(path.dirname(file), { recursive: true });
223
+ fs.writeFileSync(file, `${JSON.stringify([...new Set(names)].sort(), null, 2)}\n`, 'utf8');
224
+ }
225
+ function rememberName(name, home) {
226
+ saveNames([...listSecrets(home), name], home);
227
+ }
228
+ function forgetName(name, home) {
229
+ saveNames(listSecrets(home).filter((n) => n !== name), home);
230
+ }
231
+ /** One line for a human deciding whether this machine can do it at all. */
232
+ function storeDescription(kind = storeKind()) {
233
+ switch (kind) {
234
+ case 'macos':
235
+ return 'the macOS keychain (`security`)';
236
+ case 'windows':
237
+ return 'Windows DPAPI — encrypted for this user account, on this machine';
238
+ case 'linux':
239
+ return hasBinary('secret-tool') ? 'the desktop keyring (`secret-tool`)' : 'nothing: `secret-tool` (libsecret) is not installed';
240
+ default:
241
+ return `nothing: no credential store on ${process.platform}`;
242
+ }
243
+ }
244
+ //# sourceMappingURL=secretStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretStore.js","sourceRoot":"","sources":["../src/secretStore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,8BAKC;AAGD,8BAEC;AAmDD,kCAoBC;AAED,gCAiCC;AAED,oCAQC;AASD,kCAOC;AAiBD,4CAWC;AA5MD,iDAA0C;AAC1C,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAE7B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,+FAA+F;AAClF,QAAA,OAAO,GAAG,OAAO,CAAC;AAI/B,SAAgB,SAAS,CAAC,WAA4B,OAAO,CAAC,QAAQ;IACpE,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACzC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,wEAAwE;AACxE,SAAgB,SAAS,CAAC,OAAe,EAAE,CAAC,OAAO,EAAE;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC;AAED,+FAA+F;AAC/F,SAAS,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnF,CAAC;AAID,MAAM,WAAW,GAAG,CAAC,IAAe,EAAU,EAAE,CAC9C,IAAI,KAAK,OAAO;IACd,CAAC,CAAC,8FAA8F;QAC9F,qEAAqE;IACvE,CAAC,CAAC,4CAA4C,OAAO,CAAC,QAAQ,SAAS;QACrE,qEAAqE,CAAC;AAE5E,SAAS,EAAE,CAAC,GAAW,EAAE,IAAc,EAAE,KAAc,EAAE,GAA4B;IACnF,MAAM,CAAC,GAAG,IAAA,yBAAS,EAAC,GAAG,EAAE,IAAI,EAAE;QAC7B,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,KAAK,IAAI,EAAE;QAClB,WAAW,EAAE,IAAI;QACjB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AAEnH;;;;;;GAMG;AACH,+FAA+F;AAC/F,2FAA2F;AAC3F,6FAA6F;AAC7F,0DAA0D;AAC1D,MAAM,QAAQ,GAAG,kFAAkF;IACjG,iIAAiI;IACjI,qHAAqH,CAAC;AAExH,2FAA2F;AAC3F,2FAA2F;AAC3F,0EAA0E;AAC1E,MAAM,OAAO,GAAG,yGAAyG;IACvH,+DAA+D;IAC/D,+EAA+E;IAC/E,qDAAqD,CAAC;AAExD,SAAgB,WAAW,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IAClF,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,oFAAoF;QACpF,wFAAwF;QACxF,qCAAqC;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,eAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;IACnH,CAAC;SAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAChI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,6BAA6B,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;IAClH,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAClF,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,eAAO,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,eAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACpH,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;IAChH,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAClD,CAAC;IACD,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IAClE,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,uBAAuB,EAAE,IAAI,EAAE,eAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,eAAO,IAAI,IAAI,EAAE,EAAE,CAAC;QACrG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,IAAI,kBAAkB,EAAE,CAAC;QACnG,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5G,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACjB,mFAAmF;YACnF,qFAAqF;YACrF,sFAAsF;YACtF,oBAAoB;YACpB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EACJ,wFAAwF;oBACxF,wFAAwF;oBACxF,kEAAkE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE;aACtH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAClF,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,eAAO,IAAI,IAAI,EAAE,EAAE,CAAC;QACxG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IACpE,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,IAAI,IAAI,KAAK,OAAO;QAAE,EAAE,CAAC,UAAU,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,eAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;SACxF,IAAI,IAAI,KAAK,SAAS;QAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;SACzE,IAAI,IAAI,KAAK,OAAO;QAAE,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,eAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;;QACxF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IACrD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,OAAe,EAAE,CAAC,OAAO,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAY,CAAC;QAC/E,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAe,EAAE,IAAY;IAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC9C,SAAS,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,2EAA2E;AAC3E,SAAgB,gBAAgB,CAAC,OAAkB,SAAS,EAAE;IAC5D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,iCAAiC,CAAC;QAC3C,KAAK,SAAS;YACZ,OAAO,kEAAkE,CAAC;QAC5E,KAAK,OAAO;YACV,OAAO,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,qDAAqD,CAAC;QAClI;YACE,OAAO,mCAAmC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjE,CAAC;AACH,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Why a session is not opening the app — told apart, not listed.
3
+ *
4
+ * `assertLanded` names three causes: "expired, rotated, or never covering this domain". All
5
+ * three are true statements about the world and the message offers no way to choose between
6
+ * them, so the reader is left to guess — and one of them means "run `login` again" while
7
+ * another means "your `baseUrl` and your session are about different hosts", which no amount
8
+ * of logging in will fix. A field report ended with someone writing their own
9
+ * `check-session.mjs` to answer it.
10
+ *
11
+ * **Two of the three are answerable from the file alone**, which is the finding that makes
12
+ * this verb worth having rather than a second wrapper around a browser:
13
+ *
14
+ * - **expired** — a cookie carries its own `expires`. A file whose session cookies are all
15
+ * in the past cannot authenticate anything, and no request has to be made to know it.
16
+ * - **wrong-host** — a cookie carries its `domain`. If nothing in the file is scoped to the
17
+ * host `baseUrl` points at, the session was taken somewhere else. This is the one a
18
+ * person can stare at for an hour: the session works, the app works, and they are not the
19
+ * same app. `www.` and an apex fold together, as everywhere else in this package.
20
+ * - **rotated** — cookies present, unexpired, correctly scoped, and the app still answers
21
+ * with a login. Only the server knows why (a deploy, a secret rotation, a forced logout),
22
+ * and only a request can observe it.
23
+ *
24
+ * So the offline analysis runs first and the browser is used only for the question it is the
25
+ * only witness to. Everything here is pure; the I/O lives in `cli/session.ts`.
26
+ */
27
+ /** Playwright's storageState, as much of it as this file needs. */
28
+ export interface StoredSession {
29
+ cookies?: Array<{
30
+ name: string;
31
+ domain?: string;
32
+ path?: string;
33
+ expires?: number;
34
+ }>;
35
+ origins?: Array<{
36
+ origin: string;
37
+ localStorage?: Array<{
38
+ name: string;
39
+ value: string;
40
+ }>;
41
+ }>;
42
+ }
43
+ export type SessionCause =
44
+ /** Every cookie's `expires` is in the past. */
45
+ 'expired'
46
+ /** Nothing in the file is scoped to the host `baseUrl` names. */
47
+ | 'wrong-host'
48
+ /** The file looks usable and the app still shows a login — the server dropped it. */
49
+ | 'rotated'
50
+ /** A storageState with nothing in it: this app keeps its token where the file cannot reach. */
51
+ | 'empty'
52
+ /** It opens the app. */
53
+ | 'holds'
54
+ /** The check could not run — a navigation error is not a verdict about the session. */
55
+ | 'unknown';
56
+ export interface SessionFacts {
57
+ cookies: number;
58
+ origins: number;
59
+ /** Cookies whose `expires` is in the past, and the soonest one still valid. */
60
+ expired: number;
61
+ /** Seconds until the first cookie expires, when any says. Negative: all gone. */
62
+ expiresInSeconds: number | null;
63
+ /** Cookie domains, as written in the file. */
64
+ domains: string[];
65
+ /** True when at least one cookie or origin is scoped to the app's host. */
66
+ coversHost: boolean;
67
+ host: string;
68
+ }
69
+ /** `www.` and an apex are one site, the same fold `discover --sitemap` applies. */
70
+ export declare function foldHost(host: string): string;
71
+ /** A cookie domain (`.example.com`) covers a host when the host ends with it. */
72
+ export declare function domainCovers(domain: string, host: string): boolean;
73
+ export declare function readFacts(state: StoredSession, baseUrl: string, now?: number): SessionFacts;
74
+ export interface SessionVerdict {
75
+ cause: SessionCause;
76
+ /** True only when the app was actually opened and did not show a login. */
77
+ holds: boolean;
78
+ headline: string;
79
+ /** What to do, or nothing when it holds — a remedy printed on a good run is noise. */
80
+ remedy: string[];
81
+ }
82
+ /**
83
+ * The verdict, from the file's own facts plus — when one was possible — what the app
84
+ * answered.
85
+ *
86
+ * `landed` is undefined when no request was made, which is a legitimate state: the offline
87
+ * causes are conclusive on their own, and opening a browser to re-confirm an expiry date is
88
+ * a request nobody needs to make.
89
+ */
90
+ export declare function judgeSession(facts: SessionFacts, replay?: {
91
+ landed: string;
92
+ wall: boolean;
93
+ error?: string;
94
+ }, loginCommand?: string): SessionVerdict;
95
+ /** "3 days", "4 hours", "12 minutes" — enough precision to act, never a timestamp to parse. */
96
+ export declare function describeAge(seconds: number): string;