scoutline 0.6.4 → 0.7.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 (105) hide show
  1. package/README.md +8 -9
  2. package/bin/scoutline.js +2 -3
  3. package/dist/capabilities/crawl.d.ts +93 -0
  4. package/dist/capabilities/crawl.d.ts.map +1 -0
  5. package/dist/capabilities/crawl.js +62 -0
  6. package/dist/capabilities/crawl.js.map +1 -0
  7. package/dist/capabilities/diagnostics.d.ts +45 -43
  8. package/dist/capabilities/diagnostics.d.ts.map +1 -1
  9. package/dist/capabilities/diagnostics.js +58 -71
  10. package/dist/capabilities/diagnostics.js.map +1 -1
  11. package/dist/capabilities/map.d.ts +81 -0
  12. package/dist/capabilities/map.d.ts.map +1 -0
  13. package/dist/capabilities/map.js +60 -0
  14. package/dist/capabilities/map.js.map +1 -0
  15. package/dist/capabilities/quota.js +1 -1
  16. package/dist/capabilities/quota.js.map +1 -1
  17. package/dist/capabilities/research.d.ts +98 -0
  18. package/dist/capabilities/research.d.ts.map +1 -0
  19. package/dist/capabilities/research.js +71 -0
  20. package/dist/capabilities/research.js.map +1 -0
  21. package/dist/capabilities/search.d.ts +9 -1
  22. package/dist/capabilities/search.d.ts.map +1 -1
  23. package/dist/commands/crawl.d.ts +46 -0
  24. package/dist/commands/crawl.d.ts.map +1 -0
  25. package/dist/commands/crawl.js +170 -0
  26. package/dist/commands/crawl.js.map +1 -0
  27. package/dist/commands/doctor.d.ts +7 -8
  28. package/dist/commands/doctor.d.ts.map +1 -1
  29. package/dist/commands/doctor.js +37 -34
  30. package/dist/commands/doctor.js.map +1 -1
  31. package/dist/commands/map.d.ts +39 -0
  32. package/dist/commands/map.d.ts.map +1 -0
  33. package/dist/commands/map.js +121 -0
  34. package/dist/commands/map.js.map +1 -0
  35. package/dist/commands/read.d.ts.map +1 -1
  36. package/dist/commands/read.js +7 -1
  37. package/dist/commands/read.js.map +1 -1
  38. package/dist/commands/research.d.ts +62 -0
  39. package/dist/commands/research.d.ts.map +1 -0
  40. package/dist/commands/research.js +314 -0
  41. package/dist/commands/research.js.map +1 -0
  42. package/dist/commands/search.d.ts +2 -1
  43. package/dist/commands/search.d.ts.map +1 -1
  44. package/dist/commands/search.js +11 -4
  45. package/dist/commands/search.js.map +1 -1
  46. package/dist/index.d.ts +38 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +260 -13
  49. package/dist/index.js.map +1 -1
  50. package/dist/lib/cache.d.ts +13 -0
  51. package/dist/lib/cache.d.ts.map +1 -1
  52. package/dist/lib/cache.js +15 -0
  53. package/dist/lib/cache.js.map +1 -1
  54. package/dist/lib/execution.d.ts +105 -1
  55. package/dist/lib/execution.d.ts.map +1 -1
  56. package/dist/lib/execution.js +73 -1
  57. package/dist/lib/execution.js.map +1 -1
  58. package/dist/lib/redact.d.ts +2 -1
  59. package/dist/lib/redact.d.ts.map +1 -1
  60. package/dist/lib/redact.js +8 -1
  61. package/dist/lib/redact.js.map +1 -1
  62. package/dist/lib/research-state.d.ts +104 -0
  63. package/dist/lib/research-state.d.ts.map +1 -0
  64. package/dist/lib/research-state.js +214 -0
  65. package/dist/lib/research-state.js.map +1 -0
  66. package/dist/lib/search-topic.d.ts +21 -0
  67. package/dist/lib/search-topic.d.ts.map +1 -0
  68. package/dist/lib/search-topic.js +36 -0
  69. package/dist/lib/search-topic.js.map +1 -0
  70. package/dist/providers/minimax/adapter.d.ts.map +1 -1
  71. package/dist/providers/minimax/adapter.js +6 -1
  72. package/dist/providers/minimax/adapter.js.map +1 -1
  73. package/dist/providers/minimax/vision-conformance.d.ts +2 -2
  74. package/dist/providers/minimax/vision-conformance.js +2 -2
  75. package/dist/providers/registry.d.ts.map +1 -1
  76. package/dist/providers/registry.js +2 -0
  77. package/dist/providers/registry.js.map +1 -1
  78. package/dist/providers/tavily/adapter.d.ts +62 -0
  79. package/dist/providers/tavily/adapter.d.ts.map +1 -0
  80. package/dist/providers/tavily/adapter.js +970 -0
  81. package/dist/providers/tavily/adapter.js.map +1 -0
  82. package/dist/providers/tavily/client.d.ts +184 -0
  83. package/dist/providers/tavily/client.d.ts.map +1 -0
  84. package/dist/providers/tavily/client.js +486 -0
  85. package/dist/providers/tavily/client.js.map +1 -0
  86. package/dist/providers/tavily/credentials.d.ts +34 -0
  87. package/dist/providers/tavily/credentials.d.ts.map +1 -0
  88. package/dist/providers/tavily/credentials.js +56 -0
  89. package/dist/providers/tavily/credentials.js.map +1 -0
  90. package/dist/providers/tavily/diagnostics.d.ts +44 -0
  91. package/dist/providers/tavily/diagnostics.d.ts.map +1 -0
  92. package/dist/providers/tavily/diagnostics.js +70 -0
  93. package/dist/providers/tavily/diagnostics.js.map +1 -0
  94. package/dist/providers/tavily/quota.d.ts +60 -0
  95. package/dist/providers/tavily/quota.d.ts.map +1 -0
  96. package/dist/providers/tavily/quota.js +186 -0
  97. package/dist/providers/tavily/quota.js.map +1 -0
  98. package/dist/providers/types.d.ts +14 -2
  99. package/dist/providers/types.d.ts.map +1 -1
  100. package/dist/providers/types.js +1 -1
  101. package/dist/providers/types.js.map +1 -1
  102. package/dist/providers/zai/adapter.d.ts.map +1 -1
  103. package/dist/providers/zai/adapter.js +6 -1
  104. package/dist/providers/zai/adapter.js.map +1 -1
  105. package/package.json +1 -1
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Provider-neutral Map Capability Contract (tech-plan §2b).
3
+ *
4
+ * Declares the single Map operation (`map-fetch`), its provider-neutral
5
+ * request, identity, cache, and result shapes, and a total normalized
6
+ * cache decoder.
7
+ *
8
+ * It imports NO concrete Provider, transport, or Adapter. It does no URL
9
+ * validation, raw response parsing, Provider field mapping, Provider
10
+ * selection, retries, or presentation.
11
+ *
12
+ * Map is the simplest of the three new Tavily capabilities: the API
13
+ * returns URLs only (no per-page content), so there is no per-page
14
+ * projection or truncation concern. The handler therefore needs no
15
+ * `--max-chars` flag.
16
+ */
17
+ // ===========================================================================
18
+ // Total normalized cache decoder
19
+ // ===========================================================================
20
+ //
21
+ // Accepts `unknown`, returns the typed result or `null`, never throws, and
22
+ // never trusts a generic cast. Shape contract is local; the Adapter is
23
+ // responsible for producing values that conform to `MapResult`.
24
+ function isPlainObject(value) {
25
+ return typeof value === "object" && value !== null && !Array.isArray(value);
26
+ }
27
+ function isNonEmptyString(value) {
28
+ return typeof value === "string" && value.length > 0;
29
+ }
30
+ /**
31
+ * Decode a MapResult from the cache. Returns the canonical `MapResult`
32
+ * on success, `null` for any malformed value.
33
+ */
34
+ export function decodeMapResult(value) {
35
+ if (!isPlainObject(value))
36
+ return null;
37
+ if (value.schemaVersion !== 1)
38
+ return null;
39
+ if (!isNonEmptyString(value.baseUrl))
40
+ return null;
41
+ const urls = value.urls;
42
+ if (!Array.isArray(urls))
43
+ return null;
44
+ const decodedUrls = [];
45
+ for (const entry of urls) {
46
+ if (typeof entry !== "string" || entry.length === 0)
47
+ return null;
48
+ decodedUrls.push(entry);
49
+ }
50
+ const totalUrls = value.totalUrls;
51
+ if (typeof totalUrls !== "number" || !Number.isFinite(totalUrls))
52
+ return null;
53
+ return {
54
+ schemaVersion: 1,
55
+ baseUrl: value.baseUrl,
56
+ urls: decodedUrls,
57
+ totalUrls,
58
+ };
59
+ }
60
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/capabilities/map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAkFH,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAC9E,EAAE;AACF,2EAA2E;AAC3E,uEAAuE;AACvE,gEAAgE;AAEhE,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9E,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,WAAW;QACjB,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -32,7 +32,7 @@ function clampPercent(value) {
32
32
  return 0;
33
33
  if (value > 100)
34
34
  return 100;
35
- return value;
35
+ return Math.round(value * 10) / 10;
36
36
  }
37
37
  /**
38
38
  * Validate a count set: both `used` and `limit` must be finite,
@@ -1 +1 @@
1
- {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/capabilities/quota.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/capabilities/quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Provider-neutral Research Capability Contract (tech-plan §2c, §3).
3
+ *
4
+ * Declares the single Research operation (`research-fetch`), its
5
+ * provider-neutral request, identity, cache, and result shapes, and a
6
+ * total normalized cache decoder.
7
+ *
8
+ * Research is the most complex of the three new Tavily capabilities: it
9
+ * runs an asynchronous create→poll lifecycle server-side and costs 4-250
10
+ * credits per request. The Adapter's `invoke()` owns that full lifecycle
11
+ * (state-file resume, POST, poll loop, completion/failure/404 handling);
12
+ * shared execution wraps it with the standard cache-then-invoke pattern
13
+ * but forces `maxRetries: 0` so a transient POST failure never risks a
14
+ * double-charge (tech-plan §3, §4).
15
+ *
16
+ * It imports NO concrete Provider, transport, or Adapter. It does no
17
+ * query validation, raw response parsing, Provider field mapping,
18
+ * Provider selection, retries, or presentation.
19
+ */
20
+ import type { CacheIdentity, CachedOperation } from "../lib/execution.js";
21
+ /**
22
+ * The single Research Capability operation. Cache identity partitions by
23
+ * the composite `${capability}-${operation}` literal; the v2 partitioned
24
+ * key shape is
25
+ * `v2.research-research-fetch.<provider>.<credential-hash>.<request-hash>.json`.
26
+ *
27
+ * `--max-chars`, `--no-cache`, `--timeout` (polling), and output mode are
28
+ * handler-level projections/policy and do NOT participate in the cache
29
+ * identity.
30
+ */
31
+ export type ResearchOperationKind = "research-fetch";
32
+ /**
33
+ * Provider-neutral research request. `query` MUST be supplied explicitly
34
+ * (the handler rejects empty/whitespace queries at parse time before this
35
+ * request reaches the Adapter).
36
+ *
37
+ * EVERY field except `query` participates in the v2 partitioned cache
38
+ * identity: `model`, `outputLength`, `citationFormat`, and `domain` each
39
+ * alter the report the Provider produces, so two requests differing only
40
+ * in citation format MUST NOT share a cache entry. `--max-chars`,
41
+ * `--no-cache`, `--timeout`, and output mode NEVER appear here — they are
42
+ * projections/policy applied around the cached normalized result.
43
+ */
44
+ export interface ResearchRequest {
45
+ readonly query: string;
46
+ /** Research model: mini (cheapest), pro (deepest), auto (default). */
47
+ readonly model?: "mini" | "pro" | "auto";
48
+ /** Output length: short, standard (default), long. */
49
+ readonly outputLength?: "short" | "standard" | "long";
50
+ /** Citation format: numbered (default), mla, apa, chicago. */
51
+ readonly citationFormat?: "numbered" | "mla" | "apa" | "chicago";
52
+ /** Restrict research to a single domain. */
53
+ readonly domain?: string;
54
+ }
55
+ /**
56
+ * A single research source. `favicon` and other Provider-only fields are
57
+ * dropped at the Adapter boundary.
58
+ */
59
+ export interface ResearchSource {
60
+ readonly title: string;
61
+ readonly url: string;
62
+ }
63
+ /**
64
+ * Normalized research result. `schemaVersion: 1` is the breaking shape.
65
+ * `report` is the full report text (cache stores it untruncated;
66
+ * `--max-chars` is a handler projection). `model` echoes the requested
67
+ * model so the cached entry is self-describing.
68
+ */
69
+ export interface ResearchResult {
70
+ readonly schemaVersion: 1;
71
+ readonly query: string;
72
+ readonly model: string;
73
+ readonly report: string;
74
+ readonly sources: readonly ResearchSource[];
75
+ }
76
+ /**
77
+ * Generic Research operation descriptor. The Adapter supplies one of
78
+ * these for the `research-fetch` operation it supports. The Adapter's
79
+ * `invoke()` owns the full create→poll→state-file lifecycle internally
80
+ * (tech-plan §3); shared execution wraps it with cache + zero-retry.
81
+ */
82
+ export interface ResearchOperation extends CachedOperation<ResearchRequest, ResearchResult> {
83
+ readonly kind: ResearchOperationKind;
84
+ }
85
+ /**
86
+ * Research Capability contract. Every Adapter that supports research
87
+ * implements this interface and exposes it as `adapter.research`.
88
+ */
89
+ export interface ResearchCapability {
90
+ readonly run: ResearchOperation;
91
+ }
92
+ /**
93
+ * Decode a ResearchResult from the cache. Returns the canonical
94
+ * `ResearchResult` on success, `null` for any malformed value.
95
+ */
96
+ export declare function decodeResearchResult(value: unknown): ResearchResult | null;
97
+ export type ResearchCacheIdentity = CacheIdentity<ResearchRequest, ResearchResult>;
98
+ //# sourceMappingURL=research.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/capabilities/research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM1E;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAMrD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,sDAAsD;IACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACtD,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IACjE,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AAMD;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,eAAe,CAAC,eAAe,EAAE,cAAc,CAAC;IACzF,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;CACjC;AAkBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CA6B1E;AAID,MAAM,MAAM,qBAAqB,GAAG,aAAa,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Provider-neutral Research Capability Contract (tech-plan §2c, §3).
3
+ *
4
+ * Declares the single Research operation (`research-fetch`), its
5
+ * provider-neutral request, identity, cache, and result shapes, and a
6
+ * total normalized cache decoder.
7
+ *
8
+ * Research is the most complex of the three new Tavily capabilities: it
9
+ * runs an asynchronous create→poll lifecycle server-side and costs 4-250
10
+ * credits per request. The Adapter's `invoke()` owns that full lifecycle
11
+ * (state-file resume, POST, poll loop, completion/failure/404 handling);
12
+ * shared execution wraps it with the standard cache-then-invoke pattern
13
+ * but forces `maxRetries: 0` so a transient POST failure never risks a
14
+ * double-charge (tech-plan §3, §4).
15
+ *
16
+ * It imports NO concrete Provider, transport, or Adapter. It does no
17
+ * query validation, raw response parsing, Provider field mapping,
18
+ * Provider selection, retries, or presentation.
19
+ */
20
+ // ===========================================================================
21
+ // Total normalized cache decoder
22
+ // ===========================================================================
23
+ //
24
+ // Accepts `unknown`, returns the typed result or `null`, never throws, and
25
+ // never trusts a generic cast. Shape contract is local; the Adapter is
26
+ // responsible for producing values that conform to `ResearchResult`.
27
+ function isPlainObject(value) {
28
+ return typeof value === "object" && value !== null && !Array.isArray(value);
29
+ }
30
+ function isNonEmptyString(value) {
31
+ return typeof value === "string" && value.length > 0;
32
+ }
33
+ /**
34
+ * Decode a ResearchResult from the cache. Returns the canonical
35
+ * `ResearchResult` on success, `null` for any malformed value.
36
+ */
37
+ export function decodeResearchResult(value) {
38
+ if (!isPlainObject(value))
39
+ return null;
40
+ if (value.schemaVersion !== 1)
41
+ return null;
42
+ if (!isNonEmptyString(value.query))
43
+ return null;
44
+ if (!isNonEmptyString(value.model))
45
+ return null;
46
+ // `report` may legitimately be empty for a failed-but-completed run, but
47
+ // it must be a string. Require the field; do not require non-empty.
48
+ if (typeof value.report !== "string")
49
+ return null;
50
+ const sources = value.sources;
51
+ if (!Array.isArray(sources))
52
+ return null;
53
+ const decodedSources = [];
54
+ for (const entry of sources) {
55
+ if (!isPlainObject(entry))
56
+ return null;
57
+ if (!isNonEmptyString(entry.title))
58
+ return null;
59
+ if (!isNonEmptyString(entry.url))
60
+ return null;
61
+ decodedSources.push({ title: entry.title, url: entry.url });
62
+ }
63
+ return {
64
+ schemaVersion: 1,
65
+ query: value.query,
66
+ model: value.model,
67
+ report: value.report,
68
+ sources: decodedSources,
69
+ };
70
+ }
71
+ //# sourceMappingURL=research.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/capabilities/research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAiGH,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAC9E,EAAE;AACF,2EAA2E;AAC3E,uEAAuE;AACvE,qEAAqE;AAErE,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,yEAAyE;IACzE,oEAAoE;IACpE,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAElD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,cAAc,GAAqB,EAAE,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,cAAc;KACxB,CAAC;AACJ,CAAC"}
@@ -20,16 +20,24 @@
20
20
  import type { ProviderId } from "../providers/types.js";
21
21
  /** Recency filter accepted by Z.AI; MiniMax rejects it. */
22
22
  export type SearchRecency = "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit";
23
+ /**
24
+ * Topic hint accepted by all Search Providers. Each Adapter maps it
25
+ * differently: Tavily passes it natively; Z.AI and MiniMax append a
26
+ * keyword to the query inside `invoke()`.
27
+ */
28
+ export type SearchTopic = "general" | "news" | "finance";
23
29
  /**
24
30
  * Provider controls accepted by the Search Capability. Every field is
25
31
  * optional. MiniMax rejects `domain`, `recency`, `contentSize`, and
26
- * `location` with `UNSUPPORTED_OPTION` before any SDK access.
32
+ * `location` with `UNSUPPORTED_OPTION` before any SDK access. `topic`
33
+ * is accepted by all adapters.
27
34
  */
28
35
  export interface SearchControls {
29
36
  domain?: string;
30
37
  recency?: SearchRecency;
31
38
  contentSize?: "medium" | "high";
32
39
  location?: "cn" | "us";
40
+ topic?: SearchTopic;
33
41
  }
34
42
  /**
35
43
  * A Search request. `query` must contain at least one non-whitespace
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/capabilities/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMxD,2DAA2D;AAC3D,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,SAAS,GACT,SAAS,CAAC;AAEd;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC;CACxD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;CACnE;AAMD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAEvC;;;;;OAKG;IACH,aAAa,CACX,OAAO,EAAE,aAAa,EACtB,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,mBAAmB,CAAC;IAEvB;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;CAClE"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/capabilities/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMxD,2DAA2D;AAC3D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC;CACxD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;CACnE;AAMD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAEvC;;;;;OAKG;IACH,aAAa,CACX,OAAO,EAAE,aAAa,EACtB,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,mBAAmB,CAAC;IAEvB;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;CAClE"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Crawl command — thin handler over the Crawl Capability
3
+ * (tech-plan §2a, §8).
4
+ *
5
+ * The handler applies parse-level validation (URL scheme), delegates to
6
+ * `capability.fetch(request)` through the generic shared execution
7
+ * wrapper (`executeCachedOperation`), then projects the normalized
8
+ * `CrawlResult` into the public envelope. The Adapter owns URL
9
+ * validation, credentials, transport, raw response parsing, cache
10
+ * identity, and error normalization; the handler owns projection
11
+ * (`--max-chars` per-page truncation) and output-mode presentation.
12
+ *
13
+ * Provider selection, capability support, configuration, Adapter
14
+ * construction, and adapter.crawl agreement live in `src/index.ts`.
15
+ *
16
+ * Cache stores full content; `truncated` and `originalContentLength`
17
+ * are handler projections (mirrors reader).
18
+ */
19
+ import type { CommandContext, CommandResult } from "../command-invocation.js";
20
+ import type { CrawlCapability } from "../capabilities/crawl.js";
21
+ import type { ExecutionDependencies } from "../lib/execution.js";
22
+ export interface CrawlOptions {
23
+ readonly depth?: number;
24
+ readonly breadth?: number;
25
+ readonly limit?: number;
26
+ readonly selectPaths?: string;
27
+ readonly excludePaths?: string;
28
+ readonly instructions?: string;
29
+ readonly format?: "markdown" | "text";
30
+ readonly contentSize?: "medium" | "high";
31
+ readonly timeout?: number;
32
+ readonly noCache?: boolean;
33
+ readonly maxChars?: number;
34
+ }
35
+ /**
36
+ * Dependencies injected by `src/index.ts` after Provider selection,
37
+ * capability support check, configuration check, Adapter construction,
38
+ * and adapter.crawl agreement.
39
+ */
40
+ export interface CrawlHandlerDependencies {
41
+ readonly capability: CrawlCapability;
42
+ readonly execution: ExecutionDependencies;
43
+ }
44
+ export declare function crawl(url: string, options: CrawlOptions | undefined, deps: CrawlHandlerDependencies, _context?: CommandContext): Promise<CommandResult>;
45
+ export declare const CRAWL_HELP: string;
46
+ //# sourceMappingURL=crawl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/commands/crawl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AASjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;CAC3C;AA0FD,wBAAsB,KAAK,CACzB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,YAAK,EAC1B,IAAI,EAAE,wBAAwB,EAC9B,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,aAAa,CAAC,CAwBxB;AAQD,eAAO,MAAM,UAAU,QAuDf,CAAC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Crawl command — thin handler over the Crawl Capability
3
+ * (tech-plan §2a, §8).
4
+ *
5
+ * The handler applies parse-level validation (URL scheme), delegates to
6
+ * `capability.fetch(request)` through the generic shared execution
7
+ * wrapper (`executeCachedOperation`), then projects the normalized
8
+ * `CrawlResult` into the public envelope. The Adapter owns URL
9
+ * validation, credentials, transport, raw response parsing, cache
10
+ * identity, and error normalization; the handler owns projection
11
+ * (`--max-chars` per-page truncation) and output-mode presentation.
12
+ *
13
+ * Provider selection, capability support, configuration, Adapter
14
+ * construction, and adapter.crawl agreement live in `src/index.ts`.
15
+ *
16
+ * Cache stores full content; `truncated` and `originalContentLength`
17
+ * are handler projections (mirrors reader).
18
+ */
19
+ import { executeCachedOperation } from "../lib/execution.js";
20
+ import { OUTPUT_MODES } from "../lib/output.js";
21
+ import { ValidationError } from "../lib/errors.js";
22
+ // ---------------------------------------------------------------------------
23
+ // Parse-level validation
24
+ // ---------------------------------------------------------------------------
25
+ function validateUrl(url) {
26
+ if (!url.startsWith("http://") && !url.startsWith("https://")) {
27
+ throw new ValidationError("URL must start with http:// or https://");
28
+ }
29
+ }
30
+ // ---------------------------------------------------------------------------
31
+ // Projection helpers
32
+ // ---------------------------------------------------------------------------
33
+ /**
34
+ * Apply `--max-chars` truncation to a single page's content. Mirrors the
35
+ * reader's truncation contract: slice to `max - 1`, trim trailing
36
+ * whitespace, append `…`.
37
+ */
38
+ function truncateContent(content, max) {
39
+ const originalLen = content.length;
40
+ if (!max || max <= 0 || originalLen <= max) {
41
+ return { text: content, originalLen, truncated: false };
42
+ }
43
+ return { text: content.slice(0, max - 1).trimEnd() + "…", originalLen, truncated: true };
44
+ }
45
+ /**
46
+ * Build the Provider-neutral CrawlRequest from CrawlOptions. Only fields
47
+ * that affect the Provider request or the cache identity appear here;
48
+ * `--max-chars`, `--no-cache`, and output mode never enter the request.
49
+ */
50
+ function buildCrawlRequest(url, options) {
51
+ const request = { url };
52
+ if (options.depth !== undefined)
53
+ request.depth = options.depth;
54
+ if (options.breadth !== undefined)
55
+ request.breadth = options.breadth;
56
+ if (options.limit !== undefined)
57
+ request.limit = options.limit;
58
+ if (options.selectPaths !== undefined)
59
+ request.selectPaths = options.selectPaths;
60
+ if (options.excludePaths !== undefined)
61
+ request.excludePaths = options.excludePaths;
62
+ if (options.instructions !== undefined)
63
+ request.instructions = options.instructions;
64
+ if (options.format !== undefined)
65
+ request.format = options.format;
66
+ if (options.contentSize !== undefined)
67
+ request.contentSize = options.contentSize;
68
+ if (options.timeout !== undefined)
69
+ request.timeout = options.timeout;
70
+ return request;
71
+ }
72
+ function projectPage(page, maxChars) {
73
+ if (!maxChars || maxChars <= 0) {
74
+ return { url: page.url, content: page.content, contentFormat: page.contentFormat };
75
+ }
76
+ const { text, originalLen, truncated } = truncateContent(page.content, maxChars);
77
+ return {
78
+ url: page.url,
79
+ content: text,
80
+ contentFormat: page.contentFormat,
81
+ truncated,
82
+ originalContentLength: originalLen,
83
+ };
84
+ }
85
+ function buildCrawlPresentations(pages) {
86
+ const urls = pages.map((p) => p.url);
87
+ const compact = urls.join("\n");
88
+ const refs = urls.map((u, i) => `[${i + 1}] ${u}`).join("\n");
89
+ const markdown = pages.map((p) => `## ${p.url}\n\n${p.content}`).join("\n\n---\n\n");
90
+ return { compact, markdown, refs, tty: markdown };
91
+ }
92
+ // ---------------------------------------------------------------------------
93
+ // Handler
94
+ // ---------------------------------------------------------------------------
95
+ export async function crawl(url, options = {}, deps, _context) {
96
+ validateUrl(url);
97
+ const request = buildCrawlRequest(url, options);
98
+ const result = await executeCachedOperation(deps.capability.fetch, request, { noCache: options.noCache === true }, deps.execution);
99
+ // Projection: apply --max-chars per page. The cache stores full content;
100
+ // truncation state is recomputed on every read.
101
+ const projectedPages = result.pages.map((page) => projectPage(page, options.maxChars));
102
+ const envelope = {
103
+ schemaVersion: 1,
104
+ baseUrl: result.baseUrl,
105
+ pages: projectedPages,
106
+ totalPages: result.totalPages,
107
+ };
108
+ return { kind: "data", data: envelope, presentations: buildCrawlPresentations(projectedPages) };
109
+ }
110
+ // ---------------------------------------------------------------------------
111
+ // Help
112
+ // ---------------------------------------------------------------------------
113
+ const OUTPUT_MODE_LIST = OUTPUT_MODES.join(" | ");
114
+ export const CRAWL_HELP = `
115
+ Crawl Command - Crawl a website starting from a URL (Provider Capability)
116
+
117
+ Usage: scoutline crawl <url> [options]
118
+
119
+ Crawls pages starting from <url>, following links up to the configured
120
+ depth and breadth. Returns a structured result with an array of pages.
121
+
122
+ Provider selection (precedence: --provider, then SCOUTLINE_PROVIDER,
123
+ then the configured default):
124
+ - Tavily advertises the crawl Capability and supplies the Adapter.
125
+ - Z.AI and MiniMax do NOT advertise crawl. Selecting them returns
126
+ UNSUPPORTED_CAPABILITY with no fallback.
127
+
128
+ Options:
129
+ --depth <n> Crawl depth, 1-5 (default: 1)
130
+ --breadth <n> Max links to follow per page, 1-500 (default: 20)
131
+ --limit <n> Total pages to process (default: 50)
132
+ --select-paths <rx> Comma-separated regex patterns to select URL paths
133
+ --exclude-paths <rx> Comma-separated regex patterns to exclude URL paths
134
+ --instructions <t> Natural language instructions for page selection
135
+ --format <f> Output format: markdown (default), text
136
+ --content-size <s> Extraction depth: medium (default), high
137
+ --timeout <s> Request timeout in seconds (default: 150)
138
+ --max-chars <n> Truncate each page's content to <n> chars
139
+ (projection only; cache stores full content)
140
+ --no-cache Bypass the response cache for this invocation
141
+
142
+ Common Options:
143
+ --provider <id> Override the active Provider (zai | minimax | tavily)
144
+ --output-format <mode> One of: ${OUTPUT_MODE_LIST} (default: data)
145
+ -O <mode> Alias for --output-format
146
+
147
+ Output format (schema-version-1):
148
+ {
149
+ "schemaVersion": 1,
150
+ "baseUrl": "<the URL you passed>",
151
+ "pages": [
152
+ {
153
+ "url": "<page URL>",
154
+ "content": "<page body as markdown/text>",
155
+ "contentFormat": "markdown" | "text",
156
+ "truncated": false, // present when --max-chars is set
157
+ "originalContentLength": <number> // present when --max-chars is set
158
+ }
159
+ ],
160
+ "totalPages": <number>
161
+ }
162
+
163
+ Examples:
164
+ scoutline crawl https://docs.example.com --depth 1
165
+ scoutline crawl https://example.com --depth 2 --breadth 10 --limit 20
166
+ scoutline crawl https://docs.example.com --select-paths "/api/.*,/guide/.*"
167
+ scoutline crawl https://example.com --format text --max-chars 2000
168
+ scoutline --provider tavily crawl https://example.com --depth 3
169
+ `.trim();
170
+ //# sourceMappingURL=crawl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/commands/crawl.ts"],"names":[],"mappings":"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"}
@@ -38,14 +38,13 @@ export interface DoctorDiagnosticsDependencies {
38
38
  readonly cacheSummary?: string;
39
39
  }
40
40
  /**
41
- * Build a schema-version-1 {@link DiagnosticsReport}. Inventory
42
- * (`sharedCapabilities`, `zaiOnlyCapabilities`) is derived purely from
43
- * `deps.descriptors` — no descriptor.create(), no transport, no
44
- * production registry import. Under `--no-tools` the command returns
45
- * after metadata + configured-state evaluation. Otherwise each
46
- * configured Provider is probed through shared execution with settled
47
- * collection, preserving registry order and normalized redacted
48
- * failures.
41
+ * Build a schema-version-2 {@link DiagnosticsReport}. Inventory
42
+ * (`capabilityMatrix`) is derived purely from `deps.descriptors` — no
43
+ * descriptor.create(), no transport, no production registry import.
44
+ * Under `--no-tools` the command returns after metadata +
45
+ * configured-state evaluation. Otherwise each configured Provider is
46
+ * probed through shared execution with settled collection, preserving
47
+ * registry order and normalized redacted failures.
49
48
  */
50
49
  export declare function buildDiagnosticsReport(deps: DoctorDiagnosticsDependencies): Promise<DiagnosticsReport>;
51
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,gCAAgC,CAAC;AASxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAsB,MAAM,uBAAuB,CAAC;AAMhG,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AA6CD;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAkC5B;AA4CD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAKhE;AAMD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAO3C;AAED,eAAO,MAAM,WAAW,QAuDhB,CAAC"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,gCAAgC,CAAC;AAKxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAsB,MAAM,uBAAuB,CAAC;AAMhG,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AA6CD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAiC5B;AA4CD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAKhE;AAMD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAO3C;AAED,eAAO,MAAM,WAAW,QA4DhB,CAAC"}