scoutline 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 (69) hide show
  1. package/README.md +23 -20
  2. package/dist/capabilities/quota.d.ts +1 -1
  3. package/dist/capabilities/quota.d.ts.map +1 -1
  4. package/dist/commands/crawl.js +1 -1
  5. package/dist/commands/doctor.js +1 -1
  6. package/dist/commands/map.js +1 -1
  7. package/dist/commands/read.js +1 -1
  8. package/dist/commands/research.js +5 -5
  9. package/dist/commands/research.js.map +1 -1
  10. package/dist/commands/search.js +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/lib/async-job-state.d.ts +119 -0
  13. package/dist/lib/async-job-state.d.ts.map +1 -0
  14. package/dist/lib/{research-state.js → async-job-state.js} +43 -34
  15. package/dist/lib/async-job-state.js.map +1 -0
  16. package/dist/lib/cache.d.ts +16 -8
  17. package/dist/lib/cache.d.ts.map +1 -1
  18. package/dist/lib/cache.js +33 -8
  19. package/dist/lib/cache.js.map +1 -1
  20. package/dist/lib/execution.d.ts.map +1 -1
  21. package/dist/lib/execution.js +8 -4
  22. package/dist/lib/execution.js.map +1 -1
  23. package/dist/lib/redact.d.ts +1 -1
  24. package/dist/lib/redact.d.ts.map +1 -1
  25. package/dist/lib/redact.js +9 -1
  26. package/dist/lib/redact.js.map +1 -1
  27. package/dist/providers/exa/adapter.d.ts +2 -2
  28. package/dist/providers/exa/adapter.d.ts.map +1 -1
  29. package/dist/providers/exa/adapter.js +5 -3
  30. package/dist/providers/exa/adapter.js.map +1 -1
  31. package/dist/providers/firecrawl/adapter.d.ts +53 -0
  32. package/dist/providers/firecrawl/adapter.d.ts.map +1 -0
  33. package/dist/providers/firecrawl/adapter.js +962 -0
  34. package/dist/providers/firecrawl/adapter.js.map +1 -0
  35. package/dist/providers/firecrawl/client.d.ts +182 -0
  36. package/dist/providers/firecrawl/client.d.ts.map +1 -0
  37. package/dist/providers/firecrawl/client.js +426 -0
  38. package/dist/providers/firecrawl/client.js.map +1 -0
  39. package/dist/providers/firecrawl/credentials.d.ts +38 -0
  40. package/dist/providers/firecrawl/credentials.d.ts.map +1 -0
  41. package/dist/providers/firecrawl/credentials.js +60 -0
  42. package/dist/providers/firecrawl/credentials.js.map +1 -0
  43. package/dist/providers/firecrawl/diagnostics.d.ts +36 -0
  44. package/dist/providers/firecrawl/diagnostics.d.ts.map +1 -0
  45. package/dist/providers/firecrawl/diagnostics.js +65 -0
  46. package/dist/providers/firecrawl/diagnostics.js.map +1 -0
  47. package/dist/providers/firecrawl/quota.d.ts +46 -0
  48. package/dist/providers/firecrawl/quota.d.ts.map +1 -0
  49. package/dist/providers/firecrawl/quota.js +120 -0
  50. package/dist/providers/firecrawl/quota.js.map +1 -0
  51. package/dist/providers/registry.d.ts.map +1 -1
  52. package/dist/providers/registry.js +2 -0
  53. package/dist/providers/registry.js.map +1 -1
  54. package/dist/providers/tavily/adapter.d.ts +2 -2
  55. package/dist/providers/tavily/adapter.d.ts.map +1 -1
  56. package/dist/providers/tavily/adapter.js +5 -3
  57. package/dist/providers/tavily/adapter.js.map +1 -1
  58. package/dist/providers/types.d.ts +1 -1
  59. package/dist/providers/types.d.ts.map +1 -1
  60. package/dist/providers/types.js +1 -1
  61. package/dist/providers/types.js.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/lib/research-state.d.ts +0 -104
  64. package/dist/lib/research-state.d.ts.map +0 -1
  65. package/dist/lib/research-state.js.map +0 -1
  66. package/dist/providers/minimax/sdk-client.d.ts +0 -29
  67. package/dist/providers/minimax/sdk-client.d.ts.map +0 -1
  68. package/dist/providers/minimax/sdk-client.js +0 -50
  69. package/dist/providers/minimax/sdk-client.js.map +0 -1
package/README.md CHANGED
@@ -21,7 +21,7 @@
21
21
  - **Repo** - Search and read GitHub repository code via ZRead
22
22
  - **Tools** - MCP tool discovery, schemas, and raw calls
23
23
  - **Code Mode** - TypeScript tool chaining for agent automation
24
- - **Provider selection** - Run shared capabilities through Z.AI, MiniMax Token Plan, Tavily, or Brave
24
+ - **Provider selection** - Run shared capabilities through Z.AI, MiniMax, Tavily, Exa, Brave, or Firecrawl
25
25
 
26
26
  ## Quick Start
27
27
 
@@ -82,9 +82,9 @@ npx scoutline --help
82
82
  ## Provider Selection
83
83
 
84
84
  Shared commands (`search`, `vision`, `quota`, `doctor`, `repo`) accept a global
85
- `--provider <zai|minimax|tavily|brave>` flag. Resolution precedence:
85
+ `--provider <zai|minimax|tavily|exa|brave|firecrawl>` flag. Resolution precedence:
86
86
 
87
- 1. Explicit `--provider <zai|minimax|tavily|brave>` on the command line
87
+ 1. Explicit `--provider <zai|minimax|tavily|exa|brave|firecrawl>` on the command line
88
88
  2. `SCOUTLINE_PROVIDER` environment variable
89
89
  3. Compatibility default `zai`
90
90
 
@@ -119,23 +119,26 @@ construction, with no Z.AI fallback.
119
119
 
120
120
  ## Capability Matrix
121
121
 
122
- | Capability | Z.AI | MiniMax | Notes |
123
- | --- | --- | --- | --- |
124
- | `search` | Yes | Yes | MiniMax rejects domain/recency/content-size/location controls |
125
- | `vision.interpret-image` (analyze) | Yes | Yes | Provider-specific media limits; uncached |
126
- | `vision.ui-artifact` (ui-to-code) | Yes | Available | Live-attested; conformance-gated |
127
- | `vision.extract-text` | Yes | Pending | Implemented, pending live conformance |
128
- | `vision.diagnose-error` | Yes | Available | Live-attested; conformance-gated |
129
- | `vision.diagram` | Yes | Pending | Implemented, pending live conformance |
130
- | `vision.chart` | Yes | Pending | Implemented, pending live conformance |
131
- | `vision.diff` (image diff) | Yes | No | Z.AI-only (never MiniMax-claimable) |
132
- | `vision.video` | Yes | No | Z.AI-only (never MiniMax-claimable) |
133
- | `quota` | Yes | Yes | Normalized `QuotaDashboard` (ADR-0001) |
134
- | `diagnostics` (`doctor`) | Yes | Yes | Lists both Providers; probes configured |
135
- | `read` (Reader) | Yes | **No** (UNSUPPORTED_CAPABILITY) | Participates in selection; only Z.AI supplies `reader` |
136
- | `repo search` / `repo read` / `repo tree` | Yes | **No** (UNSUPPORTED_CAPABILITY) | Participates in selection; only Z.AI supplies `repository-exploration` |
137
- | `tools`, `tool`, `call` (Raw tools) | Yes | No | Z.AI-only; accepts but ignores `--provider` |
138
- | `code` (Code Mode) | Yes | No | Z.AI-only; accepts but ignores `--provider` |
122
+ | Capability | Z.AI | MiniMax | Tavily | Firecrawl | Notes |
123
+ | --- | --- | --- | --- | --- | --- |
124
+ | `search` | Yes | Yes | Yes | Yes | MiniMax rejects domain/recency/content-size/location |
125
+ | `vision.interpret-image` (analyze) | Yes | Yes | No | No | Provider-specific media limits; uncached |
126
+ | `vision.ui-artifact` (ui-to-code) | Yes | Available | No | No | Live-attested; conformance-gated |
127
+ | `vision.extract-text` | Yes | Pending | No | No | Implemented, pending live conformance |
128
+ | `vision.diagnose-error` | Yes | Available | No | No | Live-attested; conformance-gated |
129
+ | `vision.diagram` | Yes | Pending | No | No | Implemented, pending live conformance |
130
+ | `vision.chart` | Yes | Pending | No | No | Implemented, pending live conformance |
131
+ | `vision.diff` (image diff) | Yes | No | No | No | Z.AI-only (never MiniMax-claimable) |
132
+ | `vision.video` | Yes | No | No | No | Z.AI-only (never MiniMax-claimable) |
133
+ | `quota` | Yes | Yes | Yes | Yes (credits) | Normalized `QuotaDashboard` (ADR-0001) |
134
+ | `diagnostics` (`doctor`) | Yes | Yes | Yes | Yes | Lists every Provider; probes configured |
135
+ | `read` (Reader) | Yes | **No** | Yes | Yes | Participates in selection; Z.AI-only options rejected by Tavily/Firecrawl |
136
+ | `crawl` | **No** | **No** | Yes | Yes (async) | Tavily sync; Firecrawl async (resumable after Ctrl-C) |
137
+ | `map` | **No** | **No** | Yes | Yes | URL-set discovery; no per-page content |
138
+ | `research` | **No** | **No** | Yes | **No** | Tavily-only (Firecrawl `/deep-research` deprecated); 4-250 credits |
139
+ | `repo search` / `repo read` / `repo tree` | Yes | **No** | **No** | **No** | Participates in selection; only Z.AI supplies `repository-exploration` |
140
+ | `tools`, `tool`, `call` (Raw tools) | Yes | No | No | No | Z.AI-only; accepts but ignores `--provider` |
141
+ | `code` (Code Mode) | Yes | No | No | No | Z.AI-only; accepts but ignores `--provider` |
139
142
 
140
143
  Media limits for general single-image interpretation:
141
144
 
@@ -32,7 +32,7 @@ export interface QuotaWindow {
32
32
  }
33
33
  export interface QuotaCategory {
34
34
  name: string;
35
- unit: "requests" | "tokens";
35
+ unit: "requests" | "tokens" | "credits";
36
36
  current: QuotaWindow;
37
37
  weekly?: QuotaWindow;
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/capabilities/quota.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAM3E,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,IAAI,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,iBAAiB,EAAE,UAAU,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACzC;AAMD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAkDD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAoCvE;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAahG"}
1
+ {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/capabilities/quota.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAM3E,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,IAAI,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,iBAAiB,EAAE,UAAU,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACzC;AAMD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAkDD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAoCvE;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAahG"}
@@ -140,7 +140,7 @@ Options:
140
140
  --no-cache Bypass the response cache for this invocation
141
141
 
142
142
  Common Options:
143
- --provider <id> Override the active Provider (zai | minimax | tavily | exa)
143
+ --provider <id> Override the active Provider (zai | minimax | tavily | exa | firecrawl)
144
144
  --output-format <mode> One of: ${OUTPUT_MODE_LIST} (default: data)
145
145
  -O <mode> Alias for --output-format
146
146
 
@@ -142,7 +142,7 @@ Doctor - Provider-aware environment and connectivity diagnostics
142
142
  Usage: scoutline doctor [options]
143
143
 
144
144
  Reports a schema-version-2 diagnostics report listing every built-in
145
- Provider (zai, minimax, tavily, exa) with its configured state, declared
145
+ Provider (zai, minimax, tavily, exa, firecrawl) with its configured state, declared
146
146
  Capabilities, and connectivity status. The effective Provider (resolved
147
147
  from --provider, SCOUTLINE_PROVIDER, or the default zai) is the
148
148
  Provider that serves a requested capability. The capabilityMatrix field
@@ -100,7 +100,7 @@ Options:
100
100
  --no-cache Bypass the response cache for this invocation
101
101
 
102
102
  Common Options:
103
- --provider <id> Override the active Provider (zai | minimax | tavily | exa)
103
+ --provider <id> Override the active Provider (zai | minimax | tavily | exa | firecrawl)
104
104
  --output-format <mode> One of: ${OUTPUT_MODE_LIST} (default: data)
105
105
  -O <mode> Alias for --output-format
106
106
 
@@ -255,7 +255,7 @@ Options:
255
255
  code | links | tables | headings
256
256
 
257
257
  Common Options:
258
- --provider <id> Override the active Provider (zai | minimax | tavily | exa)
258
+ --provider <id> Override the active Provider (zai | minimax | tavily | exa | firecrawl)
259
259
  --output-format <mode> One of: ${OUTPUT_MODE_LIST} (default: data)
260
260
  -O <mode> Alias for --output-format
261
261
 
@@ -20,8 +20,8 @@
20
20
  import * as fs from "node:fs";
21
21
  import path from "node:path";
22
22
  import { executeCachedOperation } from "../lib/execution.js";
23
- import { researchStateDir } from "../lib/cache.js";
24
- import { computeResearchStateHash } from "../lib/research-state.js";
23
+ import { asyncJobStateDir } from "../lib/cache.js";
24
+ import { computeAsyncJobStateHash } from "../lib/async-job-state.js";
25
25
  import { OUTPUT_MODES } from "../lib/output.js";
26
26
  import { TimeoutError, ValidationError } from "../lib/errors.js";
27
27
  // ---------------------------------------------------------------------------
@@ -183,13 +183,13 @@ export async function research(query, options = {}, deps, _context) {
183
183
  // hash uses the same formula as the adapter (CR3), so the file the
184
184
  // handler reads is the one the adapter wrote.
185
185
  const identity = deps.capability.run.cacheIdentity(request);
186
- const identityHash = computeResearchStateHash({
186
+ const identityHash = computeAsyncJobStateHash({
187
187
  provider: identity.provider,
188
188
  capability: identity.capability,
189
189
  credentialFingerprint: identity.credentialFingerprint,
190
190
  request: identity.request,
191
191
  });
192
- const stateFilePath = path.join(researchStateDir(), `${identityHash}.json`);
192
+ const stateFilePath = path.join(asyncJobStateDir("research"), `${identityHash}.json`);
193
193
  const resumeCommand = `scoutline research "${query}"`;
194
194
  // Register the Ctrl-C handler. Production reads the state file sync
195
195
  // and exits 130; tests inject a recorder.
@@ -292,7 +292,7 @@ Options:
292
292
  --no-cache Bypass the response cache for this invocation
293
293
 
294
294
  Common Options:
295
- --provider <id> Override the active Provider (zai | minimax | tavily | exa)
295
+ --provider <id> Override the active Provider (zai | minimax | tavily | exa | firecrawl)
296
296
  --output-format <mode> One of: ${OUTPUT_MODE_LIST} (default: data)
297
297
  -O <mode> Alias for --output-format
298
298
 
@@ -1 +1 @@
1
- {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/commands/research.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/commands/research.ts"],"names":[],"mappings":"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"}
@@ -178,7 +178,7 @@ Search Command - Real-time web search (Z.AI, MiniMax, Tavily, Exa, or Brave)
178
178
  Usage: scoutline search <query> [options]
179
179
 
180
180
  Provider selection (precedence: explicit flag, then SCOUTLINE_PROVIDER, then zai):
181
- --provider <zai|minimax|tavily|exa|brave> Select the search provider (default: zai)
181
+ --provider <zai|minimax|tavily|exa|brave|firecrawl> Select the search provider (default: zai)
182
182
  SCOUTLINE_PROVIDER=<id> Fallback when --provider is not passed
183
183
 
184
184
  Note: support for the optional controls below varies by provider AND by
package/dist/index.js CHANGED
@@ -55,7 +55,7 @@ Commands:
55
55
  code Execute TypeScript tool chains (Code Mode, Z.AI)
56
56
 
57
57
  Provider selection (precedence: --provider, then SCOUTLINE_PROVIDER, then zai):
58
- --provider <zai|minimax|tavily|exa|brave> Select the active Provider for shared capabilities
58
+ --provider <zai|minimax|tavily|exa|brave|firecrawl> Select the active Provider for shared capabilities
59
59
  SCOUTLINE_PROVIDER=<id> Fallback when --provider is not passed
60
60
 
61
61
  Shared capabilities accept --provider. The 'repo', 'read', 'crawl', 'map',
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Async-job state file — resume mechanism for interrupted async jobs
3
+ * (tech-plan §3, T07 / FC-01).
4
+ *
5
+ * Some Provider operations run asynchronously server-side: a create call
6
+ * starts the job and returns a `requestId`, then a poll call checks it
7
+ * until completion. Tavily Research is the first (POST /research →
8
+ * GET /research/{id}); Firecrawl async Crawl (FC-04) is the second. If
9
+ * the CLI exits (Ctrl-C, crash) mid-poll, the job keeps running and
10
+ * consuming credits/quota. Without a persistence mechanism, the next
11
+ * identical request would start a SECOND job — a double charge.
12
+ *
13
+ * This module persists `{ requestId, identityHash, createdAt, status }`
14
+ * to `<state-dir>/<state-hash>.json` so the next invocation of the same
15
+ * request detects the in-flight job and polls it instead of creating a
16
+ * new one. The state-hash is deterministic for a given
17
+ * `{provider, capability, credentialFingerprint, request}` tuple (see
18
+ * {@link computeAsyncJobStateHash}). The state directory is injected by
19
+ * the caller (the Provider Descriptor resolves it via
20
+ * `asyncJobStateDir(capability)`); this module never touches the cache
21
+ * root, keeping it pure and unit-testable.
22
+ *
23
+ * Boundary rules (ARCHITECTURE.md §2):
24
+ * - May import normalized errors (none today) and node builtins only.
25
+ * - Must NOT import cache-root resolution, transport, command
26
+ * presentation, or a Provider Adapter.
27
+ *
28
+ * Resilience contract (tech-plan §3 / G1-G3):
29
+ * - `write()` uses `{ flag: "wx" }` for atomic creation. A concurrent
30
+ * invocation that finds the file already exists gets EEXIST and
31
+ * polls the existing job instead of creating a new one.
32
+ * - `read()` catches JSON parse errors, deletes the corrupt file, and
33
+ * returns `null` (treated as absent → new job created).
34
+ * - `remove()` deletes the file and ignores ENOENT (already gone).
35
+ *
36
+ * Wire-compat: the persisted `requestId` field name and the `status`
37
+ * enum are fixed by the on-disk format and the SIGINT reader in
38
+ * `commands/research.ts`. They are NOT renamed even though the module
39
+ * is now async-job-generic (critique C1).
40
+ */
41
+ /**
42
+ * A single in-flight async job's persisted state. `status` tracks the
43
+ * last-seen poll status ("pending" or "in_progress"); the poll loop
44
+ * updates it so a resume after Ctrl-C skips statuses already observed.
45
+ *
46
+ * The `requestId` field name is part of the on-disk wire format and is
47
+ * deliberately kept even though the module is generic — the SIGINT path
48
+ * reads `parsed.requestId` off disk synchronously.
49
+ */
50
+ export interface AsyncJobState {
51
+ readonly requestId: string;
52
+ readonly identityHash: string;
53
+ readonly createdAt: string;
54
+ readonly status: "pending" | "in_progress";
55
+ }
56
+ /**
57
+ * Port the Adapter uses to read/write/remove async-job state. Production
58
+ * wires {@link createProductionAsyncJobStateFile}; tests inject in-memory
59
+ * doubles to exercise the lifecycle deterministically without touching
60
+ * the filesystem.
61
+ */
62
+ export interface AsyncJobStateFile {
63
+ read(identityHash: string): Promise<AsyncJobState | null>;
64
+ write(identityHash: string, state: AsyncJobState): Promise<void>;
65
+ remove(identityHash: string): Promise<void>;
66
+ }
67
+ /**
68
+ * Inputs to the async-job state hash. `credentialFingerprint` is the full
69
+ * lowercase SHA-256 hex digest of the active credential (same value used
70
+ * for the response-cache fingerprint). `request` is the normalized
71
+ * Capability request whose recursively key-sorted JSON becomes part of
72
+ * the hash.
73
+ */
74
+ export interface AsyncJobStateHashInput {
75
+ readonly provider: string;
76
+ readonly capability: string;
77
+ readonly credentialFingerprint: string;
78
+ readonly request: unknown;
79
+ }
80
+ /**
81
+ * Compute the deterministic state-file identity hash for an async job
82
+ * (tech-plan §3 / CR3).
83
+ *
84
+ * state-hash = SHA-256(recursively-key-sorted-JSON({
85
+ * provider, capability, credentialFingerprint, request
86
+ * }))
87
+ *
88
+ * Same canonical approach as `buildProviderCacheKey`'s request hashing,
89
+ * extended to include provider + capability + credential. Rotating the
90
+ * API key orphans old state files (correct — the old job belongs to the
91
+ * old key's billing). The hash never contains a raw credential.
92
+ */
93
+ export declare function computeAsyncJobStateHash(input: AsyncJobStateHashInput): string;
94
+ /**
95
+ * Build a production {@link AsyncJobStateFile} backed by files under the
96
+ * caller-supplied `dir` (one JSON file per in-flight job, named
97
+ * `<state-hash>.json`). The caller — typically the Provider Descriptor —
98
+ * resolves `dir` via `asyncJobStateDir(capability)`; this module performs
99
+ * no cache-root resolution itself.
100
+ *
101
+ * - `write()` atomically creates the file with `{ flag: "wx" }`. A
102
+ * concurrent invocation that finds it exists throws EEXIST; the caller
103
+ * catches that and polls the existing job.
104
+ * - `read()` catches JSON parse errors, deletes the corrupt file, and
105
+ * returns `null`.
106
+ * - `remove()` deletes the file and ignores ENOENT.
107
+ */
108
+ export declare function createProductionAsyncJobStateFile(dir: string): AsyncJobStateFile;
109
+ /**
110
+ * Convenience helper exported for the Adapter and tests: builds an
111
+ * in-memory {@link AsyncJobStateFile} that throws EEXIST on a second
112
+ * write to the same hash, mirroring the production `{ flag: "wx" }`
113
+ * contract exactly. The adapter's lifecycle must not depend on whether
114
+ * the state file is disk-backed or memory-backed.
115
+ */
116
+ export declare function createInMemoryAsyncJobStateFile(): AsyncJobStateFile & {
117
+ readonly store: Map<string, string>;
118
+ };
119
+ //# sourceMappingURL=async-job-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-job-state.d.ts","sourceRoot":"","sources":["../../src/lib/async-job-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAUH;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAuBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAQ9E;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAkEhF;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG;IACrE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAgDA"}
@@ -1,38 +1,46 @@
1
1
  /**
2
- * Research state file — resume mechanism for interrupted research
3
- * (tech-plan §3, T07).
2
+ * Async-job state file — resume mechanism for interrupted async jobs
3
+ * (tech-plan §3, T07 / FC-01).
4
4
  *
5
- * Research costs 4-250 credits per request. A research task runs
6
- * asynchronously server-side: POST /research creates it and returns a
7
- * `request_id`, then GET /research/{id} polls until completion. If the
8
- * CLI exits (Ctrl-C, crash) mid-poll, the task keeps running and
9
- * consuming credits. Without a persistence mechanism, the next identical
10
- * request would POST a SECOND task a double charge.
5
+ * Some Provider operations run asynchronously server-side: a create call
6
+ * starts the job and returns a `requestId`, then a poll call checks it
7
+ * until completion. Tavily Research is the first (POST /research →
8
+ * GET /research/{id}); Firecrawl async Crawl (FC-04) is the second. If
9
+ * the CLI exits (Ctrl-C, crash) mid-poll, the job keeps running and
10
+ * consuming credits/quota. Without a persistence mechanism, the next
11
+ * identical request would start a SECOND job — a double charge.
11
12
  *
12
13
  * This module persists `{ requestId, identityHash, createdAt, status }`
13
- * to `~/.scoutline/research/<state-hash>.json` so the next invocation of
14
- * the same request detects the in-flight task and polls it instead of
15
- * creating a new one. The state-hash is deterministic for a given
14
+ * to `<state-dir>/<state-hash>.json` so the next invocation of the same
15
+ * request detects the in-flight job and polls it instead of creating a
16
+ * new one. The state-hash is deterministic for a given
16
17
  * `{provider, capability, credentialFingerprint, request}` tuple (see
17
- * `computeResearchStateHash`).
18
+ * {@link computeAsyncJobStateHash}). The state directory is injected by
19
+ * the caller (the Provider Descriptor resolves it via
20
+ * `asyncJobStateDir(capability)`); this module never touches the cache
21
+ * root, keeping it pure and unit-testable.
18
22
  *
19
23
  * Boundary rules (ARCHITECTURE.md §2):
20
- * - May import cache-root resolution and normalized errors.
21
- * - Must NOT import transport, command presentation, or a Provider
22
- * Adapter.
24
+ * - May import normalized errors (none today) and node builtins only.
25
+ * - Must NOT import cache-root resolution, transport, command
26
+ * presentation, or a Provider Adapter.
23
27
  *
24
28
  * Resilience contract (tech-plan §3 / G1-G3):
25
29
  * - `write()` uses `{ flag: "wx" }` for atomic creation. A concurrent
26
30
  * invocation that finds the file already exists gets EEXIST and
27
- * polls the existing task instead of creating a new one.
31
+ * polls the existing job instead of creating a new one.
28
32
  * - `read()` catches JSON parse errors, deletes the corrupt file, and
29
- * returns `null` (treated as absent → new task created).
33
+ * returns `null` (treated as absent → new job created).
30
34
  * - `remove()` deletes the file and ignores ENOENT (already gone).
35
+ *
36
+ * Wire-compat: the persisted `requestId` field name and the `status`
37
+ * enum are fixed by the on-disk format and the SIGINT reader in
38
+ * `commands/research.ts`. They are NOT renamed even though the module
39
+ * is now async-job-generic (critique C1).
31
40
  */
32
41
  import crypto from "node:crypto";
33
42
  import * as fs from "node:fs/promises";
34
43
  import path from "node:path";
35
- import { researchStateDir } from "./cache.js";
36
44
  /**
37
45
  * Recursively sort object keys so `JSON.stringify` produces a stable
38
46
  * representation regardless of insertion order. Mirrors the cache module's
@@ -54,8 +62,8 @@ function sortKeysDeep(value) {
54
62
  return value;
55
63
  }
56
64
  /**
57
- * Compute the deterministic state-file identity hash for a research
58
- * request (tech-plan §3 / CR3).
65
+ * Compute the deterministic state-file identity hash for an async job
66
+ * (tech-plan §3 / CR3).
59
67
  *
60
68
  * state-hash = SHA-256(recursively-key-sorted-JSON({
61
69
  * provider, capability, credentialFingerprint, request
@@ -63,10 +71,10 @@ function sortKeysDeep(value) {
63
71
  *
64
72
  * Same canonical approach as `buildProviderCacheKey`'s request hashing,
65
73
  * extended to include provider + capability + credential. Rotating the
66
- * API key orphans old state files (correct — the old task belongs to the
74
+ * API key orphans old state files (correct — the old job belongs to the
67
75
  * old key's billing). The hash never contains a raw credential.
68
76
  */
69
- export function computeResearchStateHash(input) {
77
+ export function computeAsyncJobStateHash(input) {
70
78
  const payload = {
71
79
  provider: input.provider,
72
80
  capability: input.capability,
@@ -79,20 +87,22 @@ export function computeResearchStateHash(input) {
79
87
  // Production state-file implementation
80
88
  // ---------------------------------------------------------------------------
81
89
  /**
82
- * Build a production {@link ResearchStateFile} backed by files under
83
- * `~/.scoutline/research/` (via {@link researchStateDir}). One JSON file
84
- * per in-flight task, named `<state-hash>.json`.
90
+ * Build a production {@link AsyncJobStateFile} backed by files under the
91
+ * caller-supplied `dir` (one JSON file per in-flight job, named
92
+ * `<state-hash>.json`). The caller — typically the Provider Descriptor —
93
+ * resolves `dir` via `asyncJobStateDir(capability)`; this module performs
94
+ * no cache-root resolution itself.
85
95
  *
86
96
  * - `write()` atomically creates the file with `{ flag: "wx" }`. A
87
97
  * concurrent invocation that finds it exists throws EEXIST; the caller
88
- * catches that and polls the existing task.
98
+ * catches that and polls the existing job.
89
99
  * - `read()` catches JSON parse errors, deletes the corrupt file, and
90
100
  * returns `null`.
91
101
  * - `remove()` deletes the file and ignores ENOENT.
92
102
  */
93
- export function createProductionResearchStateFile() {
103
+ export function createProductionAsyncJobStateFile(dir) {
94
104
  function filePath(identityHash) {
95
- return path.join(researchStateDir(), `${identityHash}.json`);
105
+ return path.join(dir, `${identityHash}.json`);
96
106
  }
97
107
  return {
98
108
  async read(identityHash) {
@@ -129,19 +139,18 @@ export function createProductionResearchStateFile() {
129
139
  }
130
140
  catch {
131
141
  // Corrupt JSON — delete the file so the next run creates a fresh
132
- // task instead of forever reading garbage.
142
+ // job instead of forever reading garbage.
133
143
  await fs.unlink(file).catch(() => { });
134
144
  return null;
135
145
  }
136
146
  },
137
147
  async write(identityHash, state) {
138
- const dir = researchStateDir();
139
148
  await fs.mkdir(dir, { recursive: true });
140
149
  const file = filePath(identityHash);
141
150
  const payload = JSON.stringify(state);
142
151
  // `{ flag: "wx" }` atomically creates the file only if it does not
143
152
  // exist. A concurrent invocation that lost the race gets EEXIST;
144
- // the caller catches it and polls the existing task instead of
153
+ // the caller catches it and polls the existing job instead of
145
154
  // creating a second one.
146
155
  await fs.writeFile(file, payload, { flag: "wx" });
147
156
  },
@@ -159,12 +168,12 @@ export function createProductionResearchStateFile() {
159
168
  }
160
169
  /**
161
170
  * Convenience helper exported for the Adapter and tests: builds an
162
- * in-memory {@link ResearchStateFile} that throws EEXIST on a second
171
+ * in-memory {@link AsyncJobStateFile} that throws EEXIST on a second
163
172
  * write to the same hash, mirroring the production `{ flag: "wx" }`
164
173
  * contract exactly. The adapter's lifecycle must not depend on whether
165
174
  * the state file is disk-backed or memory-backed.
166
175
  */
167
- export function createInMemoryResearchStateFile() {
176
+ export function createInMemoryAsyncJobStateFile() {
168
177
  const store = new Map();
169
178
  return {
170
179
  store,
@@ -211,4 +220,4 @@ export function createInMemoryResearchStateFile() {
211
220
  },
212
221
  };
213
222
  }
214
- //# sourceMappingURL=research-state.js.map
223
+ //# sourceMappingURL=async-job-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-job-state.js","sourceRoot":"","sources":["../../src/lib/async-job-state.ts"],"names":[],"mappings":"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"}
@@ -70,18 +70,26 @@ export declare function resolveCacheRootPure(env: CacheDirEnvironment, plat: Cac
70
70
  */
71
71
  export declare function toolCacheDir(): string;
72
72
  /**
73
- * Directory for the Research state files (tech-plan §3, T07). Always a
74
- * `research/` subdirectory under the unified root, sibling of
75
- * {@link responseCacheDir} and {@link toolCacheDir}.
73
+ * Directory for async-job state files (tech-plan §3, T07 / FC-01). One
74
+ * subdirectory per capability under the unified cache root `research/`
75
+ * for in-flight research tasks, `crawl/` for async crawl jobs — sibling
76
+ * of {@link responseCacheDir} and {@link toolCacheDir}.
76
77
  *
77
- * Each file holds a single in-flight research task's `request_id` so the
78
- * CLI can resume polling after Ctrl-C instead of creating a second task
79
- * (double-charge prevention). The state files have their own lifecycle
78
+ * Each file holds a single in-flight task's `requestId` so the CLI can
79
+ * resume polling after Ctrl-C instead of creating a second task
80
+ * (double-charge prevention). State files have their own lifecycle
80
81
  * (deleted on task completion or failure); they are NOT cleared by
81
82
  * `clearAllCaches()` and are NOT scanned by `cacheStats()` — they are
82
83
  * billing state, not cache entries.
83
- */
84
- export declare function researchStateDir(): string;
84
+ *
85
+ * `capability` is the single path segment naming the subdirectory. It is
86
+ * guarded: a non-empty segment with no path separators, no `..`/`.`
87
+ * self-references, and no NUL bytes, whose resolved path stays inside the
88
+ * cache root. A bad segment throws rather than silently writing billing
89
+ * state outside the root. Callers pass an internal constant
90
+ * (`"research"`, `"crawl"`); it is never user input.
91
+ */
92
+ export declare function asyncJobStateDir(capability: string): string;
85
93
  /**
86
94
  * Call-time cache-enabled check for the RESPONSE cache (H1 fix). Honours
87
95
  * `SCOUTLINE_CACHE` (canonical) with `ZAI_CACHE` as a legacy alias. Read
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"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"}