@evegoodevening/dsh-llmwiki 0.0.0-stage → 0.0.2

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 (41) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +21 -0
  3. package/README.md +179 -2
  4. package/README.zh.md +180 -0
  5. package/THIRD_PARTY_NOTICES.md +40 -0
  6. package/cordis.patch.yml +1 -0
  7. package/lib/index.js +3281 -0
  8. package/lib/index.js.map +1 -0
  9. package/lib/types/atomic.d.ts +19 -0
  10. package/lib/types/atomic.d.ts.map +1 -0
  11. package/lib/types/command.d.ts +4 -0
  12. package/lib/types/command.d.ts.map +1 -0
  13. package/lib/types/config.d.ts +22 -0
  14. package/lib/types/config.d.ts.map +1 -0
  15. package/lib/types/errors.d.ts +16 -0
  16. package/lib/types/errors.d.ts.map +1 -0
  17. package/lib/types/ids.d.ts +8 -0
  18. package/lib/types/ids.d.ts.map +1 -0
  19. package/lib/types/index.d.ts +14 -0
  20. package/lib/types/index.d.ts.map +1 -0
  21. package/lib/types/indexer.d.ts +69 -0
  22. package/lib/types/indexer.d.ts.map +1 -0
  23. package/lib/types/lint.d.ts +8 -0
  24. package/lib/types/lint.d.ts.map +1 -0
  25. package/lib/types/markdown.d.ts +17 -0
  26. package/lib/types/markdown.d.ts.map +1 -0
  27. package/lib/types/paths.d.ts +92 -0
  28. package/lib/types/paths.d.ts.map +1 -0
  29. package/lib/types/presentation.d.ts +5 -0
  30. package/lib/types/presentation.d.ts.map +1 -0
  31. package/lib/types/prompt.d.ts +6 -0
  32. package/lib/types/prompt.d.ts.map +1 -0
  33. package/lib/types/service.d.ts +39 -0
  34. package/lib/types/service.d.ts.map +1 -0
  35. package/lib/types/tokenizer.d.ts +9 -0
  36. package/lib/types/tokenizer.d.ts.map +1 -0
  37. package/lib/types/tools.d.ts +3 -0
  38. package/lib/types/tools.d.ts.map +1 -0
  39. package/lib/types/types.d.ts +123 -0
  40. package/lib/types/types.d.ts.map +1 -0
  41. package/package.json +96 -4
@@ -0,0 +1,19 @@
1
+ import { type FileHandle } from 'node:fs/promises';
2
+ import { type WikiDirectory } from './paths.ts';
3
+ export interface AtomicWriteOperations {
4
+ readonly open: (path: string, flags: string | number, mode?: number) => Promise<FileHandle>;
5
+ readonly rename: (oldPath: string, newPath: string) => Promise<void>;
6
+ readonly unlink: (path: string) => Promise<void>;
7
+ readonly randomBytes: (size: number) => Buffer;
8
+ }
9
+ export interface AtomicWriteOptions {
10
+ readonly signal?: AbortSignal | undefined;
11
+ readonly mode?: number;
12
+ readonly operations?: Partial<AtomicWriteOperations>;
13
+ }
14
+ export declare function syncFile(handle: FileHandle): Promise<void>;
15
+ /** Recognize only names produced by this writer for the specified target. */
16
+ export declare function isAtomicTemporaryName(candidate: string, name: string): boolean;
17
+ /** Publish exact bytes within one pinned parent. No failure is reported after rename commits. */
18
+ export declare function atomicWriteFile(directory: WikiDirectory, name: string, bytes: Uint8Array, options?: AtomicWriteOptions): Promise<void>;
19
+ //# sourceMappingURL=atomic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic.d.ts","sourceRoot":"","sources":["../../src/atomic.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGxE,OAAO,EAA6C,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAK1F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAC3F,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpE,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CAC/C;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAA;CACrD;AACD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAMD,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG9E;AACD,iGAAiG;AACjG,wBAAsB,eAAe,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDhJ"}
@@ -0,0 +1,4 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { ResolvedConfig } from './config.ts';
3
+ export declare function registerLlmWikiCommand(ctx: Context, config: ResolvedConfig): void;
4
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAwDjD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAwBjF"}
@@ -0,0 +1,22 @@
1
+ import z from '@deepseek-ai/schemastery';
2
+ export interface Config {
3
+ readonly root?: string;
4
+ readonly maxSourceBytes?: number;
5
+ readonly maxPageBytes?: number;
6
+ readonly maxResults?: number;
7
+ readonly maxSnippetBytes?: number;
8
+ readonly commandDiagnosticLimit?: number;
9
+ }
10
+ export interface ResolvedConfig {
11
+ readonly root: string;
12
+ readonly maxSourceBytes: number;
13
+ readonly maxPageBytes: number;
14
+ readonly maxResults: number;
15
+ readonly maxSnippetBytes: number;
16
+ readonly commandDiagnosticLimit: number;
17
+ }
18
+ type ConfigSchema = z<Config, ResolvedConfig>;
19
+ export declare const Config: ConfigSchema;
20
+ export declare function resolveConfig(config?: Config): ResolvedConfig;
21
+ export {};
22
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAA;CACxC;AA0BD,KAAK,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAc7C,eAAO,MAAM,MAAM,EAAE,YAGnB,CAAA;AAEF,wBAAgB,aAAa,CAAC,MAAM,GAAE,MAAW,GAAG,cAAc,CAEjE"}
@@ -0,0 +1,16 @@
1
+ export declare const LLMWIKI_ERROR_CODES: readonly ["NOT_INITIALIZED", "INVALID_PATH", "SOURCE_NOT_FOUND", "PAGE_NOT_FOUND", "INVALID_PAGE", "INVALID_PRECONDITION", "PAGE_CONFLICT", "LIMIT_EXCEEDED", "ABORTED", "UNSAFE_FILESYSTEM", "INDEX_CORRUPT", "INVALID_CURSOR", "CATALOG_CORRUPT"];
2
+ export type LlmWikiErrorCode = (typeof LLMWIKI_ERROR_CODES)[number];
3
+ export interface SerializedLlmWikiError {
4
+ readonly code: LlmWikiErrorCode;
5
+ readonly message: string;
6
+ }
7
+ export declare class LlmWikiError extends Error {
8
+ readonly code: LlmWikiErrorCode;
9
+ constructor(code: LlmWikiErrorCode, message: string, options?: ErrorOptions);
10
+ toJSON(): SerializedLlmWikiError;
11
+ }
12
+ export declare function isLlmWikiError(value: unknown): value is LlmWikiError;
13
+ export declare function throwIfAborted(signal?: AbortSignal): void;
14
+ export declare function invalidPath(message: string, options?: ErrorOptions): LlmWikiError;
15
+ export declare function unsafeFilesystem(message: string, options?: ErrorOptions): LlmWikiError;
16
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,qPActB,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;gBAEnB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;IAM3E,MAAM,IAAI,sBAAsB;CAGjC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAIzD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,YAAY,CAEjF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,YAAY,CAEtF"}
@@ -0,0 +1,8 @@
1
+ import type { Branded } from '@deepseek-ai/dsh-brand';
2
+ export type SourceId = Branded<'SourceId'>;
3
+ export type PageId = Branded<'PageId'>;
4
+ export declare function sourceId(value: string): SourceId;
5
+ export declare function pageId(value: string): PageId;
6
+ export declare function isSourceId(value: string): value is SourceId;
7
+ export declare function isPageId(value: string): value is PageId;
8
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAGrD,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAC1C,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AAMtC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAKhD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA0B5C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAOvD"}
@@ -0,0 +1,14 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { Config as LlmWikiConfig } from './config.ts';
3
+ export { Config } from './config.ts';
4
+ export type { Config as LlmWikiConfig, ResolvedConfig } from './config.ts';
5
+ export { LLMWIKI_ERROR_CODES, LlmWikiError, isLlmWikiError, } from './errors.ts';
6
+ export type { LlmWikiErrorCode, SerializedLlmWikiError, } from './errors.ts';
7
+ export { isPageId, isSourceId, pageId, sourceId, } from './ids.ts';
8
+ export type { PageId, SourceId } from './ids.ts';
9
+ export { LlmWikiService } from './service.ts';
10
+ export type * from './types.ts';
11
+ export declare const name = "llmwiki";
12
+ export declare const inject: string[];
13
+ export declare function apply(ctx: Context, config?: LlmWikiConfig): void;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,aAAa,CAAA;AAK1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,MAAM,IAAI,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,QAAQ,EACR,UAAU,EACV,MAAM,EACN,QAAQ,GACT,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,mBAAmB,YAAY,CAAA;AAE/B,eAAO,MAAM,IAAI,YAAY,CAAA;AAC7B,eAAO,MAAM,MAAM,UAAwC,CAAA;AAE3D,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI,CAMpE"}
@@ -0,0 +1,69 @@
1
+ import type { WikiDirectory, WikiPaths } from './paths.ts';
2
+ import type { SearchHit } from './types.ts';
3
+ export declare const INDEX_FORMAT_VERSION: 1;
4
+ interface Fingerprint {
5
+ readonly pageId: string;
6
+ readonly sha256: string;
7
+ }
8
+ interface TermCount {
9
+ readonly term: string;
10
+ readonly count: number;
11
+ }
12
+ export interface IndexStateV1 {
13
+ readonly formatVersion: 1;
14
+ readonly pages: readonly Fingerprint[];
15
+ readonly searchSha256: string;
16
+ }
17
+ export interface SearchSectionV1 {
18
+ readonly pageId: string;
19
+ readonly title: string;
20
+ readonly headingTrail: readonly string[];
21
+ readonly startLine: number;
22
+ readonly sourceIds: readonly string[];
23
+ readonly normalizedText: string;
24
+ readonly length: number;
25
+ readonly titleTermFrequencies: readonly TermCount[];
26
+ readonly headingTermFrequencies: readonly TermCount[];
27
+ readonly bodyTermFrequencies: readonly TermCount[];
28
+ }
29
+ export interface SearchIndexV1 {
30
+ readonly formatVersion: 1;
31
+ readonly pageFingerprints: readonly Fingerprint[];
32
+ readonly documentCount: number;
33
+ readonly averageSectionLength: number;
34
+ readonly documentFrequencies: readonly TermCount[];
35
+ readonly sections: readonly SearchSectionV1[];
36
+ }
37
+ export interface SearchOptions {
38
+ readonly limit: number;
39
+ readonly maxResults: number;
40
+ readonly maxSnippetBytes: number;
41
+ readonly signal?: AbortSignal;
42
+ }
43
+ export interface BuiltIndex {
44
+ readonly state: IndexStateV1;
45
+ readonly search: SearchIndexV1;
46
+ readonly stateBytes: Uint8Array;
47
+ readonly searchBytes: Uint8Array;
48
+ }
49
+ export interface IndexPage {
50
+ readonly pageId: string;
51
+ readonly bytes: Uint8Array;
52
+ readonly title: string;
53
+ readonly sourceIds: readonly string[];
54
+ readonly body: string;
55
+ readonly bodyStartLine: number;
56
+ }
57
+ export declare function parseSearchIndex(bytes: Uint8Array): SearchIndexV1;
58
+ export declare function parseIndexState(bytes: Uint8Array): IndexStateV1;
59
+ export declare function fingerprintPages(paths: WikiPaths, signal?: AbortSignal, root?: WikiDirectory): Promise<readonly Fingerprint[]>;
60
+ export declare function buildSearchIndexFromPages(pages: readonly IndexPage[]): BuiltIndex;
61
+ export declare function buildSearchIndex(paths: WikiPaths, signal?: AbortSignal, onPageExamined?: (path: string) => void, root?: WikiDirectory): Promise<BuiltIndex>;
62
+ export declare function trustedSearchIndex(searchBytes: Uint8Array, stateBytes: Uint8Array, expected: BuiltIndex): SearchIndexV1 | null;
63
+ export declare function validateBuiltIndexSnapshot(paths: WikiPaths, built: BuiltIndex, signal?: AbortSignal, root?: WikiDirectory): Promise<void>;
64
+ export declare function writeIndex(paths: WikiPaths, built: BuiltIndex, signal?: AbortSignal, root?: WikiDirectory): Promise<void>;
65
+ export declare function ensureSearchIndex(paths: WikiPaths, signal?: AbortSignal, root?: WikiDirectory): Promise<SearchIndexV1>;
66
+ export declare function searchBuiltIndex(index: SearchIndexV1, query: string, options: SearchOptions): readonly SearchHit[];
67
+ export declare function searchWiki(paths: WikiPaths, query: string, options: SearchOptions, root?: WikiDirectory): Promise<readonly SearchHit[]>;
68
+ export {};
69
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/indexer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAiB,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAA;AAQ9C,UAAU,WAAW;IAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC1E,UAAU,SAAS;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAErE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAA;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,oBAAoB,EAAE,SAAS,SAAS,EAAE,CAAA;IACnD,QAAQ,CAAC,sBAAsB,EAAE,SAAS,SAAS,EAAE,CAAA;IACrD,QAAQ,CAAC,mBAAmB,EAAE,SAAS,SAAS,EAAE,CAAA;CACnD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAA;IACzB,QAAQ,CAAC,gBAAgB,EAAE,SAAS,WAAW,EAAE,CAAA;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,SAAS,EAAE,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAA;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAsED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAoCjE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAQ/D;AAgGD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAepI;AAUD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,CAoCjF;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBjK;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAM9H;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/I;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAY/H;AAkBD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAU5H;AA0DD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,SAAS,EAAE,CAwBlH;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAG7I"}
@@ -0,0 +1,8 @@
1
+ import type { WikiDirectory, WikiPaths } from './paths.ts';
2
+ import type { LintReport } from './types.ts';
3
+ export declare const LINT_DIAGNOSTIC_CODES: readonly ["ROOT_MISSING", "ROOT_NOT_DIRECTORY", "UNSAFE_SYMLINK", "REQUIRED_DIRECTORY_MISSING", "REQUIRED_PATH_NOT_DIRECTORY", "SCHEMA_MISSING", "INVALID_UTF8", "SOURCE_INVALID_ID", "SOURCE_CONTENT_MISSING", "SOURCE_CONTENT_NOT_FILE", "SOURCE_HASH_MISMATCH", "SOURCE_METADATA_MISSING", "SOURCE_METADATA_NOT_FILE", "SOURCE_METADATA_MALFORMED", "SOURCE_METADATA_INVALID", "SOURCE_METADATA_UNKNOWN_KEY", "SOURCE_METADATA_ID_MISMATCH", "SOURCE_METADATA_BYTE_COUNT_MISMATCH", "SOURCE_UNREFERENCED", "PAGE_INVALID_PATH", "PAGE_INVALID_MARKDOWN", "PAGE_MISSING_SOURCE", "DUPLICATE_TITLE", "ORPHAN_PAGE", "LINK_ESCAPES_PAGES", "BROKEN_PAGE_LINK", "INDEX_MISSING", "INDEX_MALFORMED", "INDEX_INCOMPATIBLE", "INDEX_STALE", "TEMP_FILE_ABANDONED"];
4
+ export type LintDiagnosticCode = (typeof LINT_DIAGNOSTIC_CODES)[number];
5
+ export declare function lintRootFailure(paths: WikiPaths, cause: unknown): LintReport;
6
+ export declare function lintWiki(paths: WikiPaths, signal?: AbortSignal, root?: WikiDirectory | null): Promise<LintReport>;
7
+ export declare function serializeLintReport(report: LintReport): string;
8
+ //# sourceMappingURL=lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/lint.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAkB,UAAU,EAAgC,MAAM,YAAY,CAAA;AAE1F,eAAO,MAAM,qBAAqB,guBAgCxB,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAA;AAuYvE,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,CAQ5E;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CA4CvH;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,17 @@
1
+ import type { PageMetadata } from './types.ts';
2
+ export interface ParsedPageMarkdown {
3
+ readonly metadata: PageMetadata;
4
+ readonly body: string;
5
+ readonly bodyStartLine: number;
6
+ }
7
+ export interface MarkdownSection {
8
+ readonly headingTrail: readonly string[];
9
+ readonly startLine: number;
10
+ readonly text: string;
11
+ }
12
+ export declare function encodeUtf8(text: string): Uint8Array;
13
+ export declare function decodeUtf8(bytes: Uint8Array): string;
14
+ export declare function parsePageMarkdown(markdown: string): ParsedPageMarkdown;
15
+ export declare function renderPageMarkdown(metadata: PageMetadata, body: string): string;
16
+ export declare function splitMarkdownSections(body: string, firstLine?: number): readonly MarkdownSection[];
17
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/markdown.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAU9C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMpD;AA6GD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAatE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB/E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,SAAS,eAAe,EAAE,CAmD7F"}
@@ -0,0 +1,92 @@
1
+ import { type BigIntStats } from 'node:fs';
2
+ import { type FileHandle } from 'node:fs/promises';
3
+ import { LlmWikiError } from './errors.ts';
4
+ import type { PageId, SourceId } from './ids.ts';
5
+ import { type AtomicWriteOptions } from './atomic.ts';
6
+ /** Keep shared descriptors alive until every started sibling settles, preserving the first failure. */
7
+ export declare function allSettledOnFailure<const T extends readonly unknown[]>(values: T): Promise<{
8
+ -readonly [P in keyof T]: Awaited<T[P]>;
9
+ }>;
10
+ export interface DirectoryIdentity {
11
+ readonly dev: bigint;
12
+ readonly ino: bigint;
13
+ }
14
+ export interface WikiAuthority {
15
+ readonly root: string;
16
+ identity?: DirectoryIdentity;
17
+ }
18
+ export interface EntrySnapshot {
19
+ readonly name: string;
20
+ readonly segments: readonly string[];
21
+ readonly stat: BigIntStats;
22
+ }
23
+ export type FileSnapshot = EntrySnapshot;
24
+ /** Diagnostic metadata only; never authorizes a retry or pathname access. */
25
+ export declare class WikiTraversalError extends LlmWikiError {
26
+ readonly segments: readonly string[];
27
+ readonly entryKind: 'symlink' | 'not-directory' | 'unknown';
28
+ constructor(segments: readonly string[], entryKind: 'symlink' | 'not-directory' | 'unknown', cause: unknown);
29
+ }
30
+ export interface WikiPaths {
31
+ readonly authority: WikiAuthority;
32
+ readonly root: string;
33
+ readonly schema: string;
34
+ readonly sources: string;
35
+ readonly pages: string;
36
+ readonly index: string;
37
+ sourceDirectory(id: SourceId): string;
38
+ sourceContent(id: SourceId): string;
39
+ sourceMetadata(id: SourceId): string;
40
+ page(id: PageId): string;
41
+ indexFile(name: 'search.json' | 'state.json'): string;
42
+ }
43
+ export declare function validateComponent(name: string): void;
44
+ export declare function sameFileSnapshot(a: BigIntStats, b: BigIntStats): boolean;
45
+ export declare class WikiDirectory {
46
+ private readonly handle;
47
+ readonly segments: readonly string[];
48
+ private readonly operationRoot?;
49
+ private readonly publication;
50
+ constructor(handle: FileHandle, segments: readonly string[], operationRoot?: WikiDirectory | undefined, publication?: {
51
+ committed: boolean;
52
+ });
53
+ /** Internal commit boundary used by the atomic adapter, including ancestor cleanup. */
54
+ markCommitted(): void;
55
+ /** Internal filesystem adapter seam. Only atomic.ts may use descriptor aliases. */
56
+ withHandle<T>(callback: (handle: FileHandle, alias: string) => Promise<T>): Promise<T>;
57
+ private child;
58
+ identity(): Promise<DirectoryIdentity>;
59
+ inspect(name: string, signal?: AbortSignal): Promise<BigIntStats | null>;
60
+ directory<T>(segments: readonly string[], options: {
61
+ create?: boolean;
62
+ signal?: AbortSignal | undefined;
63
+ }, callback: (directory: WikiDirectory) => Promise<T>): Promise<T | null>;
64
+ read(name: string, signal?: AbortSignal): Promise<{
65
+ bytes: Buffer;
66
+ snapshot: FileSnapshot;
67
+ } | null>;
68
+ list(signal?: AbortSignal): Promise<readonly EntrySnapshot[]>;
69
+ validate(snapshot: EntrySnapshot, signal?: AbortSignal): Promise<boolean>;
70
+ createDirectory(name: string, signal?: AbortSignal): Promise<{
71
+ created: boolean;
72
+ identity: DirectoryIdentity;
73
+ }>;
74
+ createFileExclusive(name: string, bytes: Uint8Array, options?: {
75
+ mode?: number;
76
+ signal?: AbortSignal | undefined;
77
+ }): Promise<void>;
78
+ atomicWrite(name: string, bytes: Uint8Array, options?: AtomicWriteOptions): Promise<void>;
79
+ unlink(name: string, expectedIdentity?: DirectoryIdentity): Promise<void>;
80
+ removeCreatedSource(name: string, expectedIdentity: DirectoryIdentity, ownedNames: readonly string[]): Promise<void>;
81
+ }
82
+ export declare function withWikiRoot<T>(authority: WikiAuthority, options: {
83
+ create?: boolean;
84
+ signal?: AbortSignal | undefined;
85
+ }, callback: (root: WikiDirectory) => Promise<T>): Promise<T | null>;
86
+ export declare function wikiRelativeSegments(paths: WikiPaths, target: string): readonly string[];
87
+ export declare function assertContainedWikiPath(root: string, target: string): void;
88
+ export declare function createWikiPaths(root: string, authority?: WikiAuthority): WikiPaths;
89
+ export declare function acquireWikiPaths(configuredRoot: string, signal?: AbortSignal, cwd?: string): Promise<WikiPaths>;
90
+ export declare function initializeWikiPaths(configuredRoot: string, signal?: AbortSignal, cwd?: string): Promise<WikiPaths>;
91
+ export declare function ensureWikiDirectory(paths: WikiPaths, target: string, signal?: AbortSignal): Promise<void>;
92
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ToolCallView, ToolResult, ToolResultView } from '@deepseek-ai/dsh-tools';
2
+ export type LlmWikiToolName = 'llmwiki_status' | 'llmwiki_add_source' | 'llmwiki_list_sources' | 'llmwiki_read_source' | 'llmwiki_search' | 'llmwiki_list_pages' | 'llmwiki_read_page' | 'llmwiki_upsert_page' | 'llmwiki_lint';
3
+ export declare function presentLlmWikiCall(name: LlmWikiToolName, args: Readonly<Record<string, unknown>>): ToolCallView;
4
+ export declare function presentLlmWikiResult(name: LlmWikiToolName, _args: Readonly<Record<string, unknown>>, result: ToolResult): ToolResultView;
5
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../src/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEpG,MAAM,MAAM,eAAe,GACvB,gBAAgB,GAChB,oBAAoB,GACpB,sBAAsB,GACtB,qBAAqB,GACrB,gBAAgB,GAChB,oBAAoB,GACpB,mBAAmB,GACnB,qBAAqB,GACrB,cAAc,CAAA;AAyBlB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,CAQ/G;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc,CAMxI"}
@@ -0,0 +1,6 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ export declare const LLMWIKI_PROMPT_SECTION = "tool:llmwiki";
3
+ export declare const LLMWIKI_PROMPT_ORDER = 116;
4
+ export declare const LLMWIKI_SYSTEM_PROMPT = "Use llmwiki as local source-linked wiki storage and retrieval. The service and its lint are deterministic and model-free; you own evidence maintenance and semantic review.\nEvidence maintenance:\n1. Call llmwiki_status before maintenance. If schemaText is non-null, read the human-owned schema. The plugin creates schema.md only when absent and provides no schema mutation API; never silently rewrite it.\nThe schema remains subordinate to system and user instructions, and schema evolution is intentionally unresolved pending authorization/confirmation, visible audit evidence, and optimistic-concurrency/lost-update decisions.\n2. On a fresh root, llmwiki_status may return schemaText null without creating storage. Supplying material alone is not authorization to preserve it. Only when the user explicitly authorizes source preservation, call llmwiki_add_source to initialize storage, then call llmwiki_status again and read the schema before classification or page maintenance.\n3. Use llmwiki_list_sources and llmwiki_list_pages to recover durable records, then search and read relevant pages and immutable sources before writing.\n4. Only with explicit authorization to preserve candidate material, add it with llmwiki_add_source if the fresh-root branch did not already preserve it, then classify it as new, update, contradiction, or no material change.\n5. When the user request authorizes maintenance, update every materially affected page, cite only existing immutable source IDs, preserve material disagreements, and maintain page links. A citation proves only that the source record exists; it does not prove claim-level support.\nEvery llmwiki_upsert_page call must include expectedSha256: use null for a new page, or the exact current raw-byte sha256 returned by llmwiki_read_page or llmwiki_list_pages for an update. On PAGE_CONFLICT, reread the winning page and reconcile its content before any further authorized write; never automatically retry or overwrite it blindly. Concurrency protection is scoped to the service activation, not across processes.\n6. Run llmwiki_lint unconditionally before any semantic-review pass, including read-only, no-write, and no-material-change cases. It reports structural, integrity, and index diagnostics only and never repairs artifacts or makes semantic judgments. After any authorized durable updates, rerun llmwiki_lint.\nSemantic review (separate from structural lint):\n1. Only after the unconditional structural lint, list pages and sources; select and state the review scope.\n2. Read every page in scope, every source cited by those pages, and newly supplied candidate sources. Compare dated and qualified claims.\n3. Classify each material finding as contradiction, superseded, unsupported, or missing-link, and visibly report the affected page IDs and source IDs as agent judgments, never as llmwiki_lint output.\n4. Only when the user request authorizes maintenance, update affected pages while preserving both sides of a disagreement or recording a clearly dated supersession, then maintain links and rerun structural lint.";
5
+ export declare function registerLlmWikiPrompt(ctx: Context): void;
6
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,eAAO,MAAM,sBAAsB,iBAAiB,CAAA;AACpD,eAAO,MAAM,oBAAoB,MAAM,CAAA;AAIvC,eAAO,MAAM,qBAAqB,shGAckL,CAAA;AAEpN,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAMxD"}
@@ -0,0 +1,39 @@
1
+ import { Service } from '@deepseek-ai/cordis';
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import { Config as ConfigSchema } from './config.ts';
4
+ import type { Config, ResolvedConfig } from './config.ts';
5
+ import type { PageId, SourceId } from './ids.ts';
6
+ import type { AddSourceInput, ByteRange, CatalogRequest, LintReport, PageCatalogPage, PageRead, PageReceipt, ReindexReceipt, SearchHit, SourceCatalogPage, SourceRead, SourceReceipt, UpsertPageInput, WikiStatus } from './types.ts';
7
+ declare const configKey: unique symbol;
8
+ export declare class LlmWikiService extends Service {
9
+ static Config: Schemastery<ConfigSchema, ResolvedConfig>;
10
+ private readonly [configKey];
11
+ private pathsValue;
12
+ private queue;
13
+ private readonly queued;
14
+ private disposed;
15
+ constructor(ctx: Context, config?: Config);
16
+ private enqueue;
17
+ private initialize;
18
+ status(signal?: AbortSignal): Promise<WikiStatus>;
19
+ addSource(input: AddSourceInput, signal?: AbortSignal): Promise<SourceReceipt>;
20
+ readSource(id: SourceId, range?: ByteRange, signal?: AbortSignal): Promise<SourceRead>;
21
+ listSources(request?: CatalogRequest, signal?: AbortSignal): Promise<SourceCatalogPage>;
22
+ listPages(request?: CatalogRequest, signal?: AbortSignal): Promise<PageCatalogPage>;
23
+ private readSourceRecord;
24
+ readPage(id: PageId, signal?: AbortSignal): Promise<PageRead>;
25
+ upsertPage(input: UpsertPageInput, signal?: AbortSignal): Promise<PageReceipt>;
26
+ lint(signal?: AbortSignal): Promise<LintReport>;
27
+ search(query: string, limitValue?: number, signal?: AbortSignal): Promise<SearchHit[]>;
28
+ reindex(signal?: AbortSignal): Promise<ReindexReceipt>;
29
+ private indexTargetPresence;
30
+ private ensureIndex;
31
+ private indexStatus;
32
+ }
33
+ declare module '@deepseek-ai/cordis' {
34
+ interface Context {
35
+ llmwiki: LlmWikiService;
36
+ }
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,MAAM,IAAI,YAAY,EAAiB,MAAM,aAAa,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIzD,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAiBhD,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,cAAc,EAEd,UAAU,EAEV,eAAe,EACf,QAAQ,EACR,WAAW,EACX,cAAc,EACd,SAAS,EAET,iBAAiB,EAEjB,UAAU,EACV,aAAa,EACb,eAAe,EACf,UAAU,EACX,MAAM,YAAY,CAAA;AAyUnB,QAAA,MAAM,SAAS,EAAE,OAAO,MAAiC,CAAA;AAEzD,qBAAa,cAAe,SAAQ,OAAO;IACzC,MAAM,CAAC,MAAM,4CAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAgB;IAC5C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAClE,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW;IAa7C,OAAO,CAAC,OAAO;YAwDD,UAAU;IAkBlB,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA4BjD,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IA2F9E,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IActF,WAAW,CAAC,OAAO,GAAE,cAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoE3F,SAAS,CAAC,OAAO,GAAE,cAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;YAyD/E,gBAAgB;IAkCxB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmB7D,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAgC9E,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAI/C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,SAA6B,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAoB1G,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;YAc9C,mBAAmB;YAQnB,WAAW;YAqBX,WAAW;CAsC1B;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,OAAO,EAAE,cAAc,CAAA;KACxB;CACF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tokenizes normalized text deterministically. CJK-only runs are retained as a
3
+ * token and, when longer than one code point, additionally produce overlapping
4
+ * two-code-point grams. Mixed/non-CJK letter-number runs are emitted whole.
5
+ */
6
+ export declare function tokenize(value: string): readonly string[];
7
+ /** Visits existing tokens in normalized text; offsets are UTF-16 slice boundaries. */
8
+ export declare function visitNormalizedTokenSpans(text: string, visit: (term: string, start: number, end: number) => void): void;
9
+ //# sourceMappingURL=tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/tokenizer.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAIzD;AAED,sFAAsF;AACtF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAevH"}
@@ -0,0 +1,3 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ export declare function registerLlmWikiTools(ctx: Context): void;
3
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AA+ClD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAiNvD"}
@@ -0,0 +1,123 @@
1
+ import type { PageId, SourceId } from './ids.ts';
2
+ export interface IndexStatus {
3
+ readonly present: boolean;
4
+ readonly fresh: boolean;
5
+ readonly formatVersion: number | null;
6
+ readonly sectionCount: number;
7
+ }
8
+ export interface ReindexReceipt {
9
+ readonly pageCount: number;
10
+ readonly sectionCount: number;
11
+ readonly formatVersion: number;
12
+ }
13
+ export interface WikiStatus {
14
+ readonly initialized: boolean;
15
+ readonly sourceCount: number;
16
+ readonly pageCount: number;
17
+ readonly schemaText: string | null;
18
+ readonly index: IndexStatus;
19
+ }
20
+ export interface AddSourceInput {
21
+ readonly name: string;
22
+ readonly content: string;
23
+ readonly mediaType?: string;
24
+ readonly origin?: string;
25
+ }
26
+ export interface SourceMetadata {
27
+ readonly id: SourceId;
28
+ readonly name: string;
29
+ readonly mediaType: string;
30
+ readonly byteCount: number;
31
+ readonly capturedAt: string;
32
+ readonly origin?: string;
33
+ }
34
+ export interface SourceReceipt {
35
+ readonly id: SourceId;
36
+ readonly deduplicated: boolean;
37
+ readonly metadata: SourceMetadata;
38
+ }
39
+ export interface ByteRange {
40
+ readonly offset: number;
41
+ readonly limit: number;
42
+ }
43
+ export interface SourceRead {
44
+ readonly id: SourceId;
45
+ readonly content: string;
46
+ readonly metadata: SourceMetadata;
47
+ readonly byteStart: number;
48
+ readonly byteEnd: number;
49
+ readonly byteCount: number;
50
+ }
51
+ export interface CatalogRequest {
52
+ readonly limit?: number;
53
+ readonly cursor?: string;
54
+ }
55
+ export interface SourceCatalogEntry {
56
+ readonly id: SourceId;
57
+ readonly name: string;
58
+ readonly mediaType: string;
59
+ readonly byteCount: number;
60
+ readonly capturedAt: string;
61
+ readonly origin?: string;
62
+ }
63
+ export interface SourceCatalogPage {
64
+ readonly items: readonly SourceCatalogEntry[];
65
+ readonly nextCursor: string | null;
66
+ }
67
+ export interface PageCatalogEntry {
68
+ readonly id: PageId;
69
+ readonly title: string;
70
+ readonly summary: string;
71
+ readonly sources: readonly SourceId[];
72
+ readonly byteCount: number;
73
+ readonly sha256: string;
74
+ }
75
+ export interface PageCatalogPage {
76
+ readonly items: readonly PageCatalogEntry[];
77
+ readonly nextCursor: string | null;
78
+ }
79
+ export interface PageMetadata {
80
+ readonly title: string;
81
+ readonly summary: string;
82
+ readonly sources: readonly SourceId[];
83
+ }
84
+ export interface PageRead {
85
+ readonly id: PageId;
86
+ readonly markdown: string;
87
+ readonly metadata: PageMetadata;
88
+ readonly sha256: string;
89
+ }
90
+ export interface UpsertPageInput extends PageMetadata {
91
+ readonly id: PageId;
92
+ readonly body: string;
93
+ readonly expectedSha256: string | null;
94
+ }
95
+ export interface PageReceipt {
96
+ readonly id: PageId;
97
+ readonly created: boolean;
98
+ readonly sha256: string;
99
+ }
100
+ export interface SearchHit {
101
+ readonly pageId: PageId;
102
+ readonly title: string;
103
+ readonly headingTrail: readonly string[];
104
+ readonly startLine: number;
105
+ readonly score: number;
106
+ readonly snippet: string;
107
+ readonly sourceIds: readonly SourceId[];
108
+ }
109
+ export type LintSeverity = 'error' | 'warning';
110
+ export interface LintDiagnostic {
111
+ readonly code: string;
112
+ readonly severity: LintSeverity;
113
+ readonly path: string;
114
+ readonly line?: number;
115
+ readonly message: string;
116
+ }
117
+ export interface LintReport {
118
+ readonly diagnostics: readonly LintDiagnostic[];
119
+ readonly errorCount: number;
120
+ readonly warningCount: number;
121
+ readonly filesExamined: number;
122
+ }
123
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}