@autorag/librarian 2.0.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.
- package/LICENSE +27 -0
- package/README.md +275 -0
- package/dist/agent/agent.d.ts +294 -0
- package/dist/agent/bash-tool.d.ts +41 -0
- package/dist/agent/datasource-skill.d.ts +45 -0
- package/dist/agent/emit-results-tool.d.ts +75 -0
- package/dist/agent/index.d.ts +11 -0
- package/dist/agent/jikji-find-tool.d.ts +73 -0
- package/dist/agent/search-all-tool.d.ts +36 -0
- package/dist/agent/search-bm25-tool.d.ts +18 -0
- package/dist/agent/search-datasource-tool.d.ts +26 -0
- package/dist/agent/search-documents.d.ts +56 -0
- package/dist/agent/search-minsync-tool.d.ts +24 -0
- package/dist/agent/system-prompt.d.ts +13 -0
- package/dist/agent/watch-refresh.d.ts +29 -0
- package/dist/cli/commands/feedback.d.ts +8 -0
- package/dist/cli/commands/health.d.ts +146 -0
- package/dist/cli/commands/index.d.ts +9 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/memory.d.ts +8 -0
- package/dist/cli/commands/refresh.d.ts +19 -0
- package/dist/cli/commands/search.d.ts +34 -0
- package/dist/cli/commands/status.d.ts +7 -0
- package/dist/cli/commands/types.d.ts +10 -0
- package/dist/cli/commands/watch.d.ts +8 -0
- package/dist/cli/config.d.ts +172 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.js +10845 -0
- package/dist/cli/output.d.ts +32 -0
- package/dist/config/home.d.ts +2 -0
- package/dist/datasource/access-context.d.ts +49 -0
- package/dist/datasource/diagnostics.d.ts +20 -0
- package/dist/datasource/index.d.ts +9 -0
- package/dist/datasource/polling.d.ts +51 -0
- package/dist/datasource/registry.d.ts +52 -0
- package/dist/datasource/result-filter.d.ts +63 -0
- package/dist/datasource/scope.d.ts +38 -0
- package/dist/datasource/skills/katok/client.d.ts +24 -0
- package/dist/datasource/skills/katok/index.d.ts +12 -0
- package/dist/datasource/skills/katok/methods.d.ts +40 -0
- package/dist/datasource/skills/katok/paths.d.ts +40 -0
- package/dist/datasource/skills/katok/skill.d.ts +33 -0
- package/dist/datasource/skills/katok/types.d.ts +146 -0
- package/dist/datasource/types.d.ts +183 -0
- package/dist/filesystem/file-lock.d.ts +16 -0
- package/dist/filesystem/source-paths.d.ts +38 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +9361 -0
- package/dist/jikji/answer-pack.d.ts +31 -0
- package/dist/jikji/client.d.ts +18 -0
- package/dist/jikji/diagnostics.d.ts +26 -0
- package/dist/jikji/index.d.ts +10 -0
- package/dist/jikji/installer.d.ts +46 -0
- package/dist/jikji/path-map.d.ts +8 -0
- package/dist/jikji/types.d.ts +112 -0
- package/dist/manifest/index.d.ts +2 -0
- package/dist/manifest/loader.d.ts +3 -0
- package/dist/manifest/types.d.ts +8 -0
- package/dist/memory/check-memory-tool.d.ts +13 -0
- package/dist/memory/index.d.ts +5 -0
- package/dist/memory/memory.d.ts +179 -0
- package/dist/memory/renderer.d.ts +6 -0
- package/dist/minsync/client.d.ts +14 -0
- package/dist/minsync/embedder-config.d.ts +22 -0
- package/dist/minsync/index.d.ts +7 -0
- package/dist/minsync/installer.d.ts +27 -0
- package/dist/minsync/method.d.ts +37 -0
- package/dist/minsync/paths.d.ts +4 -0
- package/dist/minsync/process.d.ts +10 -0
- package/dist/minsync/types.d.ts +33 -0
- package/dist/minsync/workspace.d.ts +14 -0
- package/dist/mirror/index-store.d.ts +16 -0
- package/dist/mirror/index.d.ts +5 -0
- package/dist/mirror/paths.d.ts +6 -0
- package/dist/mirror/sync.d.ts +38 -0
- package/dist/observability/run-log.d.ts +53 -0
- package/dist/parser/defaults.d.ts +6 -0
- package/dist/parser/eml.d.ts +6 -0
- package/dist/parser/errors.d.ts +5 -0
- package/dist/parser/hwp.d.ts +6 -0
- package/dist/parser/index.d.ts +10 -0
- package/dist/parser/ocr.d.ts +25 -0
- package/dist/parser/office.d.ts +16 -0
- package/dist/parser/opendataloader-pdf.d.ts +21 -0
- package/dist/parser/plain-text.d.ts +6 -0
- package/dist/parser/registry.d.ts +8 -0
- package/dist/parser/text.d.ts +2 -0
- package/dist/parser/types.d.ts +14 -0
- package/dist/parser/xml-text.d.ts +2 -0
- package/dist/retrieval/evidence-id.d.ts +16 -0
- package/dist/retrieval/index.d.ts +7 -0
- package/dist/retrieval/merger.d.ts +18 -0
- package/dist/retrieval/methods/bm25.d.ts +52 -0
- package/dist/retrieval/registry.d.ts +8 -0
- package/dist/retrieval/scope.d.ts +4 -0
- package/dist/retrieval/types.d.ts +64 -0
- package/dist/subagents/contracts.d.ts +90 -0
- package/dist/subagents/dispatch-templates.d.ts +104 -0
- package/dist/subagents/dispatch-validation.d.ts +169 -0
- package/dist/subagents/explorer-tools-extension.d.ts +4 -0
- package/dist/subagents/explorer-tools-extension.js +130 -0
- package/dist/subagents/local-models.d.ts +14 -0
- package/dist/subagents/model-policy.d.ts +31 -0
- package/dist/subagents/runtime.d.ts +52 -0
- package/dist/tool/index.d.ts +1 -0
- package/dist/types/errors.d.ts +4 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +66 -0
- package/skills/autorag/SKILL.md +149 -0
- package/skills/autorag-setup/SKILL.md +396 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AutoRAGRefreshResult, AutoRAGRefreshStatus } from "../agent/agent.js";
|
|
2
|
+
import type { SearchDocumentsResponse } from "../agent/search-documents.js";
|
|
3
|
+
import type { MemorySchemaV4 } from "../memory/memory.js";
|
|
4
|
+
import type { HealthReportV1 } from "./commands/health.js";
|
|
5
|
+
import type { SearchHealthHint } from "./commands/search.js";
|
|
6
|
+
export interface RenderOptions {
|
|
7
|
+
json?: boolean;
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
hint?: SearchHealthHint;
|
|
10
|
+
}
|
|
11
|
+
export declare function renderRefresh(result: AutoRAGRefreshResult, opts: RenderOptions): string;
|
|
12
|
+
export declare function renderStatus(status: AutoRAGRefreshStatus, opts: RenderOptions): string;
|
|
13
|
+
export declare function renderSearch(resp: SearchDocumentsResponse, opts: RenderOptions): string;
|
|
14
|
+
export declare function renderMemory(schema: MemorySchemaV4, opts: RenderOptions): string;
|
|
15
|
+
export declare function renderFeedback(result: {
|
|
16
|
+
applied: boolean;
|
|
17
|
+
sessionId: string;
|
|
18
|
+
}, opts: RenderOptions): string;
|
|
19
|
+
export declare function renderIndex(result: {
|
|
20
|
+
action: "reset" | "rebuild";
|
|
21
|
+
removed: string[];
|
|
22
|
+
rebuilt?: AutoRAGRefreshResult;
|
|
23
|
+
}, opts: RenderOptions): string;
|
|
24
|
+
export declare function renderError(err: unknown, opts: RenderOptions): string;
|
|
25
|
+
/**
|
|
26
|
+
* Render a {@link HealthReportV1} as stable JSON or safe human text.
|
|
27
|
+
*
|
|
28
|
+
* The JSON envelope is the full report object; the health command already
|
|
29
|
+
* sanitizes all messages, base URLs, and metadata, so nothing here re-parses
|
|
30
|
+
* for secrets/paths. Human output stays path/secret/stack-free.
|
|
31
|
+
*/
|
|
32
|
+
export declare function renderHealth(report: HealthReportV1, opts: RenderOptions): string;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trusted, server-bound access context for the datasource layer.
|
|
3
|
+
*
|
|
4
|
+
* Constructed from server-supplied allow-tags and allow-scopes ONLY — never
|
|
5
|
+
* from model or tool arguments. Enforces default-deny semantics and uses
|
|
6
|
+
* explicit boolean `false` for every deny decision (never `undefined`).
|
|
7
|
+
*/
|
|
8
|
+
import type { DatasourceAccessible } from "./types.js";
|
|
9
|
+
export interface DatasourceAccessContextOptions {
|
|
10
|
+
/** Trusted allow-tags. Undefined or empty ⇒ default-deny (isDenyAll). */
|
|
11
|
+
readonly allowedTags?: readonly string[];
|
|
12
|
+
/** Trusted allow-scopes as slash-hierarchical paths or globs. */
|
|
13
|
+
readonly allowedScopes?: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Access context for gating datasource descriptors and sources.
|
|
17
|
+
*
|
|
18
|
+
* Non-datasource descriptors (those without a `datasourceId`) are NOT gated
|
|
19
|
+
* by this context: {@link isAccessible} returns `true` for them so plain
|
|
20
|
+
* retrieval methods (e.g. `posix`) pass through unchanged.
|
|
21
|
+
*/
|
|
22
|
+
export declare class DatasourceAccessContext {
|
|
23
|
+
readonly allowedTags: readonly string[];
|
|
24
|
+
readonly allowedScopes: readonly string[];
|
|
25
|
+
private readonly denyAll;
|
|
26
|
+
constructor(options?: DatasourceAccessContextOptions);
|
|
27
|
+
/** True when the context denies everything (no trusted allow-tags). */
|
|
28
|
+
get isDenyAll(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Whether a descriptor is accessible.
|
|
31
|
+
*
|
|
32
|
+
* Non-datasource descriptors (no `datasourceId`) pass through (`true`) —
|
|
33
|
+
* they are not gated by this context. Datasource descriptors require at
|
|
34
|
+
* least one tag intersecting the trusted allow-tags.
|
|
35
|
+
*/
|
|
36
|
+
isAccessible(descriptor: DatasourceAccessible): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Build a predicate that filters source paths by trusted allow-scopes,
|
|
39
|
+
* intersected with an optional user-supplied scope (the model/tool view).
|
|
40
|
+
*
|
|
41
|
+
* The predicate always returns an explicit boolean. On default-deny it
|
|
42
|
+
* returns `() => false`. Sources containing a `#` fragment are denied
|
|
43
|
+
* (datasource sources are slash-hierarchical only).
|
|
44
|
+
*
|
|
45
|
+
* @param userScope Optional user/model-requested scope; when provided a
|
|
46
|
+
* source must match BOTH a trusted allow-scope AND the user scope.
|
|
47
|
+
*/
|
|
48
|
+
allowedSourcesPredicate(userScope?: string): (source: string) => boolean;
|
|
49
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostic mapping for the datasource layer.
|
|
3
|
+
*
|
|
4
|
+
* Datasource operations surface {@link DatasourceDiagnostic} entries (with
|
|
5
|
+
* datasource-specific codes). The agent/search pipeline consumes
|
|
6
|
+
* {@link RetrievalDiagnostic}; these helpers bridge the two. Messages and
|
|
7
|
+
* sources are passed through verbatim.
|
|
8
|
+
*/
|
|
9
|
+
import type { RetrievalDiagnostic } from "../retrieval/types.js";
|
|
10
|
+
import type { DatasourceDiagnostic } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Map a single {@link DatasourceDiagnostic} to a {@link RetrievalDiagnostic}.
|
|
13
|
+
*
|
|
14
|
+
* The original datasource code is preserved as a `[datasource:<code>]` prefix
|
|
15
|
+
* in the message (datasource codes collapse onto the generic
|
|
16
|
+
* `retrieval-method-failed` code in the retrieval stream's closed union).
|
|
17
|
+
*/
|
|
18
|
+
export declare function mapDatasourceDiagnostic(ds: DatasourceDiagnostic): RetrievalDiagnostic;
|
|
19
|
+
/** Map a list of datasource diagnostics to retrieval diagnostics. */
|
|
20
|
+
export declare function mapDatasourceDiagnostics(diagnostics: readonly DatasourceDiagnostic[]): RetrievalDiagnostic[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { DatasourceAccessContext, type DatasourceAccessContextOptions } from "./access-context.js";
|
|
2
|
+
export { mapDatasourceDiagnostic, mapDatasourceDiagnostics } from "./diagnostics.js";
|
|
3
|
+
export { type CronParseResult, isDue, parseCronExpr } from "./polling.js";
|
|
4
|
+
export { DatasourceSkillRegistry, type RegisteredDatasourceSkill } from "./registry.js";
|
|
5
|
+
export { DatasourceResultFilter, type ResultsByMethod } from "./result-filter.js";
|
|
6
|
+
export { buildDatasourceChunkSource, buildDatasourceInstanceSource, DATASOURCE_CHUNKS_SEGMENT, datasourceSourceHasFragment, datasourceSourcePath, isDatasourceSource, matchesDatasourceScope, matchesVirtualPathScope, normalizeVirtualPath, } from "./scope.js";
|
|
7
|
+
export type { KatokFailureReason, KatokHit, KatokOptions, KatokSearchMode, KatokSearchOptions, KatokSearchResult, KatokSkillClient, KatokSkillOptions, } from "./skills/katok/index.js";
|
|
8
|
+
export { KatokBm25Method, KatokClient, KatokSemanticMethod, KatokSkill } from "./skills/katok/index.js";
|
|
9
|
+
export type { DatasourceAccessible, DatasourceDiagnostic, DatasourceDiagnosticCode, DatasourceIndexFail, DatasourceIndexOk, DatasourceIndexResult, DatasourceInstance, DatasourceSkill, DatasourceSkillDescriptor, DatasourceSkillManifest, PollingMetadata, SourceDescription, } from "./types.js";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polling helpers for datasource skills.
|
|
3
|
+
*
|
|
4
|
+
* v1 supports a simple interval-based `poll` mode plus a cron-expression
|
|
5
|
+
* validator. Cron is **descriptor-only**: {@link parseCronExpr} validates
|
|
6
|
+
* syntax so a skill descriptor can declare a schedule, but this module never
|
|
7
|
+
* schedules or fires jobs — scheduling is a caller/server concern.
|
|
8
|
+
*/
|
|
9
|
+
import type { PollingMetadata } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Whether a datasource skill/instance is due for a poll/index at `now`.
|
|
12
|
+
*
|
|
13
|
+
* Rules (v1, poll mode only):
|
|
14
|
+
* - `mode !== "poll"` ⇒ never due (no automatic polling).
|
|
15
|
+
* - `intervalMs` missing or non-positive ⇒ never due (misconfigured).
|
|
16
|
+
* - never indexed (`lastIndexedAt` unknown) ⇒ due immediately.
|
|
17
|
+
* - otherwise due iff `now - lastIndexedAt >= intervalMs`.
|
|
18
|
+
*
|
|
19
|
+
* `lastIndexedAt` is taken from the explicit argument when provided,
|
|
20
|
+
* otherwise from {@link PollingMetadata.lastIndexedAt}; this lets a caller
|
|
21
|
+
* pass an authoritative value that may differ from stale metadata.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isDue(metadata: PollingMetadata, now: number, lastIndexedAt?: number): boolean;
|
|
24
|
+
/** Successful cron parse result. */
|
|
25
|
+
export interface CronParseOk {
|
|
26
|
+
readonly ok: true;
|
|
27
|
+
/** The normalized (trimmed) expression. */
|
|
28
|
+
readonly expr: string;
|
|
29
|
+
}
|
|
30
|
+
/** Failed cron parse result with a human-readable error. */
|
|
31
|
+
export interface CronParseFail {
|
|
32
|
+
readonly ok: false;
|
|
33
|
+
readonly error: string;
|
|
34
|
+
}
|
|
35
|
+
/** Result of {@link parseCronExpr}. */
|
|
36
|
+
export type CronParseResult = CronParseOk | CronParseFail;
|
|
37
|
+
/**
|
|
38
|
+
* Validate a 5-field cron expression.
|
|
39
|
+
*
|
|
40
|
+
* Fields: `minute hour day-of-month month day-of-week`.
|
|
41
|
+
*
|
|
42
|
+
* Supported syntax per field: star, star-slash-n, n, a-b, a-b-slash-n,
|
|
43
|
+
* and comma lists of the above (e.g. 1,15,30). Extended forms (L, W, ?,
|
|
44
|
+
* NOT supported and will fail validation.
|
|
45
|
+
*
|
|
46
|
+
* Ranges: minute 0–59, hour 0–23, day-of-month 1–31, month 1–12, day-of-week
|
|
47
|
+
* 0–7 (where both 0 and 7 denote Sunday).
|
|
48
|
+
*
|
|
49
|
+
* This function only validates syntax. It does not schedule anything.
|
|
50
|
+
*/
|
|
51
|
+
export declare function parseCronExpr(expr: string): CronParseResult;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-bound registry of datasource skills.
|
|
3
|
+
*
|
|
4
|
+
* Skills are constructed from trusted, server-supplied configuration and
|
|
5
|
+
* registered here so the retrieval pipeline can enumerate them, look them up
|
|
6
|
+
* by tag, and resolve the concrete instances a given access context permits.
|
|
7
|
+
*
|
|
8
|
+
* The registry never grants access: {@link resolveInstances} only *narrows*
|
|
9
|
+
* the registered skills to those a {@link DatasourceAccessContext} already
|
|
10
|
+
* allows. Model/tool arguments are not consulted.
|
|
11
|
+
*/
|
|
12
|
+
import type { RetrievalMethod } from "../retrieval/types.js";
|
|
13
|
+
import type { DatasourceAccessContext } from "./access-context.js";
|
|
14
|
+
import type { DatasourceInstance, DatasourceSkill, DatasourceSkillDescriptor } from "./types.js";
|
|
15
|
+
/** A registered skill paired with its cached descriptor. */
|
|
16
|
+
export interface RegisteredDatasourceSkill {
|
|
17
|
+
readonly skill: DatasourceSkill;
|
|
18
|
+
readonly descriptor: DatasourceSkillDescriptor;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Registry of {@link DatasourceSkill}s keyed by stable skill id
|
|
22
|
+
* ({@link DatasourceSkillDescriptor.name}).
|
|
23
|
+
*/
|
|
24
|
+
export declare class DatasourceSkillRegistry {
|
|
25
|
+
private readonly skills;
|
|
26
|
+
/**
|
|
27
|
+
* Register a datasource skill. Throws if a skill with the same
|
|
28
|
+
* {@link DatasourceSkillDescriptor.name} is already registered.
|
|
29
|
+
*/
|
|
30
|
+
register(skill: DatasourceSkill): void;
|
|
31
|
+
/** All registered skills in insertion order. */
|
|
32
|
+
list(): readonly RegisteredDatasourceSkill[];
|
|
33
|
+
/** Skills whose descriptor carries the given tag. */
|
|
34
|
+
byTag(tag: string): readonly RegisteredDatasourceSkill[];
|
|
35
|
+
/** Look up a registered skill by id, or `undefined`. */
|
|
36
|
+
get(id: string): RegisteredDatasourceSkill | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Resolve the concrete datasource instances reachable under `ctx`.
|
|
39
|
+
*
|
|
40
|
+
* Only skills whose descriptor {@link DatasourceAccessContext.isAccessible}
|
|
41
|
+
* allows contribute instances, and only their declared instance ids are
|
|
42
|
+
* materialized. Each instance carries its opaque slash-hierarchical
|
|
43
|
+
* {@link DatasourceInstance.sourcePath} (e.g. `/kakao/acct-1`), built from
|
|
44
|
+
* the trusted skill name and instance id — never from model input.
|
|
45
|
+
*/
|
|
46
|
+
resolveInstances(ctx: DatasourceAccessContext): readonly DatasourceInstance[];
|
|
47
|
+
/**
|
|
48
|
+
* Convenience: all retrieval methods exposed by accessible skills, for
|
|
49
|
+
* feeding the shared retriever. Methods from denied skills are excluded.
|
|
50
|
+
*/
|
|
51
|
+
accessibleMethods(ctx: DatasourceAccessContext): readonly RetrievalMethod[];
|
|
52
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result filter that applies datasource access gating to the shared retrieval
|
|
3
|
+
* result stream.
|
|
4
|
+
*
|
|
5
|
+
* The filter sits *after* {@link ParallelRetriever} and *before* merging: it
|
|
6
|
+
* takes the per-method result map and the {@link RetrievalMethod}s that
|
|
7
|
+
* produced it, then for every datasource-backed method either drops all of
|
|
8
|
+
* its results (when the trusted access context denies the descriptor) or
|
|
9
|
+
* keeps only the sources the context allows for the current user scope.
|
|
10
|
+
*
|
|
11
|
+
* Non-datasource methods (those whose descriptor has no `datasourceId`) pass
|
|
12
|
+
* through completely untouched — they are gated by their own retrieval
|
|
13
|
+
* pipeline, not by the datasource access context.
|
|
14
|
+
*
|
|
15
|
+
* Security invariants:
|
|
16
|
+
* - Deny is always an explicit `false` (an empty result array), never
|
|
17
|
+
* `undefined`-as-deny. {@link DatasourceAccessContext} itself returns
|
|
18
|
+
* explicit booleans from its predicate; this filter never passes
|
|
19
|
+
* `undefined` to `matchesVirtualPathScope` as a deny signal.
|
|
20
|
+
* - The filter never grants access. It only narrows results using the
|
|
21
|
+
* trusted, server-supplied {@link DatasourceAccessContext}; model/tool
|
|
22
|
+
* arguments (such as `userScope`) can only *further restrict* the trusted
|
|
23
|
+
* allow-scopes, never widen them.
|
|
24
|
+
*/
|
|
25
|
+
import type { RetrievalMethod, RetrievalResult } from "../retrieval/types.js";
|
|
26
|
+
import type { DatasourceAccessContext } from "./access-context.js";
|
|
27
|
+
/** Per-method retrieval results keyed by method name. */
|
|
28
|
+
export type ResultsByMethod = Map<string, RetrievalResult[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Applies datasource access gating to a per-method result map.
|
|
31
|
+
*
|
|
32
|
+
* The instance form lets callers wire a {@link DatasourceSkillRegistry} for
|
|
33
|
+
* future descriptor enrichment; the v1 filter only needs the
|
|
34
|
+
* {@link RetrievalMethodDescriptor} carried by each method, which already
|
|
35
|
+
* satisfies {@link DatasourceAccessible} structurally (`datasourceId?` +
|
|
36
|
+
* `tags?`).
|
|
37
|
+
*/
|
|
38
|
+
export declare class DatasourceResultFilter {
|
|
39
|
+
/**
|
|
40
|
+
* Filter `byMethod` according to datasource access rules.
|
|
41
|
+
*
|
|
42
|
+
* For each method present in both `byMethod` and `methods`:
|
|
43
|
+
* - non-datasource methods (`descriptor.datasourceId` unset) are passed
|
|
44
|
+
* through with their result array unchanged;
|
|
45
|
+
* - datasource methods whose descriptor is denied by `ctx` are reduced to
|
|
46
|
+
* an empty result array (`[]` — explicit deny, never `undefined`);
|
|
47
|
+
* - datasource methods whose descriptor is allowed are filtered so only
|
|
48
|
+
* sources matching `ctx.allowedSourcesPredicate(userScope)` survive.
|
|
49
|
+
*
|
|
50
|
+
* Result entries for methods not present in `methods` are passed through
|
|
51
|
+
* unchanged (the filter cannot classify them and must not fabricate a
|
|
52
|
+
* descriptor). A new {@link ResultsByMethod} is returned; the input map is
|
|
53
|
+
* not mutated.
|
|
54
|
+
*
|
|
55
|
+
* @param byMethod Per-method results from the retriever.
|
|
56
|
+
* @param methods The {@link RetrievalMethod}s that produced them.
|
|
57
|
+
* @param ctx Trusted, server-supplied access context.
|
|
58
|
+
* @param userScope Optional user/model-requested scope; when provided it
|
|
59
|
+
* is intersected with the trusted allow-scopes and can only narrow
|
|
60
|
+
* results. `undefined` means "no extra user restriction".
|
|
61
|
+
*/
|
|
62
|
+
filter(byMethod: ResultsByMethod, methods: readonly RetrievalMethod[], ctx: DatasourceAccessContext, userScope?: string): ResultsByMethod;
|
|
63
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slash-hierarchical source-path helpers for the datasource layer.
|
|
3
|
+
*
|
|
4
|
+
* Datasource sources are opaque, slash-hierarchical paths such as
|
|
5
|
+
* `/kakao/<instance-id>` and `/kakao/<instance-id>/chunks/<chunk-id>`.
|
|
6
|
+
* `#` fragments are NEVER produced or matched — sources are pure path trees.
|
|
7
|
+
*
|
|
8
|
+
* Reuses {@link normalizeVirtualPath} and {@link matchesVirtualPathScope} from
|
|
9
|
+
* `src/retrieval/scope.ts` so datasource scopes compose with the existing
|
|
10
|
+
* retrieval scope grammar (globs, leading-slash normalization).
|
|
11
|
+
*/
|
|
12
|
+
/** Path segment separating an instance root from its chunk sub-namespace. */
|
|
13
|
+
export declare const DATASOURCE_CHUNKS_SEGMENT = "chunks";
|
|
14
|
+
/**
|
|
15
|
+
* Build the opaque root source for a datasource instance, e.g.
|
|
16
|
+
* `/kakao/acct-1`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildDatasourceInstanceSource(skillName: string, instanceId: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Build the opaque source for a single datasource chunk, e.g.
|
|
21
|
+
* `/kakao/acct-1/chunks/c-42`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildDatasourceChunkSource(skillName: string, instanceId: string, chunkId: string): string;
|
|
24
|
+
export declare function datasourceSourcePath(skillName: string, instanceId: string, chunkId?: string): string;
|
|
25
|
+
/** True when a source string contains a `#` fragment (always invalid here). */
|
|
26
|
+
export declare function datasourceSourceHasFragment(source: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Whether a string is a valid datasource source: a non-root, normalized,
|
|
29
|
+
* slash-hierarchical path with no `#` fragment.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isDatasourceSource(source: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Match a datasource source against a scope. Returns `false` when the source
|
|
34
|
+
* contains a `#` fragment; otherwise delegates to the shared retrieval
|
|
35
|
+
* scope matcher so globs and leading-slash normalization behave identically.
|
|
36
|
+
*/
|
|
37
|
+
export declare function matchesDatasourceScope(source: string, scope: string | undefined): boolean;
|
|
38
|
+
export { matchesVirtualPathScope, normalizeVirtualPath } from "../retrieval/scope.js";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { KatokChunkResult, KatokContextResult, KatokDoctorResult, KatokIndexResult, KatokOptions, KatokParentResult, KatokSearchMode, KatokSearchOptions, KatokSearchResult, KatokSyncResult } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Thin external `katok` CLI wrapper. Every method spawns the `katok` binary as
|
|
4
|
+
* a child process, parses JSON from stdout, and returns a discriminated ok/fail
|
|
5
|
+
* union. No method throws for expected failures (missing binary, rejected
|
|
6
|
+
* remote-embedding config, CLI nonzero exit, timeout, oversized output, or
|
|
7
|
+
* invalid JSON). The client never opens the KakaoTalk database directly.
|
|
8
|
+
*
|
|
9
|
+
* Remote-embedding configuration is rejected before spawn, case-insensitively,
|
|
10
|
+
* so the spawned process can never egress embeddings to a remote endpoint.
|
|
11
|
+
*/
|
|
12
|
+
export declare class KatokClient {
|
|
13
|
+
private readonly options;
|
|
14
|
+
constructor(options?: KatokOptions);
|
|
15
|
+
doctor(signal?: AbortSignal): Promise<KatokDoctorResult>;
|
|
16
|
+
sync(signal?: AbortSignal): Promise<KatokSyncResult>;
|
|
17
|
+
index(signal?: AbortSignal): Promise<KatokIndexResult>;
|
|
18
|
+
search(mode: KatokSearchMode, query: string, options?: KatokSearchOptions): Promise<KatokSearchResult>;
|
|
19
|
+
chunkGet(chunkId: string, signal?: AbortSignal): Promise<KatokChunkResult>;
|
|
20
|
+
context(chunkId: string, signal?: AbortSignal): Promise<KatokContextResult>;
|
|
21
|
+
parent(chunkId: string, signal?: AbortSignal): Promise<KatokParentResult>;
|
|
22
|
+
/** Single retrieval pipeline: build env, gate remote embeddings, spawn, parse-free raw result. */
|
|
23
|
+
private run;
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KakaoTalk datasource skill barrel.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the retrieval methods and skill plus the underlying client/types
|
|
5
|
+
* from sibling modules. Public source paths are path-opaque virtual paths of
|
|
6
|
+
* the form `/kakao/<instance-id>/chunks/<chunk-id>`.
|
|
7
|
+
*/
|
|
8
|
+
export { KatokClient } from "./client.js";
|
|
9
|
+
export { KatokBm25Method, type KatokMethodOptions, type KatokSearchClient, KatokSemanticMethod } from "./methods.js";
|
|
10
|
+
export { KatokSkill, type KatokSkillClient, type KatokSkillOptions } from "./skill.js";
|
|
11
|
+
export type { KatokChunkResult, KatokDoctorResult, KatokFailureReason, KatokHit, KatokIndexResult, KatokOptions, KatokSearchMode, KatokSearchOptions, KatokSearchResult, KatokSyncResult, } from "./types.js";
|
|
12
|
+
export { DEFAULT_KATOK_OPTIONS } from "./types.js";
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { RetrievalMethod, RetrievalMethodDescriptor, RetrievalOptions, RetrievalResult } from "../../../retrieval/types.js";
|
|
2
|
+
import type { KatokSearchMode, KatokSearchOptions, KatokSearchResult } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Narrow client surface required by the KakaoTalk retrieval methods.
|
|
5
|
+
* The real {@link KatokClient} satisfies this structurally; tests may stub it.
|
|
6
|
+
*/
|
|
7
|
+
export interface KatokSearchClient {
|
|
8
|
+
search(mode: KatokSearchMode, query: string, options?: KatokSearchOptions): Promise<KatokSearchResult>;
|
|
9
|
+
}
|
|
10
|
+
export interface KatokMethodOptions {
|
|
11
|
+
readonly client: KatokSearchClient;
|
|
12
|
+
readonly instanceId: string;
|
|
13
|
+
readonly tags?: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Lexical (BM25) retrieval over a KakaoTalk datasource via the external
|
|
17
|
+
* `katok` CLI in keyword mode. All client failures collapse to an empty
|
|
18
|
+
* result set; retrieval never throws.
|
|
19
|
+
*/
|
|
20
|
+
export declare class KatokBm25Method implements RetrievalMethod {
|
|
21
|
+
private readonly client;
|
|
22
|
+
private readonly instanceId;
|
|
23
|
+
private readonly tags;
|
|
24
|
+
constructor(options: KatokMethodOptions);
|
|
25
|
+
describe(): RetrievalMethodDescriptor;
|
|
26
|
+
retrieve(query: string, options: RetrievalOptions): Promise<RetrievalResult[]>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Semantic (vector) retrieval over a KakaoTalk datasource via the external
|
|
30
|
+
* `katok` CLI in semantic mode. All client failures collapse to an empty
|
|
31
|
+
* result set; retrieval never throws.
|
|
32
|
+
*/
|
|
33
|
+
export declare class KatokSemanticMethod implements RetrievalMethod {
|
|
34
|
+
private readonly client;
|
|
35
|
+
private readonly instanceId;
|
|
36
|
+
private readonly tags;
|
|
37
|
+
constructor(options: KatokMethodOptions);
|
|
38
|
+
describe(): RetrievalMethodDescriptor;
|
|
39
|
+
retrieve(query: string, options: RetrievalOptions): Promise<RetrievalResult[]>;
|
|
40
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path helpers for the KakaoTalk (`katok`) datasource skill.
|
|
3
|
+
*
|
|
4
|
+
* All paths are workspace-relative and live under
|
|
5
|
+
* `<workspaceRoot>/.autorag/datasources/katok`. The client never exposes raw
|
|
6
|
+
* filesystem paths to callers; chunk identifiers are surfaced as opaque
|
|
7
|
+
* slash-hierarchical sources of the form
|
|
8
|
+
* `/kakao/<instance-id>/chunks/<chunk-id>`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const AUTORAG_DIRNAME = ".autorag";
|
|
11
|
+
export declare const DATASOURCES_DIRNAME = "datasources";
|
|
12
|
+
export declare const KATOK_DATASOURCE_DIRNAME = "katok";
|
|
13
|
+
/** Logical datasource kind for source identifiers. */
|
|
14
|
+
export declare const KATOK_SOURCE_KIND: "kakao";
|
|
15
|
+
/**
|
|
16
|
+
* Root directory for katok-managed state under a workspace. This is where the
|
|
17
|
+
* external `katok` CLI stores its index, chunks, and sync state.
|
|
18
|
+
*/
|
|
19
|
+
export declare function katokDatasourceRoot(workspaceRoot: string): string;
|
|
20
|
+
/** Directory holding the katok chunk index. */
|
|
21
|
+
export declare function katokIndexPath(workspaceRoot: string): string;
|
|
22
|
+
/** Directory holding materialized katok chunks. */
|
|
23
|
+
export declare function katokChunksPath(workspaceRoot: string): string;
|
|
24
|
+
/** Directory holding katok sync state. */
|
|
25
|
+
export declare function katokSyncPath(workspaceRoot: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Builds the path-opaque, slash-hierarchical source identifier for a single
|
|
28
|
+
* katok chunk. Callers (the KatokSkill methods) use this to populate
|
|
29
|
+
* `RetrievalResult.source` so no real filesystem path ever leaks.
|
|
30
|
+
*/
|
|
31
|
+
export declare function katokSourcePath(instanceId: string, chunkId: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Parses a katok source identifier back into its `{ instanceId, chunkId }`
|
|
34
|
+
* components. Returns `undefined` for malformed or non-kakao sources so that
|
|
35
|
+
* deny decisions remain explicit rather than undefined-as-deny.
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseKatokSourcePath(source: string): {
|
|
38
|
+
readonly instanceId: string;
|
|
39
|
+
readonly chunkId: string;
|
|
40
|
+
} | undefined;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RetrievalMethod } from "../../../retrieval/types.js";
|
|
2
|
+
import type { DatasourceIndexResult, DatasourceSkill, DatasourceSkillDescriptor, DatasourceSkillManifest, PollingMetadata, SourceDescription } from "../../types.js";
|
|
3
|
+
import { type KatokSearchClient } from "./methods.js";
|
|
4
|
+
import type { KatokDoctorResult, KatokIndexResult, KatokSyncResult } from "./types.js";
|
|
5
|
+
export interface KatokSkillClient extends KatokSearchClient {
|
|
6
|
+
doctor(): Promise<KatokDoctorResult>;
|
|
7
|
+
sync(): Promise<KatokSyncResult>;
|
|
8
|
+
index(): Promise<KatokIndexResult>;
|
|
9
|
+
}
|
|
10
|
+
export interface KatokSkillOptions {
|
|
11
|
+
readonly client: KatokSkillClient;
|
|
12
|
+
readonly instanceId?: string;
|
|
13
|
+
readonly instances?: readonly string[];
|
|
14
|
+
readonly pollingIntervalMs?: number;
|
|
15
|
+
readonly tags?: readonly string[];
|
|
16
|
+
readonly lastIndexedAt?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class KatokSkill implements DatasourceSkill {
|
|
19
|
+
private readonly client;
|
|
20
|
+
private readonly instanceId;
|
|
21
|
+
private readonly instances;
|
|
22
|
+
private readonly pollingIntervalMs;
|
|
23
|
+
private readonly tags;
|
|
24
|
+
private lastIndexedAt;
|
|
25
|
+
constructor(options: KatokSkillOptions);
|
|
26
|
+
describe(): DatasourceSkillDescriptor;
|
|
27
|
+
polling(): PollingMetadata;
|
|
28
|
+
index(): Promise<DatasourceIndexResult>;
|
|
29
|
+
retrievalMethods(): readonly RetrievalMethod[];
|
|
30
|
+
describeSources(): readonly SourceDescription[];
|
|
31
|
+
skillManifest(): DatasourceSkillManifest;
|
|
32
|
+
private fail;
|
|
33
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import type { RetrievalOptions } from "../../../retrieval/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Search modes accepted by the external `katok search` subcommand.
|
|
4
|
+
*
|
|
5
|
+
* - `semantic` — dense vector similarity over indexed chunks.
|
|
6
|
+
* - `keyword` — exact / tokenized keyword matching.
|
|
7
|
+
* - `hybrid` — fused semantic + keyword scores.
|
|
8
|
+
*/
|
|
9
|
+
export type KatokSearchMode = "semantic" | "keyword" | "hybrid";
|
|
10
|
+
/**
|
|
11
|
+
* Where the `katok` CLI reads KakaoTalk data from.
|
|
12
|
+
*
|
|
13
|
+
* - `macos` — live KakaoTalk install on macOS (the CLI owns DB access; this
|
|
14
|
+
* client never touches the DB directly).
|
|
15
|
+
* - `fixture` — a frozen fixture directory (used for tests / dry runs).
|
|
16
|
+
*/
|
|
17
|
+
export type KatokSourceKind = "macos" | "fixture";
|
|
18
|
+
/**
|
|
19
|
+
* Configuration for {@link KatokClient}. All fields optional; sensible defaults
|
|
20
|
+
* mirror the jikji client. The client spawns the `katok` binary as a child
|
|
21
|
+
* process — it never opens the KakaoTalk database directly.
|
|
22
|
+
*/
|
|
23
|
+
export interface KatokOptions {
|
|
24
|
+
/** Explicit path to the `katok` binary. Defaults to a bare `katok` PATH lookup. */
|
|
25
|
+
readonly binaryPath?: string;
|
|
26
|
+
/** Spawn timeout in milliseconds. Default 10_000. */
|
|
27
|
+
readonly timeoutMs?: number;
|
|
28
|
+
/** Max stdout/stderr bytes retained. Default 1_048_576 (1 MiB). */
|
|
29
|
+
readonly maxBufferBytes?: number;
|
|
30
|
+
/** Data source for the CLI. Default `macos`. */
|
|
31
|
+
readonly source?: KatokSourceKind;
|
|
32
|
+
/** Path to a fixture directory; required when `source === "fixture"`. */
|
|
33
|
+
readonly fixturePath?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Explicit katok workspace directory (the `.autorag/datasources/katok`
|
|
36
|
+
* root). When omitted, computed from {@link KatokOptions.root} (or
|
|
37
|
+
* `process.cwd()`) via the paths helper.
|
|
38
|
+
*/
|
|
39
|
+
readonly workspacePath?: string;
|
|
40
|
+
/** Workspace root used to compute the default katok workspace path. */
|
|
41
|
+
readonly root?: string;
|
|
42
|
+
/** Environment overrides merged on top of `process.env` for the child. */
|
|
43
|
+
readonly env?: Readonly<Record<string, string | undefined>>;
|
|
44
|
+
}
|
|
45
|
+
export declare const DEFAULT_KATOK_BINARY = "katok";
|
|
46
|
+
export declare const DEFAULT_KATOK_TIMEOUT_MS = 10000;
|
|
47
|
+
export declare const DEFAULT_KATOK_MAX_BUFFER_BYTES = 1048576;
|
|
48
|
+
export declare const DEFAULT_KATOK_SOURCE: KatokSourceKind;
|
|
49
|
+
export declare const DEFAULT_KATOK_OPTIONS: {
|
|
50
|
+
readonly binaryPath: "katok";
|
|
51
|
+
readonly timeoutMs: 10000;
|
|
52
|
+
readonly maxBufferBytes: 1048576;
|
|
53
|
+
readonly source: "macos";
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Reasons a katok CLI invocation can fail. The client never throws for these —
|
|
57
|
+
* every method returns a discriminated union with `ok: false` and one of these
|
|
58
|
+
* reasons.
|
|
59
|
+
*/
|
|
60
|
+
export type KatokFailureReason = "binary-missing" | "remote-embedding-rejected" | "nonzero-exit" | "spawn-error" | "timeout" | "aborted" | "stdout-too-large" | "stderr-too-large" | "invalid-json" | "invalid-shape";
|
|
61
|
+
/** Common failure payload shared by every method result union. */
|
|
62
|
+
export interface KatokFailure {
|
|
63
|
+
readonly ok: false;
|
|
64
|
+
readonly reason: KatokFailureReason;
|
|
65
|
+
/** Raw stdout captured (may be partial / empty). Never a binary path. */
|
|
66
|
+
readonly stdout: string;
|
|
67
|
+
/** Raw stderr captured (may be partial / empty). Never a binary path. */
|
|
68
|
+
readonly stderr: string;
|
|
69
|
+
/** Exit code, or `null` when the process never exited normally. */
|
|
70
|
+
readonly code: number | null;
|
|
71
|
+
/**
|
|
72
|
+
* The offending environment key when `reason === "remote-embedding-rejected"`.
|
|
73
|
+
* A config key name (never a path, never the key's value).
|
|
74
|
+
*/
|
|
75
|
+
readonly violatingKey?: string;
|
|
76
|
+
readonly hits?: readonly unknown[];
|
|
77
|
+
}
|
|
78
|
+
/** A single indexed chat chunk returned by the katok CLI. */
|
|
79
|
+
export interface KatokChunk {
|
|
80
|
+
readonly chunkId: string;
|
|
81
|
+
readonly content: string;
|
|
82
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
83
|
+
}
|
|
84
|
+
/** A scored search hit. */
|
|
85
|
+
export interface KatokSearchHit {
|
|
86
|
+
readonly chunkId: string;
|
|
87
|
+
readonly score: number;
|
|
88
|
+
readonly content: string;
|
|
89
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
90
|
+
readonly source?: string;
|
|
91
|
+
}
|
|
92
|
+
export type KatokHit = KatokSearchHit;
|
|
93
|
+
/** Result of `katok doctor`. */
|
|
94
|
+
export interface KatokDoctorInfo {
|
|
95
|
+
readonly version?: string;
|
|
96
|
+
readonly ready: boolean;
|
|
97
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
98
|
+
}
|
|
99
|
+
/** Result of `katok sync`. */
|
|
100
|
+
export interface KatokSyncInfo {
|
|
101
|
+
readonly synced: boolean;
|
|
102
|
+
readonly messageCount?: number;
|
|
103
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
104
|
+
}
|
|
105
|
+
/** Result of `katok index`. */
|
|
106
|
+
export interface KatokIndexInfo {
|
|
107
|
+
readonly chunkCount: number;
|
|
108
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
109
|
+
}
|
|
110
|
+
/** Context payload: the chunks surrounding a target chunk. */
|
|
111
|
+
export interface KatokContext {
|
|
112
|
+
readonly chunks: readonly KatokChunk[];
|
|
113
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
114
|
+
}
|
|
115
|
+
/** Discriminated ok-success shape carrying typed `data`. */
|
|
116
|
+
export interface KatokOk<T> {
|
|
117
|
+
readonly ok: true;
|
|
118
|
+
readonly data: T;
|
|
119
|
+
readonly stdout: string;
|
|
120
|
+
readonly stderr: string;
|
|
121
|
+
readonly code: number;
|
|
122
|
+
}
|
|
123
|
+
export interface KatokSearchOk {
|
|
124
|
+
readonly ok: true;
|
|
125
|
+
readonly hits: readonly KatokSearchHit[];
|
|
126
|
+
readonly stdout: string;
|
|
127
|
+
readonly stderr: string;
|
|
128
|
+
readonly code: number;
|
|
129
|
+
readonly data: {
|
|
130
|
+
readonly hits: readonly KatokSearchHit[];
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export type KatokDoctorResult = KatokOk<KatokDoctorInfo> | KatokFailure;
|
|
134
|
+
export type KatokSyncResult = KatokOk<KatokSyncInfo> | KatokFailure;
|
|
135
|
+
export type KatokIndexResult = KatokOk<KatokIndexInfo> | KatokFailure;
|
|
136
|
+
export type KatokSearchResult = KatokSearchOk | KatokFailure;
|
|
137
|
+
export type KatokChunkResult = KatokOk<KatokChunk> | KatokFailure;
|
|
138
|
+
export type KatokContextResult = KatokOk<KatokContext> | KatokFailure;
|
|
139
|
+
export type KatokParentResult = KatokOk<KatokChunk> | KatokFailure;
|
|
140
|
+
/**
|
|
141
|
+
* Search-specific options. Reuses the shared {@link RetrievalOptions} so the
|
|
142
|
+
* KatokSkill retrieval method can pass its options straight through. The
|
|
143
|
+
* client maps `topK` and `scope` to CLI flags; other fields are accepted but
|
|
144
|
+
* not currently forwarded.
|
|
145
|
+
*/
|
|
146
|
+
export type KatokSearchOptions = RetrievalOptions;
|