@tekmemo/cli 0.1.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.
@@ -0,0 +1,276 @@
1
+ import { TekMemoCloudClient, TekMemoCloudClientOptions } from "@tekmemo/cloud-client";
2
+ import { TEKMEMO_DIR, TekMemoManifest } from "tekmemo";
3
+
4
+ //#region src/cloud/client.d.ts
5
+ interface CloudConnectionOptions {
6
+ cloudUrl?: string | undefined;
7
+ apiKey?: string | undefined;
8
+ workspaceId?: string | undefined;
9
+ projectId?: string | undefined;
10
+ timeoutMs?: number | string | undefined;
11
+ allowMissingApiKey?: boolean | undefined;
12
+ allowMissingProjectId?: boolean | undefined;
13
+ }
14
+ interface NormalizedCloudConnectionOptions {
15
+ baseUrl: string;
16
+ apiKey?: string | undefined;
17
+ workspaceId?: string | undefined;
18
+ projectId?: string | undefined;
19
+ timeoutMs?: number | undefined;
20
+ }
21
+ declare function createCliCloudClient(options?: CloudConnectionOptions): TekMemoCloudClient;
22
+ declare function toCloudClientOptions(options?: CloudConnectionOptions): TekMemoCloudClientOptions;
23
+ declare function normalizeCloudConnectionOptions(options?: CloudConnectionOptions): NormalizedCloudConnectionOptions;
24
+ declare function formatCloudError(error: unknown): string;
25
+ declare function cloudConnectionSummary(options: NormalizedCloudConnectionOptions): Record<string, unknown>;
26
+ //#endregion
27
+ //#region src/config/runtime.d.ts
28
+ type TekMemoRuntimeMode = "local" | "cloud" | "hybrid";
29
+ type TekMemoReadPolicy = "local-first" | "cloud-first" | "local-only" | "cloud-only";
30
+ type TekMemoWritePolicy = "local-first" | "cloud-first" | "local-only" | "cloud-only";
31
+ interface TekMemoConfigFile {
32
+ version?: number;
33
+ runtime?: TekMemoRuntimeMode;
34
+ root?: string;
35
+ cloud?: {
36
+ baseUrl?: string;
37
+ workspaceId?: string;
38
+ projectId?: string;
39
+ timeoutMs?: number;
40
+ };
41
+ hybrid?: {
42
+ readPolicy?: TekMemoReadPolicy;
43
+ writePolicy?: TekMemoWritePolicy;
44
+ };
45
+ }
46
+ interface CliRuntimeFlags {
47
+ root?: string;
48
+ runtime?: string;
49
+ cloudUrl?: string;
50
+ apiKey?: string;
51
+ workspaceId?: string;
52
+ projectId?: string;
53
+ timeoutMs?: string | number;
54
+ readPolicy?: string;
55
+ writePolicy?: string;
56
+ }
57
+ interface ResolvedCliRuntimeConfig {
58
+ runtime: TekMemoRuntimeMode;
59
+ root: string;
60
+ configPath: string;
61
+ configLoaded: boolean;
62
+ cloud: {
63
+ cloudUrl?: string;
64
+ apiKey?: string;
65
+ workspaceId?: string;
66
+ projectId?: string;
67
+ timeoutMs?: number;
68
+ };
69
+ hybrid: {
70
+ readPolicy: TekMemoReadPolicy;
71
+ writePolicy: TekMemoWritePolicy;
72
+ };
73
+ }
74
+ declare function resolveCliRuntimeConfig(input: {
75
+ cwd: string;
76
+ flags?: CliRuntimeFlags;
77
+ env?: NodeJS.ProcessEnv;
78
+ }): Promise<ResolvedCliRuntimeConfig>;
79
+ declare function writeDefaultCliConfig(input: {
80
+ cwd: string;
81
+ root?: string;
82
+ config?: TekMemoConfigFile;
83
+ force?: boolean;
84
+ }): Promise<{
85
+ path: string;
86
+ created: boolean;
87
+ overwritten: boolean;
88
+ }>;
89
+ //#endregion
90
+ //#region src/errors/cli-errors.d.ts
91
+ type CliErrorCode = "CLI_USAGE_ERROR" | "CLI_VALIDATION_ERROR" | "CLI_FS_ERROR" | "CLI_PROTOCOL_ERROR" | "CLI_JSONL_ERROR";
92
+ declare class CliError extends Error {
93
+ readonly code: CliErrorCode;
94
+ readonly exitCode: number;
95
+ readonly cause?: unknown;
96
+ constructor(code: CliErrorCode, message: string, options?: {
97
+ exitCode?: number;
98
+ cause?: unknown;
99
+ });
100
+ }
101
+ declare class CliUsageError extends CliError {
102
+ constructor(message: string, options?: {
103
+ cause?: unknown;
104
+ });
105
+ }
106
+ declare class CliValidationError extends CliError {
107
+ constructor(message: string, options?: {
108
+ cause?: unknown;
109
+ });
110
+ }
111
+ declare class CliFsError extends CliError {
112
+ constructor(message: string, options?: {
113
+ cause?: unknown;
114
+ });
115
+ }
116
+ declare class CliProtocolError extends CliError {
117
+ constructor(message: string, options?: {
118
+ cause?: unknown;
119
+ });
120
+ }
121
+ declare class CliJsonlError extends CliError {
122
+ constructor(message: string, options?: {
123
+ cause?: unknown;
124
+ });
125
+ }
126
+ //#endregion
127
+ //#region src/fs/tekmemo-fs.d.ts
128
+ interface TekMemoFileSystemOptions {
129
+ rootDir: string;
130
+ rejectSymlinkedTekMemoDir?: boolean;
131
+ }
132
+ declare class TekMemoFileSystem {
133
+ readonly rootDir: string;
134
+ private readonly rejectSymlinkedTekMemoDir;
135
+ constructor(options: TekMemoFileSystemOptions);
136
+ resolve(relativePath: string): string;
137
+ ensureSafeRoot(): Promise<void>;
138
+ exists(relativePath: string): Promise<boolean>;
139
+ readText(relativePath: string): Promise<string>;
140
+ readTextIfExists(relativePath: string): Promise<string | undefined>;
141
+ writeText(relativePath: string, content: string): Promise<void>;
142
+ appendText(relativePath: string, content: string): Promise<void>;
143
+ mkdir(relativePath: string): Promise<void>;
144
+ stat(relativePath: string): Promise<{
145
+ isFile: boolean;
146
+ isDirectory: boolean;
147
+ isSymbolicLink: boolean;
148
+ size: number;
149
+ }>;
150
+ private rejectUnsafeTekMemoSymlinkIfNeeded;
151
+ }
152
+ //#endregion
153
+ //#region src/output/output.d.ts
154
+ interface CliOutput {
155
+ stdout: string[];
156
+ stderr: string[];
157
+ write(message: string): void;
158
+ error(message: string): void;
159
+ success(message: string): void;
160
+ warn(message: string): void;
161
+ }
162
+ interface JsonEnvelope<T = unknown> {
163
+ ok: boolean;
164
+ command: string;
165
+ data?: T;
166
+ error?: {
167
+ code: string;
168
+ message: string;
169
+ details?: unknown;
170
+ };
171
+ }
172
+ interface BufferedOutputOptions {
173
+ noColor?: boolean;
174
+ }
175
+ declare function createBufferedOutput(options?: BufferedOutputOptions): CliOutput;
176
+ declare function printHumanOrJson(output: CliOutput, value: unknown, human: string, json?: boolean): void;
177
+ declare function printJsonEnvelope<T>(output: CliOutput, command: string, data: T): void;
178
+ declare function printJsonError(output: CliOutput, command: string, code: string, message: string, details?: unknown): void;
179
+ //#endregion
180
+ //#region src/protocol/constants.d.ts
181
+ /**
182
+ * Flat CLI path map kept for command ergonomics.
183
+ * The values intentionally come from `tekmemo`, so the CLI cannot drift from
184
+ * the canonical protocol owned by the core package.
185
+ */
186
+ declare const TEKMEMO_PATHS: {
187
+ readonly manifest: ".tekmemo/manifest.json";
188
+ readonly coreMemory: ".tekmemo/memory/core.md";
189
+ readonly notesMemory: ".tekmemo/memory/notes.md";
190
+ readonly memoryEvents: ".tekmemo/events/memory-events.jsonl";
191
+ readonly conversations: ".tekmemo/events/conversations.jsonl";
192
+ readonly chunks: ".tekmemo/indexes/chunks.jsonl";
193
+ readonly graphNodes: ".tekmemo/graph/nodes.jsonl";
194
+ readonly graphEdges: ".tekmemo/graph/edges.jsonl";
195
+ readonly snapshots: ".tekmemo/snapshots/snapshots.jsonl";
196
+ readonly snapshotsDir: ".tekmemo/snapshots";
197
+ readonly tmpDir: ".tekmemo/tmp";
198
+ };
199
+ declare const REQUIRED_FILES: readonly [".tekmemo/manifest.json", ".tekmemo/memory/core.md", ".tekmemo/memory/notes.md", ".tekmemo/events/memory-events.jsonl", ".tekmemo/events/conversations.jsonl", ".tekmemo/indexes/chunks.jsonl", ".tekmemo/graph/nodes.jsonl", ".tekmemo/graph/edges.jsonl", ".tekmemo/snapshots/snapshots.jsonl"];
200
+ declare const REQUIRED_DIRS: readonly [".tekmemo", ".tekmemo/memory", ".tekmemo/events", ".tekmemo/indexes", ".tekmemo/graph", ".tekmemo/snapshots", ".tekmemo/tmp"];
201
+ //#endregion
202
+ //#region src/protocol/jsonl.d.ts
203
+ interface JsonlParseOptions {
204
+ strict?: boolean | undefined;
205
+ }
206
+ interface JsonlRecord {
207
+ line: number;
208
+ value: Record<string, unknown>;
209
+ }
210
+ declare function parseJsonl(content: string, options?: JsonlParseOptions): JsonlRecord[];
211
+ declare function stringifyJsonl(records: readonly Record<string, unknown>[]): string;
212
+ //#endregion
213
+ //#region src/protocol/manifest.d.ts
214
+ type TekMemoCliManifest = TekMemoManifest;
215
+ declare function createDefaultManifest(input?: {
216
+ projectId?: string;
217
+ now?: string;
218
+ }): TekMemoCliManifest;
219
+ declare function parseManifest(content: string): TekMemoCliManifest;
220
+ declare function validateManifest(value: unknown): TekMemoCliManifest;
221
+ //#endregion
222
+ //#region src/protocol/summary.d.ts
223
+ interface TekMemoInspection {
224
+ rootDir: string;
225
+ exists: boolean;
226
+ manifest?: TekMemoCliManifest;
227
+ files: Array<{
228
+ path: string;
229
+ exists: boolean;
230
+ bytes: number;
231
+ lines?: number;
232
+ records?: number;
233
+ }>;
234
+ summary: {
235
+ eventCount: number;
236
+ conversationCount: number;
237
+ chunkCount: number;
238
+ graphNodeCount: number;
239
+ graphEdgeCount: number;
240
+ snapshotCount: number;
241
+ };
242
+ }
243
+ declare function inspectTekMemo(fs: TekMemoFileSystem): Promise<TekMemoInspection>;
244
+ //#endregion
245
+ //#region src/runner.d.ts
246
+ interface RunTekMemoCliInput {
247
+ argv: string[];
248
+ cwd?: string;
249
+ output?: CliOutput;
250
+ verbose?: boolean;
251
+ quiet?: boolean;
252
+ noColor?: boolean;
253
+ stdinContent?: string;
254
+ }
255
+ interface RunTekMemoCliResult {
256
+ exitCode: number;
257
+ stdout: string[];
258
+ stderr: string[];
259
+ }
260
+ declare function runTekMemoCli(input: RunTekMemoCliInput): Promise<RunTekMemoCliResult>;
261
+ //#endregion
262
+ //#region src/utils/labels.d.ts
263
+ declare function validateSnapshotLabel(label: string): string;
264
+ declare function createSafeIdFromLabel(label: string, timestamp?: string): string;
265
+ //#endregion
266
+ //#region src/utils/secrets.d.ts
267
+ interface SecretScanFinding {
268
+ kind: string;
269
+ index: number;
270
+ preview: string;
271
+ }
272
+ declare function scanForSecrets(content: string): SecretScanFinding[];
273
+ declare function redactSecretPreview(value: string): string;
274
+ //#endregion
275
+ export { type BufferedOutputOptions, CliError, type CliErrorCode, CliFsError, CliJsonlError, type CliOutput, CliProtocolError, type CliRuntimeFlags, CliUsageError, CliValidationError, type CloudConnectionOptions, type JsonEnvelope, type JsonlParseOptions, type JsonlRecord, type NormalizedCloudConnectionOptions, REQUIRED_DIRS, REQUIRED_FILES, type ResolvedCliRuntimeConfig, type RunTekMemoCliInput, type RunTekMemoCliResult, TEKMEMO_DIR, TEKMEMO_PATHS, type TekMemoCliManifest, type TekMemoConfigFile, TekMemoFileSystem, type TekMemoFileSystemOptions, type TekMemoInspection, type TekMemoReadPolicy, type TekMemoRuntimeMode, type TekMemoWritePolicy, cloudConnectionSummary, createBufferedOutput, createCliCloudClient, createDefaultManifest, createSafeIdFromLabel, formatCloudError, inspectTekMemo, normalizeCloudConnectionOptions, parseJsonl, parseManifest, printHumanOrJson, printJsonEnvelope, printJsonError, redactSecretPreview, resolveCliRuntimeConfig, runTekMemoCli, scanForSecrets, stringifyJsonl, toCloudClientOptions, validateManifest, validateSnapshotLabel, writeDefaultCliConfig };
276
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/cloud/client.ts","../src/config/runtime.ts","../src/errors/cli-errors.ts","../src/fs/tekmemo-fs.ts","../src/output/output.ts","../src/protocol/constants.ts","../src/protocol/jsonl.ts","../src/protocol/manifest.ts","../src/protocol/summary.ts","../src/runner.ts","../src/utils/labels.ts","../src/utils/secrets.ts"],"mappings":"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"}
package/dist/index.mjs ADDED
@@ -0,0 +1,3 @@
1
+ import { A as CliJsonlError, C as cloudConnectionSummary, D as toCloudClientOptions, E as normalizeCloudConnectionOptions, M as CliUsageError, N as CliValidationError, O as CliError, S as writeDefaultCliConfig, T as formatCloudError, _ as printHumanOrJson, a as scanForSecrets, b as TekMemoFileSystem, c as parseManifest, d as stringifyJsonl, f as REQUIRED_DIRS, g as createBufferedOutput, h as TEKMEMO_PATHS, i as redactSecretPreview, j as CliProtocolError, k as CliFsError, l as validateManifest, m as TEKMEMO_DIR, n as createSafeIdFromLabel, o as inspectTekMemo, p as REQUIRED_FILES, r as validateSnapshotLabel, s as createDefaultManifest, t as runTekMemoCli, u as parseJsonl, v as printJsonEnvelope, w as createCliCloudClient, x as resolveCliRuntimeConfig, y as printJsonError } from "./runner-Bz3RPzFc.mjs";
2
+
3
+ export { CliError, CliFsError, CliJsonlError, CliProtocolError, CliUsageError, CliValidationError, REQUIRED_DIRS, REQUIRED_FILES, TEKMEMO_DIR, TEKMEMO_PATHS, TekMemoFileSystem, cloudConnectionSummary, createBufferedOutput, createCliCloudClient, createDefaultManifest, createSafeIdFromLabel, formatCloudError, inspectTekMemo, normalizeCloudConnectionOptions, parseJsonl, parseManifest, printHumanOrJson, printJsonEnvelope, printJsonError, redactSecretPreview, resolveCliRuntimeConfig, runTekMemoCli, scanForSecrets, stringifyJsonl, toCloudClientOptions, validateManifest, validateSnapshotLabel, writeDefaultCliConfig };