scoutline 0.16.0 → 0.17.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 (58) hide show
  1. package/README.md +47 -0
  2. package/dist/command-invocation.d.ts +2 -2
  3. package/dist/command-invocation.d.ts.map +1 -1
  4. package/dist/command-invocation.js +1 -1
  5. package/dist/command-invocation.js.map +1 -1
  6. package/dist/commands/research.d.ts +45 -0
  7. package/dist/commands/research.d.ts.map +1 -1
  8. package/dist/commands/research.js +152 -4
  9. package/dist/commands/research.js.map +1 -1
  10. package/dist/commands/search.d.ts +11 -0
  11. package/dist/commands/search.d.ts.map +1 -1
  12. package/dist/commands/search.js +31 -2
  13. package/dist/commands/search.js.map +1 -1
  14. package/dist/commands/usage.d.ts +101 -0
  15. package/dist/commands/usage.d.ts.map +1 -0
  16. package/dist/commands/usage.js +228 -0
  17. package/dist/commands/usage.js.map +1 -0
  18. package/dist/commands/vision.d.ts +28 -0
  19. package/dist/commands/vision.d.ts.map +1 -1
  20. package/dist/commands/vision.js +452 -0
  21. package/dist/commands/vision.js.map +1 -1
  22. package/dist/index.d.ts +25 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +572 -10
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/batch-assign.d.ts +61 -0
  27. package/dist/lib/batch-assign.d.ts.map +1 -0
  28. package/dist/lib/batch-assign.js +118 -0
  29. package/dist/lib/batch-assign.js.map +1 -0
  30. package/dist/lib/batch-manifest.d.ts +183 -0
  31. package/dist/lib/batch-manifest.d.ts.map +1 -0
  32. package/dist/lib/batch-manifest.js +644 -0
  33. package/dist/lib/batch-manifest.js.map +1 -0
  34. package/dist/lib/batch-runner.d.ts +169 -0
  35. package/dist/lib/batch-runner.d.ts.map +1 -0
  36. package/dist/lib/batch-runner.js +357 -0
  37. package/dist/lib/batch-runner.js.map +1 -0
  38. package/dist/lib/consumption.d.ts +17 -0
  39. package/dist/lib/consumption.d.ts.map +1 -1
  40. package/dist/lib/consumption.js +38 -0
  41. package/dist/lib/consumption.js.map +1 -1
  42. package/dist/lib/context-file.d.ts +90 -0
  43. package/dist/lib/context-file.d.ts.map +1 -0
  44. package/dist/lib/context-file.js +244 -0
  45. package/dist/lib/context-file.js.map +1 -0
  46. package/dist/lib/trigger-detection.d.ts +21 -0
  47. package/dist/lib/trigger-detection.d.ts.map +1 -1
  48. package/dist/lib/trigger-detection.js +63 -0
  49. package/dist/lib/trigger-detection.js.map +1 -1
  50. package/dist/lib/usage-ledger.d.ts +221 -0
  51. package/dist/lib/usage-ledger.d.ts.map +1 -0
  52. package/dist/lib/usage-ledger.js +408 -0
  53. package/dist/lib/usage-ledger.js.map +1 -0
  54. package/dist/node-command-invocation-adapter.d.ts +25 -0
  55. package/dist/node-command-invocation-adapter.d.ts.map +1 -1
  56. package/dist/node-command-invocation-adapter.js +73 -38
  57. package/dist/node-command-invocation-adapter.js.map +1 -1
  58. package/package.json +1 -1
package/README.md CHANGED
@@ -22,6 +22,7 @@
22
22
  - **Tools** - MCP tool discovery, schemas, and raw calls
23
23
  - **Code Mode** - TypeScript tool chaining for agent automation
24
24
  - **Provider selection** - Run shared capabilities through Z.AI, MiniMax, Tavily, Exa, Brave, Firecrawl, Parallel AI, Perplexity, or Jina AI
25
+ - **Usage ledger** - Local 90-day call-usage history per provider and capability (`scoutline usage`), counters only
25
26
 
26
27
  ## Quick Start
27
28
 
@@ -205,6 +206,46 @@ every arm runs every sub-query and occurrences span the arms ×
205
206
  sub-queries grid. Disable the standing switch with
206
207
  `scoutline config set fanout false`.
207
208
 
209
+ ### Local Context (`--context` / `--context-stdin`)
210
+
211
+ Steer `research` and `search` with a local notes file (markdown headings and
212
+ question lines; max 256 KiB, text only — NUL-byte detection rejects binary
213
+ input). `--context <path>` reads a file; `--context-stdin` reads the same
214
+ content from standard input. The two flags are mutually exclusive.
215
+
216
+ ```bash
217
+ scoutline research "quokka conservation" --context notes.md # organize (default)
218
+ scoutline research "quokka conservation" --context notes.md --context-mode bias
219
+ cat notes.md | scoutline research "quokka conservation" --context-stdin
220
+ scoutline search "rust async" --context notes.md
221
+ ```
222
+
223
+ **Research modes** (`--context-mode organize | bias | both`): `organize`
224
+ (the default) re-presents the provider's report following your file's
225
+ headings — a purely local reordering, so the wire request and the response
226
+ cache key are untouched. `bias` (and `both`) append a capped
227
+ `(focus: ...)` term segment to the query before it is sent: that segment is
228
+ derived from your file and is what leaves your machine under those modes —
229
+ and it changes the cache key, so each mode is a separate (paid) job. The
230
+ resume command printed after an interrupt carries your context flags; with
231
+ `--context-stdin` you must re-pipe the same content unchanged.
232
+
233
+ **Search derivation**: `search --context` derives up to 8 sub-queries from
234
+ the file's headings and questions, always keeps your original query first,
235
+ and merges and dedupes all results. What leaves your machine under
236
+ `search --context`: the derived sub-query strings themselves become the
237
+ search queries — the file is never sent. Under fan-out this multiplies
238
+ cost (N sub-queries × M arms = N×M billable searches, disclosed once on
239
+ stderr). `--context` and `--context-stdin` are mutually exclusive with `--merge`.
240
+
241
+ **Privacy boundary**: parsed file content crosses the network in exactly
242
+ two shapes — the research `bias`/`both` focus segment and the
243
+ search-derived sub-query strings. Everything else stays local: `organize`
244
+ sends nothing derived, JSON outputs record only counts, the source path,
245
+ and a SHA-256 of the content, and no heading, question, term, or file byte
246
+ appears in notices or logs. Without these flags, `research` and `search`
247
+ output is byte-identical to previous releases.
248
+
208
249
  ## Capability Matrix
209
250
 
210
251
  The matrix below is generated from the production provider registry
@@ -320,6 +361,7 @@ scoutline repo --help # GitHub repo commands
320
361
  scoutline doctor --help # Provider diagnostics
321
362
  scoutline quota --help # Plan usage
322
363
  scoutline cache --help # Local cache inspection, clearing, and pruning
364
+ scoutline usage --help # Local call-usage history (usage.json ledger)
323
365
  ```
324
366
 
325
367
  ### Examples
@@ -367,6 +409,11 @@ scoutline cache clear # delete every file under cache/ and tools
367
409
  scoutline cache prune # delete expired entries (effective TTL threshold)
368
410
  scoutline cache prune --older-than 168h --provider zai # age override + selectors (AND together)
369
411
 
412
+ # Usage - local call-usage history (billable attempts, not credits)
413
+ scoutline usage # last 7 days, every provider (usage.json ledger)
414
+ scoutline usage --days 30 # wider UTC-day window
415
+ scoutline usage --provider zai # one provider's rows only
416
+
370
417
  # Config - inspect and change settings (scriptable, always redacted)
371
418
  scoutline config get # full config dump (credentials masked)
372
419
  scoutline config set routing.search tavily,brave
@@ -26,14 +26,14 @@ export interface TextCommandResult {
26
26
  export type CommandResult<T = unknown> = DataCommandResult<T> | TextCommandResult;
27
27
  export interface CommandContext {
28
28
  readonly stdinIsTTY: boolean;
29
- readStdin(): Promise<string>;
29
+ readStdin(maxBytes?: number): Promise<string>;
30
30
  notice(message: string): void;
31
31
  }
32
32
  export interface CommandInvocationAdapter {
33
33
  readonly stdoutIsTTY: boolean;
34
34
  readonly stdinIsTTY: boolean;
35
35
  readonly environmentOutputMode?: string;
36
- readStdin(): Promise<string>;
36
+ readStdin(maxBytes?: number): Promise<string>;
37
37
  writeStdout(value: string): void;
38
38
  writeStderr(value: string): void;
39
39
  runQuietly<T>(operation: () => Promise<T>): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"command-invocation.d.ts","sourceRoot":"","sources":["../src/command-invocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAgDD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,EAC7D,UAAU,EAAE,UAAU,EACtB,GAAG,GAAE,MAAM,MAAiB,EAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,CA2CjB"}
1
+ {"version":3,"file":"command-invocation.d.ts","sourceRoot":"","sources":["../src/command-invocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAgDD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,EAC7D,UAAU,EAAE,UAAU,EACtB,GAAG,GAAE,MAAM,MAAiB,EAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,CA2CjB"}
@@ -73,7 +73,7 @@ export async function invokeCommand(adapter, behavior, outputMode, now = Date.no
73
73
  const resolvedSecrets = secrets ?? configuredSecrets();
74
74
  const context = {
75
75
  stdinIsTTY: adapter.stdinIsTTY,
76
- readStdin: () => adapter.readStdin(),
76
+ readStdin: (maxBytes) => adapter.readStdin(maxBytes),
77
77
  notice: (message) => {
78
78
  notices.push(message);
79
79
  },
@@ -1 +1 @@
1
- {"version":3,"file":"command-invocation.js","sourceRoot":"","sources":["../src/command-invocation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-invocation.js","sourceRoot":"","sources":["../src/command-invocation.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ import type { CommandContext, CommandResult } from "../command-invocation.js";
21
21
  import type { ResearchCapability } from "../capabilities/research.js";
22
22
  import type { ProviderId } from "../providers/types.js";
23
23
  import type { ExecutionDependencies } from "../lib/execution.js";
24
+ import type { ContextSourceContent, ParsedContextText } from "../lib/context-file.js";
24
25
  export interface ResearchOptions {
25
26
  readonly model?: "mini" | "pro" | "auto";
26
27
  readonly outputLength?: "short" | "standard" | "long";
@@ -30,6 +31,43 @@ export interface ResearchOptions {
30
31
  /** Polling timeout in seconds. Default 300. */
31
32
  readonly timeout?: number;
32
33
  readonly noCache?: boolean;
34
+ /**
35
+ * Local-context plan, Ticket 3 (DESIGN D5): resume-bearing context
36
+ * flags consumed by `buildResearchResumeCommand` only — the wire
37
+ * request builder ignores this field (the D2.5 mutation derives
38
+ * from `ResearchHandlerDependencies.context`, not from here).
39
+ */
40
+ readonly context?: ResearchResumeContext;
41
+ }
42
+ /** Local-context plan, DESIGN D1: `--context-mode` values (research only). */
43
+ export type ResearchContextMode = "organize" | "bias" | "both";
44
+ /**
45
+ * Local-context plan, Ticket 3 (DESIGN D5): the resume-command view of
46
+ * the context flags. `path` is the original `--context` value (file
47
+ * sources only); `mode` records ONLY an explicitly-set
48
+ * `--context-mode` — undefined (the organize default) stays omitted,
49
+ * matching `buildResearchResumeCommand`'s set-values-only convention.
50
+ */
51
+ export interface ResearchResumeContext {
52
+ readonly source: "file" | "stdin";
53
+ readonly path?: string;
54
+ readonly mode?: ResearchContextMode;
55
+ }
56
+ /**
57
+ * Local-context plan, Ticket 2: what the handler threads into
58
+ * `research()` for `--context` / `--context-stdin`. The source is read
59
+ * (`readContextSource`) and parsed (`parseContextText`) exactly ONCE
60
+ * in `handleResearch`, BEFORE `executeWithFallback` — stdin drains on
61
+ * the first read, so a per-fallback-attempt read would hand the retry
62
+ * an empty string, silently mutate the request, and hash to a
63
+ * different async-job state file (DESIGN D5's second-paid-job trap).
64
+ * `research()` consumes this field only (D4 remap + D5 envelope field)
65
+ * and never re-reads the source.
66
+ */
67
+ export interface ResearchContextInput {
68
+ readonly mode: ResearchContextMode;
69
+ readonly content: ContextSourceContent;
70
+ readonly parsed: ParsedContextText;
33
71
  }
34
72
  /**
35
73
  * Dependencies injected by `src/index.ts` after Provider selection,
@@ -54,6 +92,13 @@ export interface ResearchHandlerDependencies {
54
92
  * returns a teardown.
55
93
  */
56
94
  readonly registerInterrupt?: (stateFilePath: string, resumeCommand: string) => (print: () => void) => () => void;
95
+ /**
96
+ * Local-context plan, Ticket 2 (DESIGN D3/D5): parsed local context
97
+ * from `--context` / `--context-stdin`, read + parsed once in the
98
+ * handler before the fallback executor runs. Absent → byte-identical
99
+ * pre-context behavior (no remap, no envelope field).
100
+ */
101
+ readonly context?: ResearchContextInput;
57
102
  }
58
103
  export declare function validateModel(value: unknown): "mini" | "pro" | "auto" | undefined;
59
104
  export declare function validateOutputLength(value: unknown): "short" | "standard" | "long" | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/commands/research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAWjE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAC3B,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,KAClB,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;CACxC;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAgBjF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAgB9F;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAgBpD;AAMD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAUvF;AAqCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,UAAU,GACrB,MAAM,CASR;AA4FD,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,YAAK,EAC7B,IAAI,EAAE,2BAA2B,EACjC,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,aAAa,CAAC,CAyGxB;AAQD,eAAO,MAAM,aAAa,QAmElB,CAAC"}
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/commands/research.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ import { asyncJobStateDir } from "../lib/cache.js";
24
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
+ import { buildBiasAppend, slug } from "../lib/context-file.js";
27
28
  // ---------------------------------------------------------------------------
28
29
  // Parse-level validation
29
30
  // ---------------------------------------------------------------------------
@@ -150,6 +151,26 @@ export function buildResearchResumeCommand(query, options, providerId) {
150
151
  parts.push(`--citation-format ${options.citationFormat}`);
151
152
  if (options.domain !== undefined)
152
153
  parts.push(`--domain ${shellQuote(options.domain)}`);
154
+ // Local-context plan, Ticket 3 (DESIGN D5): the resume command must
155
+ // carry the context source. Under bias/both, `--context` alone would
156
+ // revert to the organize default, compute the un-mutated query, and
157
+ // hash to a different state file — silently starting a second paid
158
+ // job; under organize it is output-bearing (the resumed run re-maps
159
+ // sections and re-emits the envelope `context` field). Any file
160
+ // source appends `--context <path>` (shell-quoted); stdin sources
161
+ // carry `--context-stdin` — piped bytes cannot be embedded in a
162
+ // shell command, so help notes the user must re-pipe the same
163
+ // content unchanged. `--context-mode` appears only when the original
164
+ // invocation set it explicitly (unset values stay omitted).
165
+ if (options.context?.source === "file" && options.context.path !== undefined) {
166
+ parts.push(`--context ${shellQuote(options.context.path)}`);
167
+ }
168
+ else if (options.context?.source === "stdin") {
169
+ parts.push("--context-stdin");
170
+ }
171
+ if (options.context?.mode !== undefined) {
172
+ parts.push(`--context-mode ${options.context.mode}`);
173
+ }
153
174
  return parts.join(" ");
154
175
  }
155
176
  /**
@@ -213,6 +234,67 @@ function parseReportSections(report) {
213
234
  }
214
235
  return sections.filter((s) => !/^(sources?|references?|citations?)$/i.test(s.heading));
215
236
  }
237
+ /** Local-context DESIGN D4: body for a context heading no provider section matched. */
238
+ const NO_MATCHING_SECTION_BODY = "(no matching section in the provider report)";
239
+ /**
240
+ * Local-context DESIGN D4 (organize mode): re-present the provider's
241
+ * sections following the context file's headings, matching by EXACT
242
+ * slug equality (`slug` from lib/context-file.js — no prefix/fuzzy
243
+ * matching; determinism). All-non-Latin headings slug to "" under the
244
+ * normative ASCII formula; those match by exact RAW heading equality
245
+ * (lowercased, mirroring slug's first step) instead, so an
246
+ * identically-headed provider section still maps while unrelated
247
+ * ""-slug headings never fuse.
248
+ *
249
+ * - Output order: context headings in order. Each takes the bodies of
250
+ * ALL provider sections whose slug is equal, concatenated in
251
+ * provider order. A provider section is consumed by at most ONE
252
+ * context heading — the first in document order whose slug matches
253
+ * it — so a later context heading sharing that slug gets no match.
254
+ * - An unmatched context heading is kept with a placeholder body.
255
+ * - Unmatched provider sections are appended after the mapped block in
256
+ * their original order — never dropped (data-loss rule). With zero
257
+ * context headings the function is a structural no-op.
258
+ */
259
+ function remapSectionsToContext(sections, contextHeadings) {
260
+ const consumed = new Array(sections.length).fill(false);
261
+ const remapped = [];
262
+ for (const heading of contextHeadings) {
263
+ const key = slug(heading);
264
+ // An all-non-Latin heading slugs to "" under the normative D4 ASCII
265
+ // formula, and ""-equality would fuse every such heading with every
266
+ // other one. Fall back to exact raw-heading equality (lowercased,
267
+ // mirroring slug's first step): an identically-headed provider
268
+ // section still matches, while unrelated ""-slug headings never do.
269
+ // Both parsers trim headings, so no re-trim is needed here.
270
+ const matches = key !== ""
271
+ ? (sectionHeading) => slug(sectionHeading) === key
272
+ : (sectionHeading) => sectionHeading.toLowerCase() === heading.toLowerCase();
273
+ const bodies = [];
274
+ for (let i = 0; i < sections.length; i++) {
275
+ if (consumed[i])
276
+ continue;
277
+ const section = sections[i];
278
+ if (section === undefined)
279
+ continue;
280
+ if (matches(section.heading)) {
281
+ consumed[i] = true;
282
+ bodies.push(section.body);
283
+ }
284
+ }
285
+ remapped.push({
286
+ heading,
287
+ body: bodies.length > 0 ? bodies.join("\n\n") : NO_MATCHING_SECTION_BODY,
288
+ });
289
+ }
290
+ for (let i = 0; i < sections.length; i++) {
291
+ const section = sections[i];
292
+ if (!consumed[i] && section !== undefined) {
293
+ remapped.push(section);
294
+ }
295
+ }
296
+ return remapped;
297
+ }
216
298
  function buildResearchPresentations(sections, sources) {
217
299
  const compact = sections.map((s) => s.body).join("\n\n");
218
300
  const markdown = sections.map((s) => `## ${s.heading}\n\n${s.body}`).join("\n\n") +
@@ -236,7 +318,19 @@ export async function research(query, options = {}, deps, _context) {
236
318
  if (typeof query !== "string" || query.trim() === "") {
237
319
  throw new ValidationError("Research query must contain at least one non-whitespace character");
238
320
  }
239
- const request = buildResearchRequest(query, options);
321
+ const contextInput = deps.context;
322
+ // Local-context plan, Ticket 3 (DESIGN D2.5/D5): under bias/both the
323
+ // parsed focus terms are appended to a LOCAL query copy that feeds
324
+ // ONLY `buildResearchRequest` — the resume command below still
325
+ // receives the ORIGINAL query, so re-running it re-derives the
326
+ // identical mutation (deterministic from query + source bytes; an
327
+ // unchanged source hashes to the same state file). organize is pure
328
+ // local re-presentation and leaves the request untouched (pinned by
329
+ // the Ticket 2 cache-identity golden).
330
+ const wireQuery = contextInput !== undefined && contextInput.mode !== "organize"
331
+ ? buildBiasAppend(query, contextInput.parsed.terms)
332
+ : query;
333
+ const request = buildResearchRequest(wireQuery, options);
240
334
  // Compute the state-file path AND the canonical resume command for
241
335
  // the SIGINT handler. Both are derived from this attempt's
242
336
  // capability (re-bound on every candidate the executor walks — the
@@ -302,21 +396,49 @@ export async function research(query, options = {}, deps, _context) {
302
396
  ? result.report.slice(0, options.maxChars - 1).trimEnd() + "…"
303
397
  : result.report;
304
398
  const sections = parseReportSections(reportText);
399
+ // Local-context plan, Ticket 2 (DESIGN D4): under organize (and
400
+ // both, which includes it) re-present the provider's sections
401
+ // following the context file's headings. Purely local — the wire
402
+ // request and the cache entry are untouched (pinned by the
403
+ // cache-identity golden test). `bias` alone does not reorganize.
404
+ const effectiveSections = contextInput !== undefined && contextInput.mode !== "bias"
405
+ ? remapSectionsToContext(sections, contextInput.parsed.headings)
406
+ : sections;
305
407
  const envelope = {
306
408
  schemaVersion: result.schemaVersion,
307
409
  query: result.query,
308
410
  model: result.model,
309
- sections,
411
+ sections: effectiveSections,
310
412
  sources: result.sources,
311
413
  };
312
414
  if (options.maxChars && options.maxChars > 0 && result.report.length > options.maxChars) {
313
415
  envelope.reportTruncated = true;
314
416
  envelope.originalReportLength = result.report.length;
315
417
  }
418
+ // Local-context plan, Ticket 2 (DESIGN D5): one optional envelope
419
+ // field recording what was parsed locally — counts, hashes, and
420
+ // the path only, never content (D6 privacy boundary). schemaVersion
421
+ // stays 1.
422
+ if (contextInput !== undefined) {
423
+ const contextField = {
424
+ source: contextInput.content.source,
425
+ sha256: contextInput.content.sha256,
426
+ mode: contextInput.mode,
427
+ derived: {
428
+ headings: contextInput.parsed.headings.length,
429
+ questions: contextInput.parsed.questions.length,
430
+ terms: contextInput.parsed.terms.length,
431
+ },
432
+ };
433
+ if (contextInput.content.path !== undefined) {
434
+ contextField.path = contextInput.content.path;
435
+ }
436
+ envelope.context = contextField;
437
+ }
316
438
  return {
317
439
  kind: "data",
318
440
  data: envelope,
319
- presentations: buildResearchPresentations(sections, result.sources),
441
+ presentations: buildResearchPresentations(effectiveSections, result.sources),
320
442
  };
321
443
  }
322
444
  finally {
@@ -339,7 +461,9 @@ and synthesizes a cited report. This is a CREDIT-INTENSIVE operation
339
461
  Ctrl-C safety: interrupting a research task does NOT lose credits. The
340
462
  task keeps running server-side and its request_id is persisted to a state
341
463
  file. Re-running the SAME command resumes polling instead of creating a
342
- second task (no double charge).
464
+ second task (no double charge). If the original run used --context-stdin,
465
+ re-pipe the same content unchanged when resuming — piped bytes cannot be
466
+ embedded in the printed resume command.
343
467
 
344
468
  Provider selection (precedence: --provider, then SCOUTLINE_PROVIDER,
345
469
  then the configured default):
@@ -375,6 +499,25 @@ Options:
375
499
  --timeout <s> Polling timeout in seconds (default: 300)
376
500
  --no-cache Bypass the response cache for this invocation
377
501
 
502
+ Local context (steer the report from a local notes file; the two
503
+ source flags are mutually exclusive):
504
+ --context <path> Read a text/markdown file (max 256 KiB) as
505
+ research context.
506
+ --context-stdin Read the same content from standard input
507
+ (no value; pipe the file in). Resuming an
508
+ interrupted run re-pipes the same content
509
+ unchanged (see Ctrl-C safety above).
510
+ --context-mode <m> organize (default) | bias | both.
511
+ organize re-presents the returned report
512
+ following your file's headings — purely local:
513
+ the wire request, the cache key, and what leaves
514
+ your machine are unchanged.
515
+ bias/both append a "(focus: ...)" term segment
516
+ to the query. That segment is derived from your
517
+ file and is what leaves your machine under these
518
+ modes; it also changes the cache key, so a
519
+ different mode is a fresh (paid) job.
520
+
378
521
  Common Options:
379
522
  --provider <id> Override the active Provider (zai | minimax | tavily | exa | brave | firecrawl | parallel | perplexity | jina)
380
523
  --output-format <mode> One of: ${OUTPUT_MODE_LIST} (default: data)
@@ -389,9 +532,14 @@ Output format (schema-version-1):
389
532
  "sources": [{ "title": "...", "url": "..." }]
390
533
  }
391
534
 
535
+ Under --context an optional "context" field records the source,
536
+ path, sha256, mode, and derived counts — metadata only, never file
537
+ content.
538
+
392
539
  Examples:
393
540
  scoutline research "Compare React vs Svelte for enterprise apps"
394
541
  scoutline research "State of carbon capture 2025" --model pro
542
+ scoutline research "Quokka conservation" --context notes.md
395
543
  scoutline research "Quantum computing benchmarks" --citation-format apa
396
544
  scoutline --provider tavily research "Rust async runtime comparison"
397
545
  `.trim();
@@ -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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"}
@@ -41,6 +41,17 @@ export interface SearchExecutionDependencies {
41
41
  readonly sleep: (ms: number) => Promise<void>;
42
42
  readonly random: () => number;
43
43
  readonly retryPolicy?: RetryPolicy;
44
+ /**
45
+ * Optional consumption sink (usage-ledger DESIGN D7 — PB-T2 parity
46
+ * with the fan-out executor and the other billable handlers). When
47
+ * present, every sub-query's `executeSearch` emits one consumption
48
+ * event per billable invoke attempt through it. When absent (the
49
+ * default), no event is emitted and behavior is byte-for-byte
50
+ * identical to before.
51
+ */
52
+ readonly consume?: ConsumptionSink;
53
+ /** Timestamp source for consumption events; defaults to `Date.now`. */
54
+ readonly now?: () => number;
44
55
  }
45
56
  interface FormattedResult {
46
57
  rank: number;
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -182,7 +182,7 @@ function splitMergeSubQueries(query) {
182
182
  return subQueries;
183
183
  }
184
184
  export async function search(query, options = {}, deps, context) {
185
- const { capability, cache, sleep, random, retryPolicy } = deps;
185
+ const { capability, cache, sleep, random, retryPolicy, consume, now } = deps;
186
186
  // Split query on `|` if --merge is set. Empty fragments are dropped.
187
187
  // A literal pipe in a single query can be escaped as `\|` (won't split).
188
188
  let subQueries = [query];
@@ -191,7 +191,16 @@ export async function search(query, options = {}, deps, context) {
191
191
  }
192
192
  const isMerge = subQueries.length > 1;
193
193
  const controls = buildControls(options);
194
- const executionDeps = { cache, sleep, random };
194
+ // DESIGN D7: thread the optional consumption sink + clock through the
195
+ // same conditional-spread shape the fan-out executor uses, so the
196
+ // single-pin path bills exactly like a fan-out arm.
197
+ const executionDeps = {
198
+ cache,
199
+ sleep,
200
+ random,
201
+ ...(consume !== undefined ? { consume } : {}),
202
+ ...(now !== undefined ? { now } : {}),
203
+ };
195
204
  // One executeSearch per sub-query. Each Adapter isolates its own
196
205
  // transport per invocation, so the command does not manage client
197
206
  // counts or close transports.
@@ -547,6 +556,25 @@ Options:
547
556
  --merge Treat the query as multiple sub-queries split on '|'.
548
557
  Runs them in parallel, dedupes by URL, ranks by how many
549
558
  sub-queries surfaced each result. Escapes: '\\|' for literal pipe.
559
+ --context <path> Read a local notes file (max 256 KiB) and derive up
560
+ to 8 sub-queries from its headings and questions.
561
+ Your query always runs first; the derived
562
+ sub-queries are joined with it through the --merge
563
+ pipeline (deduped, occurrence-ranked).
564
+ What leaves your machine: the derived sub-query
565
+ strings become the search queries — the file
566
+ itself is never sent.
567
+ Mutually exclusive with \`--merge\` and
568
+ \`--context-stdin\`.
569
+ --context-stdin Same as \`--context\`, reading the notes from
570
+ standard input (no value; pipe the file in).
571
+
572
+ Under fan-out every arm runs every sub-query — one stderr notice
573
+ states the math: N sub-queries × M arms = N×M billable searches. In
574
+ JSON data modes \`--context\` wraps the payload as
575
+ { "context": { counts, sha256 }, "results": [...] } — counts and a
576
+ SHA-256 of the source only, never file content; text modes render the
577
+ results unchanged.
550
578
 
551
579
  Output formats (--output-format / -O):
552
580
  data JSON array (default, token-efficient)
@@ -566,6 +594,7 @@ Examples:
566
594
  scoutline search "x" -O markdown --max-summary 80 # chat-ready
567
595
  scoutline search "x" --fields title,url # field-filtered JSON
568
596
  scoutline search --merge "rust async|rust tokio|rust runtime" # multi-query merge
597
+ scoutline search "rust async" --context notes.md # local-context sub-queries
569
598
 
570
599
  Default JSON shape:
571
600
  [