scoutline 0.2.0 → 0.6.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 (110) hide show
  1. package/README.md +240 -18
  2. package/dist/capabilities/diagnostics.d.ts +70 -32
  3. package/dist/capabilities/diagnostics.d.ts.map +1 -1
  4. package/dist/capabilities/diagnostics.js +97 -46
  5. package/dist/capabilities/diagnostics.js.map +1 -1
  6. package/dist/capabilities/reader.d.ts +227 -0
  7. package/dist/capabilities/reader.d.ts.map +1 -0
  8. package/dist/capabilities/reader.js +100 -0
  9. package/dist/capabilities/reader.js.map +1 -0
  10. package/dist/capabilities/repository.d.ts +221 -0
  11. package/dist/capabilities/repository.d.ts.map +1 -0
  12. package/dist/capabilities/repository.js +172 -0
  13. package/dist/capabilities/repository.js.map +1 -0
  14. package/dist/commands/cache.d.ts +106 -0
  15. package/dist/commands/cache.d.ts.map +1 -0
  16. package/dist/commands/cache.js +203 -0
  17. package/dist/commands/cache.js.map +1 -0
  18. package/dist/commands/doctor.d.ts +17 -6
  19. package/dist/commands/doctor.d.ts.map +1 -1
  20. package/dist/commands/doctor.js +42 -17
  21. package/dist/commands/doctor.js.map +1 -1
  22. package/dist/commands/read.d.ts +74 -14
  23. package/dist/commands/read.d.ts.map +1 -1
  24. package/dist/commands/read.js +257 -117
  25. package/dist/commands/read.js.map +1 -1
  26. package/dist/commands/repo.d.ts +53 -7
  27. package/dist/commands/repo.d.ts.map +1 -1
  28. package/dist/commands/repo.js +104 -123
  29. package/dist/commands/repo.js.map +1 -1
  30. package/dist/commands/repository-explorer.d.ts +147 -0
  31. package/dist/commands/repository-explorer.d.ts.map +1 -0
  32. package/dist/commands/repository-explorer.js +550 -0
  33. package/dist/commands/repository-explorer.js.map +1 -0
  34. package/dist/index.d.ts +20 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +209 -34
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/cache.d.ts +123 -18
  39. package/dist/lib/cache.d.ts.map +1 -1
  40. package/dist/lib/cache.js +324 -49
  41. package/dist/lib/cache.js.map +1 -1
  42. package/dist/lib/errors.d.ts +24 -1
  43. package/dist/lib/errors.d.ts.map +1 -1
  44. package/dist/lib/errors.js +33 -2
  45. package/dist/lib/errors.js.map +1 -1
  46. package/dist/lib/execution.d.ts +119 -5
  47. package/dist/lib/execution.d.ts.map +1 -1
  48. package/dist/lib/execution.js +216 -10
  49. package/dist/lib/execution.js.map +1 -1
  50. package/dist/lib/index.d.ts +1 -1
  51. package/dist/lib/index.d.ts.map +1 -1
  52. package/dist/lib/index.js +1 -1
  53. package/dist/lib/index.js.map +1 -1
  54. package/dist/lib/mcp-client.d.ts +29 -5
  55. package/dist/lib/mcp-client.d.ts.map +1 -1
  56. package/dist/lib/mcp-client.js +88 -88
  57. package/dist/lib/mcp-client.js.map +1 -1
  58. package/dist/lib/tool-cache.d.ts +86 -0
  59. package/dist/lib/tool-cache.d.ts.map +1 -0
  60. package/dist/lib/tool-cache.js +123 -0
  61. package/dist/lib/tool-cache.js.map +1 -0
  62. package/dist/providers/minimax/adapter.d.ts +6 -4
  63. package/dist/providers/minimax/adapter.d.ts.map +1 -1
  64. package/dist/providers/minimax/adapter.js +64 -57
  65. package/dist/providers/minimax/adapter.js.map +1 -1
  66. package/dist/providers/minimax/coding-plan-client.d.ts +60 -0
  67. package/dist/providers/minimax/coding-plan-client.d.ts.map +1 -0
  68. package/dist/providers/minimax/coding-plan-client.js +204 -0
  69. package/dist/providers/minimax/coding-plan-client.js.map +1 -0
  70. package/dist/providers/minimax/media.d.ts +60 -6
  71. package/dist/providers/minimax/media.d.ts.map +1 -1
  72. package/dist/providers/minimax/media.js +147 -7
  73. package/dist/providers/minimax/media.js.map +1 -1
  74. package/dist/providers/minimax/quota-client.d.ts +13 -6
  75. package/dist/providers/minimax/quota-client.d.ts.map +1 -1
  76. package/dist/providers/minimax/quota-client.js +5 -0
  77. package/dist/providers/minimax/quota-client.js.map +1 -1
  78. package/dist/providers/minimax/vision-attestations.d.ts +23 -0
  79. package/dist/providers/minimax/vision-attestations.d.ts.map +1 -1
  80. package/dist/providers/minimax/vision-attestations.js +35 -10
  81. package/dist/providers/minimax/vision-attestations.js.map +1 -1
  82. package/dist/providers/minimax/vision-conformance.d.ts +8 -6
  83. package/dist/providers/minimax/vision-conformance.d.ts.map +1 -1
  84. package/dist/providers/minimax/vision-conformance.js +8 -6
  85. package/dist/providers/minimax/vision-conformance.js.map +1 -1
  86. package/dist/providers/minimax/vision-revisions.d.ts +8 -1
  87. package/dist/providers/minimax/vision-revisions.d.ts.map +1 -1
  88. package/dist/providers/minimax/vision-revisions.js +13 -6
  89. package/dist/providers/minimax/vision-revisions.js.map +1 -1
  90. package/dist/providers/selection.d.ts +3 -3
  91. package/dist/providers/selection.js +3 -3
  92. package/dist/providers/types.d.ts +66 -32
  93. package/dist/providers/types.d.ts.map +1 -1
  94. package/dist/providers/types.js.map +1 -1
  95. package/dist/providers/zai/adapter.d.ts.map +1 -1
  96. package/dist/providers/zai/adapter.js +71 -5
  97. package/dist/providers/zai/adapter.js.map +1 -1
  98. package/dist/providers/zai/encoded-error.d.ts +90 -0
  99. package/dist/providers/zai/encoded-error.d.ts.map +1 -0
  100. package/dist/providers/zai/encoded-error.js +169 -0
  101. package/dist/providers/zai/encoded-error.js.map +1 -0
  102. package/dist/providers/zai/reader.d.ts +82 -0
  103. package/dist/providers/zai/reader.d.ts.map +1 -0
  104. package/dist/providers/zai/reader.js +490 -0
  105. package/dist/providers/zai/reader.js.map +1 -0
  106. package/dist/providers/zai/repository.d.ts +76 -0
  107. package/dist/providers/zai/repository.d.ts.map +1 -0
  108. package/dist/providers/zai/repository.js +715 -0
  109. package/dist/providers/zai/repository.js.map +1 -0
  110. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA+BpE,SAAS,SAAS;IAChB,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAC1B,UAA8B,EAC9B,GAAsB,EACtB,KAAoC,EACpC,MAAoB;IAEpB,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAA2B,CAAC;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,0BAA0B,CAAC,UAAU,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,wBAAwB,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;QACvF,KAAK;QACL,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAmC;IAEnC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5C,MAAM,WAAW,GAA6B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAClF,QAAQ,EAAE,UAAU,CAAC,EAAE;QACvB,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7C,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;KAC7C,CAAC,CAAC,CAAC;IAEJ,MAAM,SAAS,GAAyB,IAAI,CAAC,OAAO;QAClD,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1B,GAAG,KAAK;YACR,MAAM,EAAE,SAAkB;YAC1B,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,gBAA0B,CAAC,CAAC,CAAE,gBAA0B;SACrF,CAAC,CAAC;QACL,CAAC,CAAC,MAAM,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,kBAAkB,EAAE,mBAAmB;QACvC,mBAAmB,EAAE,qBAAqB;QAC1C,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE;SACvC;QACD,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CACzB,WAAqC,EACrC,IAAmC,EACnC,OAAiB;IAEjB,MAAM,iBAAiB,GAAG,WAAW;SAClC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAEjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9B,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAC1E,CACF,CAAC;IAEF,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,SAAkB,EAAE,MAAM,EAAE,gBAAyB,EAAE,CAAC;QACrF,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,IAAa,EAAE,CAAC;QAC7C,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAE9E,CAAC;QACF,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,OAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAyB;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACxF,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC;AACX,CAAC;AAmBD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAA+B;IAE/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC1B,CAAC,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,45 @@
1
1
  /**
2
- * Web reader command using Z.AI WebReader MCP
2
+ * Web reader command thin handler over the Reader Capability
3
+ * (DESIGN.md §18, reader-migration-core-flows, reader-migration-tech-plan
4
+ * Ticket 04).
3
5
  *
4
- * P1-05: returns a CommandResult instead of writing directly to
5
- * stdout/stderr. Notices (URL rewrite hint, truncation warning, extract
6
- * count) flow through the invocation context; errors are thrown and
7
- * converted by invokeCommand.
6
+ * The handler applies parse-level validation only (URL scheme, --extract
7
+ * mode), delegates to `capability.fetch(request)` through shared
8
+ * execution, then projects the normalized `ReaderFetchResult` into the
9
+ * public v1 envelope(s) (content read vs extract read). The Adapter
10
+ * (providers/zai/reader.ts) owns URL rewrite, credentials, transport,
11
+ * raw response parsing, cache identity, and retry/terminal
12
+ * classification; the handler owns projection (`--max-chars` truncation,
13
+ * `--extract` slicing), output-mode presentation, and the
14
+ * schema-version-1 envelope migration.
8
15
  *
9
- * Behaviour preserved from Phase 0:
10
- * - By default the data is the page content (string).
11
- * - With --full-envelope the data is the structured reader envelope.
12
- * - With -O json/pretty (without --full-envelope) the data is also the
13
- * envelope so consumers always get the structured object in JSON
14
- * modes. The `outputMode` parameter is passed by the dispatcher.
16
+ * Provider selection, capability support, configuration, Adapter
17
+ * construction, and adapter.reader agreement live in `src/index.ts`.
18
+ *
19
+ * Handler interface (P6-07A pattern): `deps: ReadHandlerDependencies`
20
+ * is REQUIRED production and direct tests cross the same compile-
21
+ * checked Interface. An optional trailing `CommandContext` follows when
22
+ * a caller wants to surface per-invocation context; the handler does
23
+ * not currently read it. A `CommandContext` is NOT a valid substitute
24
+ * for `deps`.
25
+ *
26
+ * Output-mode behavior (core-flows table):
27
+ *
28
+ * - data: the envelope object (content or extract).
29
+ * - json / pretty: standard `{success, data, timestamp}` envelope.
30
+ * - compact / markdown / refs / tty:
31
+ * * content read → the `content` string directly (presentations).
32
+ * * extract read → JSON fallback (the extract envelope object);
33
+ * no presentation override because extracted items are data,
34
+ * not prose.
35
+ *
36
+ * `--full-envelope` is silently accepted and ignored (D3): the v1
37
+ * envelope is always returned.
15
38
  */
16
- import { type ExtractMode } from "../lib/extract.js";
17
39
  import type { CommandContext, CommandResult } from "../command-invocation.js";
18
- import type { OutputMode } from "../lib/output.js";
40
+ import type { ReaderCapability } from "../capabilities/reader.js";
41
+ import type { ExecutionDependencies } from "../lib/execution.js";
42
+ import { type ExtractMode } from "../lib/extract.js";
19
43
  export interface ReadOptions {
20
44
  format?: "markdown" | "text";
21
45
  noImages?: boolean;
@@ -26,9 +50,45 @@ export interface ReadOptions {
26
50
  keepImgDataUrl?: boolean;
27
51
  withImagesSummary?: boolean;
28
52
  maxChars?: number;
53
+ /**
54
+ * Silently accepted and ignored at v1 (core-flows D3). The envelope
55
+ * is always returned. Retained on the options type so callers and
56
+ * `handleRead` parse it without errors; it never reaches the Adapter
57
+ * request, the cache identity, or the projection.
58
+ */
29
59
  fullEnvelope?: boolean;
30
60
  extract?: ExtractMode;
31
61
  }
32
- export declare function read(url: string, options?: ReadOptions, outputMode?: OutputMode, context?: CommandContext): Promise<CommandResult>;
62
+ /**
63
+ * Dependencies injected by `src/index.ts` after Provider selection,
64
+ * capability support check, configuration check, Adapter construction,
65
+ * and adapter.reader agreement. The handler never resolves a Provider
66
+ * descriptor itself. Required — a caller that omits `deps` is malformed
67
+ * and fails loudly (a `CommandContext` is NOT a valid substitute).
68
+ */
69
+ export interface ReadHandlerDependencies {
70
+ readonly capability: ReaderCapability;
71
+ readonly execution: ExecutionDependencies;
72
+ }
73
+ /**
74
+ * Read web page content through the injected Reader Capability.
75
+ *
76
+ * Ordering:
77
+ * 1. Parse-level validation (URL scheme, --extract mode). Throws
78
+ * `ValidationError` BEFORE the Adapter or shared execution is
79
+ * reached.
80
+ * 2. Build the Provider-neutral request and delegate to
81
+ * `executeProviderOperation` with shared cache + retry policy.
82
+ * 3. Project the normalized result:
83
+ * - `--extract` slicing into the extract envelope (sets `mode`,
84
+ * `items`, `originalItemCount`); `--max-chars` is IGNORED.
85
+ * - Otherwise, `--max-chars` truncation on `content` (sets
86
+ * `truncated`, `originalContentLength`).
87
+ * 4. Set presentations so text-oriented modes (compact/markdown/
88
+ * refs/tty) emit `content` directly for content reads. Extract
89
+ * reads omit presentations; text modes then fall back to JSON
90
+ * (the extract envelope), matching the core-flows table.
91
+ */
92
+ export declare function read(url: string, options: ReadOptions | undefined, deps: ReadHandlerDependencies, _context?: CommandContext): Promise<CommandResult>;
33
93
  export declare const READ_HELP: string;
34
94
  //# sourceMappingURL=read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAwDD,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,EACzB,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,CAkExB;AAGD,eAAO,MAAM,SAAS,QAuCd,CAAC"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAIjE,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAM7E,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;CAC3C;AAkID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAW,YAAK,EACzB,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,aAAa,CAAC,CA6CxB;AAaD,eAAO,MAAM,SAAS,QAwFd,CAAC"}
@@ -1,165 +1,305 @@
1
1
  /**
2
- * Web reader command using Z.AI WebReader MCP
2
+ * Web reader command thin handler over the Reader Capability
3
+ * (DESIGN.md §18, reader-migration-core-flows, reader-migration-tech-plan
4
+ * Ticket 04).
3
5
  *
4
- * P1-05: returns a CommandResult instead of writing directly to
5
- * stdout/stderr. Notices (URL rewrite hint, truncation warning, extract
6
- * count) flow through the invocation context; errors are thrown and
7
- * converted by invokeCommand.
6
+ * The handler applies parse-level validation only (URL scheme, --extract
7
+ * mode), delegates to `capability.fetch(request)` through shared
8
+ * execution, then projects the normalized `ReaderFetchResult` into the
9
+ * public v1 envelope(s) (content read vs extract read). The Adapter
10
+ * (providers/zai/reader.ts) owns URL rewrite, credentials, transport,
11
+ * raw response parsing, cache identity, and retry/terminal
12
+ * classification; the handler owns projection (`--max-chars` truncation,
13
+ * `--extract` slicing), output-mode presentation, and the
14
+ * schema-version-1 envelope migration.
8
15
  *
9
- * Behaviour preserved from Phase 0:
10
- * - By default the data is the page content (string).
11
- * - With --full-envelope the data is the structured reader envelope.
12
- * - With -O json/pretty (without --full-envelope) the data is also the
13
- * envelope so consumers always get the structured object in JSON
14
- * modes. The `outputMode` parameter is passed by the dispatcher.
16
+ * Provider selection, capability support, configuration, Adapter
17
+ * construction, and adapter.reader agreement live in `src/index.ts`.
18
+ *
19
+ * Handler interface (P6-07A pattern): `deps: ReadHandlerDependencies`
20
+ * is REQUIRED production and direct tests cross the same compile-
21
+ * checked Interface. An optional trailing `CommandContext` follows when
22
+ * a caller wants to surface per-invocation context; the handler does
23
+ * not currently read it. A `CommandContext` is NOT a valid substitute
24
+ * for `deps`.
25
+ *
26
+ * Output-mode behavior (core-flows table):
27
+ *
28
+ * - data: the envelope object (content or extract).
29
+ * - json / pretty: standard `{success, data, timestamp}` envelope.
30
+ * - compact / markdown / refs / tty:
31
+ * * content read → the `content` string directly (presentations).
32
+ * * extract read → JSON fallback (the extract envelope object);
33
+ * no presentation override because extracted items are data,
34
+ * not prose.
35
+ *
36
+ * `--full-envelope` is silently accepted and ignored (D3): the v1
37
+ * envelope is always returned.
15
38
  */
16
- import { ZaiMcpClient } from "../lib/mcp-client.js";
39
+ import { executeReaderOperation } from "../lib/execution.js";
40
+ import { OUTPUT_MODES } from "../lib/output.js";
17
41
  import { ValidationError } from "../lib/errors.js";
18
42
  import { extract, isExtractMode } from "../lib/extract.js";
43
+ // ---------------------------------------------------------------------------
44
+ // Parse-level validation
45
+ // ---------------------------------------------------------------------------
19
46
  /**
20
- * Rewrite rendered GitHub gist/file URLs to their raw form so Z.AI's reader
21
- * returns pure file content instead of the rendered HTML page chrome
22
- * (Sign in / Star / Fork / Embed / etc.).
23
- *
24
- * gist.github.com/<user>/<id> -> gist.github.com/<user>/<id>/raw
25
- * gist.github.com/<user>/<id>#file-... -> gist.github.com/<user>/<id>/raw
26
- *
27
- * Leaves alone: URLs that already end in /raw, /raw/<rev>, or have a query string.
47
+ * Validate the URL at parse time. Only `http://` and `https://` schemes
48
+ * are accepted; everything else is a terminal `ValidationError` that
49
+ * fires BEFORE Provider resolution. Mirrors the v0.2 contract so direct
50
+ * handler tests keep their assertion shape.
28
51
  */
29
- function maybeRewriteToRaw(url) {
30
- // Already raw? Leave alone.
31
- if (/\/raw(\/|$|\?|#)/.test(url))
32
- return url;
33
- // Only rewrite gist.github.com (not github.com/owner/repo — that's different)
34
- const m = url.match(/^(https?:\/\/gist\.github\.com\/[^/]+\/[^/#?]+)(?:[/?#]|$)/);
35
- if (!m)
36
- return url;
37
- const base = m[1];
38
- // Append /raw, preserve any fragment (file anchor still meaningful)
39
- const frag = url.indexOf("#") >= 0 ? url.slice(url.indexOf("#")) : "";
40
- return `${base}/raw${frag}`;
52
+ function validateUrl(url) {
53
+ if (!url.startsWith("http://") && !url.startsWith("https://")) {
54
+ throw new ValidationError("URL must start with http:// or https://");
55
+ }
41
56
  }
42
57
  /**
43
- * Pull just the content string out of a Z.AI reader response. The full envelope
44
- * (title, url, metadata, external) is rarely useful for agents — it just bloats
45
- * output and makes truncation limits harder to reason about.
58
+ * Validate `--extract` mode at parse time. An invalid value is a
59
+ * terminal `ValidationError` that fires BEFORE Provider resolution.
46
60
  */
47
- function extractContent(response) {
48
- if (typeof response === "string")
49
- return { content: response, original: response };
50
- if (response && typeof response === "object") {
51
- const obj = response;
52
- if (typeof obj.content === "string") {
53
- return { content: obj.content, original: response };
54
- }
61
+ function validateExtractMode(mode) {
62
+ if (mode !== undefined && !isExtractMode(mode)) {
63
+ throw new ValidationError(`Invalid --extract mode: ${mode}. Use one of: code, links, tables, headings`);
55
64
  }
56
- // Fallback: stringify whatever we got
57
- return { content: JSON.stringify(response), original: response };
58
65
  }
66
+ // ---------------------------------------------------------------------------
67
+ // Projection helpers
68
+ // ---------------------------------------------------------------------------
59
69
  /**
60
- * Truncate to max chars. Returns the (possibly truncated) content plus the
61
- * original length so the caller can warn about truncation.
70
+ * Apply `--max-chars` truncation to content. Mirrors the v0.2 contract:
71
+ * slice to `max - 1`, trim trailing whitespace, and append `…`. Returns
72
+ * the original text and `truncated: false` when no truncation occurs.
62
73
  */
63
- function truncate(content, max) {
74
+ function truncateContent(content, max) {
64
75
  const originalLen = content.length;
65
76
  if (!max || max <= 0 || originalLen <= max) {
66
77
  return { text: content, originalLen, truncated: false };
67
78
  }
68
79
  return { text: content.slice(0, max - 1).trimEnd() + "…", originalLen, truncated: true };
69
80
  }
70
- export async function read(url, options = {}, outputMode, context) {
71
- // Validate URL first (before any client work).
72
- if (!url.startsWith("http://") && !url.startsWith("https://")) {
73
- throw new ValidationError("URL must start with http:// or https://");
74
- }
75
- if (options.extract && !isExtractMode(options.extract)) {
76
- throw new ValidationError(`Invalid --extract mode: ${options.extract}. Use one of: code, links, tables, headings`);
77
- }
78
- const finalUrl = maybeRewriteToRaw(url);
79
- if (finalUrl !== url && context) {
80
- context.notice(`ℹ️ rewrote gist URL to raw form: ${finalUrl}`);
81
- }
82
- const client = new ZaiMcpClient({ enableVision: false, noCache: options.noCache });
83
- try {
84
- const response = await client.webRead({
85
- url: finalUrl,
86
- format: options.format || "markdown",
87
- retainImages: !options.noImages,
88
- withLinksSummary: options.withLinks,
89
- timeout: options.timeout,
90
- noCache: options.noCache,
91
- noGfm: options.noGfm,
92
- keepImgDataUrl: options.keepImgDataUrl,
93
- withImagesSummary: options.withImagesSummary,
94
- });
95
- const { content: rawContent } = extractContent(response);
96
- // --extract short-circuits: returns the extracted slice as a JSON array,
97
- // bypassing truncation and envelope logic.
98
- if (options.extract) {
99
- const extracted = extract(rawContent, options.extract);
100
- if (context) {
101
- context.notice(`ℹ️ extracted ${extracted.length} ${options.extract}`);
102
- }
103
- return { kind: "data", data: extracted };
104
- }
105
- const { text, originalLen, truncated } = truncate(rawContent, options.maxChars);
106
- if (truncated && context) {
107
- context.notice(`⚠️ content truncated from ${originalLen.toLocaleString()} to ${text.length.toLocaleString()} chars; use a higher --max-chars or omit it for full content`);
108
- }
109
- // Default: content-only (drops title/metadata/external envelope).
110
- // --full-envelope, json, or pretty keeps the structured object.
111
- const wantEnvelope = options.fullEnvelope || outputMode === "json" || outputMode === "pretty";
112
- if (wantEnvelope) {
113
- const envelope = response && typeof response === "object"
114
- ? { ...response, content: text }
115
- : { content: text };
116
- return { kind: "data", data: envelope };
117
- }
118
- return { kind: "data", data: text };
81
+ /**
82
+ * Build the Provider-neutral ReaderFetchRequest from ReadOptions. Built
83
+ * as a single fresh object so the readonly invariants on
84
+ * `ReaderFetchRequest` are honored. `--max-chars`, `--extract`,
85
+ * `--full-envelope`, `--no-cache`, and output mode NEVER appear here —
86
+ * they are projections applied after the cached normalized result.
87
+ */
88
+ function buildReaderRequest(url, options) {
89
+ const request = { url };
90
+ if (options.format)
91
+ request.format = options.format;
92
+ if (options.noImages !== undefined)
93
+ request.retainImages = !options.noImages;
94
+ if (options.withLinks !== undefined)
95
+ request.withLinksSummary = options.withLinks;
96
+ if (options.noGfm !== undefined)
97
+ request.noGfm = options.noGfm;
98
+ if (options.keepImgDataUrl !== undefined)
99
+ request.keepImgDataUrl = options.keepImgDataUrl;
100
+ if (options.withImagesSummary !== undefined) {
101
+ request.withImagesSummary = options.withImagesSummary;
119
102
  }
120
- finally {
121
- await client.close().catch(() => { });
103
+ if (options.timeout !== undefined)
104
+ request.timeout = options.timeout;
105
+ return request;
106
+ }
107
+ /**
108
+ * Build the v1 content-read envelope. `truncated` and
109
+ * `originalContentLength` are projection state recomputed on every read;
110
+ * the cache stores the full content.
111
+ */
112
+ function buildContentEnvelope(result, text, originalLen, truncated) {
113
+ // Preserve metadata/external verbatim when present on the cached
114
+ // result. Built as a fresh object so the readonly invariants on
115
+ // `ReaderFetchResult` are honored.
116
+ const envelope = {
117
+ schemaVersion: 1,
118
+ url: result.url,
119
+ finalUrl: result.finalUrl,
120
+ title: result.title,
121
+ content: text,
122
+ contentFormat: result.contentFormat,
123
+ truncated,
124
+ originalContentLength: originalLen,
125
+ };
126
+ if (result.metadata !== undefined)
127
+ envelope.metadata = result.metadata;
128
+ if (result.external !== undefined)
129
+ envelope.external = result.external;
130
+ return envelope;
131
+ }
132
+ /**
133
+ * Build the v1 extract-read envelope. `items` carry the extracted
134
+ * slice; `originalItemCount` and `truncated` report projection state.
135
+ * `--max-chars` is intentionally IGNORED for extract reads
136
+ * (truncating a code block or link list mid-item is harmful).
137
+ */
138
+ function buildExtractEnvelope(result, mode, items) {
139
+ return {
140
+ schemaVersion: 1,
141
+ url: result.url,
142
+ finalUrl: result.finalUrl,
143
+ mode,
144
+ items,
145
+ truncated: false,
146
+ originalItemCount: items.length,
147
+ };
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // Handler
151
+ // ---------------------------------------------------------------------------
152
+ /**
153
+ * Read web page content through the injected Reader Capability.
154
+ *
155
+ * Ordering:
156
+ * 1. Parse-level validation (URL scheme, --extract mode). Throws
157
+ * `ValidationError` BEFORE the Adapter or shared execution is
158
+ * reached.
159
+ * 2. Build the Provider-neutral request and delegate to
160
+ * `executeProviderOperation` with shared cache + retry policy.
161
+ * 3. Project the normalized result:
162
+ * - `--extract` slicing into the extract envelope (sets `mode`,
163
+ * `items`, `originalItemCount`); `--max-chars` is IGNORED.
164
+ * - Otherwise, `--max-chars` truncation on `content` (sets
165
+ * `truncated`, `originalContentLength`).
166
+ * 4. Set presentations so text-oriented modes (compact/markdown/
167
+ * refs/tty) emit `content` directly for content reads. Extract
168
+ * reads omit presentations; text modes then fall back to JSON
169
+ * (the extract envelope), matching the core-flows table.
170
+ */
171
+ export async function read(url, options = {}, deps, _context) {
172
+ // 1. Parse-level validation BEFORE Provider/Adapter work.
173
+ validateUrl(url);
174
+ validateExtractMode(options.extract);
175
+ // 2. Build the Provider-neutral request. Only fields that affect
176
+ // the Provider request or the cache identity appear here;
177
+ // --max-chars, --extract, --full-envelope, --no-cache, and
178
+ // output mode never enter the request.
179
+ const request = buildReaderRequest(url, options);
180
+ const result = await executeReaderOperation(deps.capability.fetch, request, { noCache: options.noCache === true }, deps.execution);
181
+ // 3. Projection.
182
+ if (options.extract) {
183
+ const items = extract(result.content, options.extract);
184
+ const envelope = buildExtractEnvelope(result, options.extract, items);
185
+ // No presentation override for extract reads: text modes fall
186
+ // back to JSON (the envelope) because extracted items are data,
187
+ // not prose.
188
+ return { kind: "data", data: envelope };
122
189
  }
190
+ const { text, originalLen, truncated } = truncateContent(result.content, options.maxChars);
191
+ const envelope = buildContentEnvelope(result, text, originalLen, truncated);
192
+ // 4. Presentations: text-oriented modes emit `content` directly for
193
+ // content reads (D4 — Reader content is naturally prose). All
194
+ // four text modes share the same value because the page body is
195
+ // the same prose regardless of mode.
196
+ return {
197
+ kind: "data",
198
+ data: envelope,
199
+ presentations: {
200
+ compact: text,
201
+ markdown: text,
202
+ refs: text,
203
+ tty: text,
204
+ },
205
+ };
123
206
  }
124
- // Help text
207
+ // ---------------------------------------------------------------------------
208
+ // Help
209
+ // ---------------------------------------------------------------------------
210
+ /**
211
+ * Canonical output-mode list for `--output-format`. Derived from the
212
+ * shared `OUTPUT_MODES` contract so the help text cannot drift from
213
+ * the accepted set.
214
+ */
215
+ const OUTPUT_MODE_LIST = OUTPUT_MODES.join(" | ");
125
216
  export const READ_HELP = `
126
- Read Command - Fetch and parse web page content using Z.AI WebReader MCP
217
+ Read Command - Fetch and parse web pages (Provider Capability)
127
218
 
128
219
  Usage: scoutline read <url> [options]
129
220
 
130
221
  URL handling:
131
- gist.github.com/<user>/<id> URLs are auto-rewritten to /raw so you get pure
132
- file content instead of rendered HTML chrome (Sign in / Star / Fork / Embed).
222
+ gist.github.com/<user>/<id> URLs are auto-rewritten to /raw by the
223
+ Z.AI Adapter so you get pure file content instead of rendered HTML
224
+ chrome (Sign in / Star / Fork / Embed). The rewritten URL surfaces
225
+ as finalUrl in the v1 result.
226
+
227
+ Provider selection (precedence: --provider, then SCOUTLINE_PROVIDER,
228
+ then zai):
229
+ - The 'read' command participates in Provider selection.
230
+ - Z.AI advertises the reader Capability and supplies the Adapter;
231
+ selecting zai routes Read through it.
232
+ - MiniMax does NOT advertise reader. Selecting minimax (explicitly
233
+ or via SCOUTLINE_PROVIDER) returns UNSUPPORTED_CAPABILITY with
234
+ no fallback to Z.AI.
133
235
 
134
236
  Options:
135
237
  --format <f> Output format: markdown (default), text
136
238
  --no-images Remove images from output
137
- --no-cache Disable server-side caching
239
+ --no-cache Bypass the response cache for this invocation
138
240
  --with-links Include links summary
139
241
  --with-images-summary Include images summary
140
242
  --no-gfm Disable GitHub Flavored Markdown
141
243
  --keep-img-data-url Keep image data URLs in output
142
244
  --timeout <s> Request timeout in seconds (default: 20)
143
- --max-chars <n> Truncate content to <n> chars (warns on stderr when it kicks in)
144
- --full-envelope Include title/url/metadata/external fields (default: content-only)
145
- --extract <m> Pull a specific slice out as JSON array: code | links | tables | headings
245
+ --max-chars <n> Truncate content to <n> chars (content reads only)
246
+ --full-envelope Silently accepted and ignored. The envelope is always
247
+ returned at schema-version-1 (deprecation: D3).
248
+ --extract <m> Pull a specific slice out as a typed envelope with
249
+ mode/items/originalItemCount. Mode is one of:
250
+ code | links | tables | headings
251
+
252
+ Common Options:
253
+ --provider <id> Override the active Provider (zai | minimax)
254
+ --output-format <mode> One of: ${OUTPUT_MODE_LIST} (default: data)
255
+ -O <mode> Alias for --output-format
146
256
 
147
- By default the command outputs just the page content (string). Use --full-envelope
148
- or --output-format json/pretty to get the full structured response object. Use
149
- --extract to return only matching elements (e.g. all code blocks, all links).
257
+ Output format (schema-version-1 migration):
258
+ Content read (default):
259
+ {
260
+ "schemaVersion": 1,
261
+ "url": "<the URL you passed>",
262
+ "finalUrl": "<the URL the Adapter fetched>",
263
+ "title": "<page title or null>",
264
+ "content": "<page body as markdown/text>",
265
+ "contentFormat": "markdown" | "text",
266
+ "truncated": false,
267
+ "originalContentLength": <number>
268
+ }
269
+ Extract read (--extract <mode>):
270
+ {
271
+ "schemaVersion": 1,
272
+ "url": "<the URL you passed>",
273
+ "finalUrl": "<the URL the Adapter fetched>",
274
+ "mode": "code" | "links" | "tables" | "headings",
275
+ "items": [<typed items per mode>],
276
+ "truncated": false,
277
+ "originalItemCount": <number>
278
+ }
279
+ --max-chars applies ONLY to content reads (sets truncated:true and
280
+ originalContentLength). --max-chars is IGNORED for extract reads —
281
+ truncating a code block or link list mid-item is harmful.
282
+
283
+ Output modes for read results:
284
+ - data: raw schema-version-1 envelope object.
285
+ - json / pretty: standard {success, data, timestamp} envelope
286
+ (indent 0 for json, indent 2 for pretty).
287
+ - compact / markdown / refs / tty:
288
+ * content read → the content string is emitted directly (Reader
289
+ content is naturally prose).
290
+ * extract read → JSON fallback (the extract envelope object).
291
+ Extracted items are data, not prose, so the text-oriented modes
292
+ do not synthesize a presentation for them.
150
293
 
151
294
  Examples:
152
295
  scoutline read https://docs.example.com/api
153
296
  scoutline read https://github.com/owner/repo --format text
154
- scoutline read https://gist.github.com/user/abc123 # auto-rewritten to /raw
297
+ scoutline read https://gist.github.com/user/abc123 # finalUrl shows /raw
155
298
  scoutline read https://blog.example.com/post --no-images --with-links
156
299
  scoutline read https://example.com/long-article --max-chars 2000
157
- scoutline read https://react.dev/learn/hooks --extract code # just code blocks
158
- scoutline read https://example.com/page --extract links # just URLs
300
+ scoutline read https://react.dev/learn/hooks --extract code # code blocks
301
+ scoutline read https://example.com/page --extract links # links
159
302
  scoutline read https://en.wikipedia.org/wiki/X --extract headings # section outline
160
-
161
- Output format:
162
- Content string by default; structured object with --full-envelope or -O json;
163
- JSON array of extracted elements with --extract.
303
+ scoutline --provider minimax read https://example.com/ # UNSUPPORTED_CAPABILITY
164
304
  `.trim();
165
305
  //# sourceMappingURL=read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}