@tekmemo/cli 0.1.0 → 0.1.1
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/README.md +13 -47
- package/dist/bin/tekmemo.cjs +1 -1
- package/dist/bin/tekmemo.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{runner-Bz3RPzFc.mjs → runner-CuwVq2Re.mjs} +2 -2
- package/dist/{runner-Bz3RPzFc.mjs.map → runner-CuwVq2Re.mjs.map} +1 -1
- package/dist/{runner-CiA5dFku.cjs → runner-DqYmvg3G.cjs} +2 -2
- package/dist/{runner-CiA5dFku.cjs.map → runner-DqYmvg3G.cjs.map} +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-CiA5dFku.cjs","names":["firstNonEmpty","normalizeTimeoutMs","TekMemoCloudError","path","fs","isNodeError","path","fs","path","MANIFEST_PATH","CORE_MEMORY_PATH","NOTES_MEMORY_PATH","MEMORY_EVENTS_PATH","CONVERSATIONS_MEMORY_PATH","CHUNKS_INDEX_PATH","GRAPH_NODES_PATH","GRAPH_EDGES_PATH","SNAPSHOTS_INDEX_PATH","TEKMEMO_DIR","CANONICAL_TEKMEMO_FILES","fs","z","readline","Command","CommanderError"],"sources":["../src/errors/cli-errors.ts","../src/cloud/client.ts","../src/config/runtime.ts","../src/fs/paths.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/commands/agent.ts","../src/commands/chunks.ts","../src/utils/content.ts","../src/utils/metadata.ts","../src/utils/numbers.ts","../src/utils/secrets.ts","../src/commands/cloud.ts","../src/commands/context.ts","../src/commands/diff.ts","../src/protocol/schemas.ts","../src/commands/doctor.ts","../src/commands/edit.ts","../src/commands/events.ts","../src/commands/init.ts","../src/commands/inspect.ts","../src/commands/read.ts","../src/commands/remember.ts","../src/utils/labels.ts","../src/commands/snapshot.ts","../src/commands/validate.ts","../src/commands/runtime.ts","../src/commands/search.ts","../src/runner.ts"],"sourcesContent":["export type CliErrorCode =\n\t| \"CLI_USAGE_ERROR\"\n\t| \"CLI_VALIDATION_ERROR\"\n\t| \"CLI_FS_ERROR\"\n\t| \"CLI_PROTOCOL_ERROR\"\n\t| \"CLI_JSONL_ERROR\";\n\nexport class CliError extends Error {\n\treadonly code: CliErrorCode;\n\treadonly exitCode: number;\n\treadonly cause?: unknown;\n\n\tconstructor(\n\t\tcode: CliErrorCode,\n\t\tmessage: string,\n\t\toptions?: { exitCode?: number; cause?: unknown },\n\t) {\n\t\tsuper(message);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tthis.exitCode = options?.exitCode ?? 1;\n\t\tthis.cause = options?.cause;\n\t}\n}\n\nexport class CliUsageError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_USAGE_ERROR\", message, { exitCode: 1, cause: options?.cause });\n\t}\n}\n\nexport class CliValidationError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_VALIDATION_ERROR\", message, {\n\t\t\texitCode: 1,\n\t\t\tcause: options?.cause,\n\t\t});\n\t}\n}\n\nexport class CliFsError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_FS_ERROR\", message, { exitCode: 1, cause: options?.cause });\n\t}\n}\n\nexport class CliProtocolError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_PROTOCOL_ERROR\", message, {\n\t\t\texitCode: 1,\n\t\t\tcause: options?.cause,\n\t\t});\n\t}\n}\n\nexport class CliJsonlError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_JSONL_ERROR\", message, { exitCode: 1, cause: options?.cause });\n\t}\n}\n","import {\n\tcreateTekMemoCloudClient,\n\tredactSecrets,\n\ttype TekMemoCloudClient,\n\ttype TekMemoCloudClientOptions,\n\tTekMemoCloudError,\n} from \"@tekmemo/cloud-client\";\nimport { CliUsageError } from \"../errors/cli-errors\";\n\nexport interface CloudConnectionOptions {\n\tcloudUrl?: string | undefined;\n\tapiKey?: string | undefined;\n\tworkspaceId?: string | undefined;\n\tprojectId?: string | undefined;\n\ttimeoutMs?: number | string | undefined;\n\tallowMissingApiKey?: boolean | undefined;\n\tallowMissingProjectId?: boolean | undefined;\n}\n\nexport interface NormalizedCloudConnectionOptions {\n\tbaseUrl: string;\n\tapiKey?: string | undefined;\n\tworkspaceId?: string | undefined;\n\tprojectId?: string | undefined;\n\ttimeoutMs?: number | undefined;\n}\n\nexport function createCliCloudClient(\n\toptions: CloudConnectionOptions = {},\n): TekMemoCloudClient {\n\treturn createTekMemoCloudClient(toCloudClientOptions(options));\n}\n\nexport function toCloudClientOptions(\n\toptions: CloudConnectionOptions = {},\n): TekMemoCloudClientOptions {\n\tconst normalized = normalizeCloudConnectionOptions(options);\n\treturn {\n\t\tbaseUrl: normalized.baseUrl,\n\t\t...(normalized.apiKey !== undefined ? { apiKey: normalized.apiKey } : {}),\n\t\t...(normalized.projectId !== undefined\n\t\t\t? { defaultProjectId: normalized.projectId }\n\t\t\t: {}),\n\t\t...(normalized.workspaceId !== undefined\n\t\t\t? { defaultWorkspaceId: normalized.workspaceId }\n\t\t\t: {}),\n\t\t...(normalized.timeoutMs !== undefined\n\t\t\t? { timeoutMs: normalized.timeoutMs }\n\t\t\t: {}),\n\t\tuserAgent: \"@tekmemo/cli\",\n\t\trequireApiKey: !options.allowMissingApiKey,\n\t\tacceptLegacyEnvelope: false,\n\t};\n}\n\nexport function normalizeCloudConnectionOptions(\n\toptions: CloudConnectionOptions = {},\n): NormalizedCloudConnectionOptions {\n\tconst baseUrl = firstNonEmpty(\n\t\toptions.cloudUrl,\n\t\tprocess.env.TEKMEMO_CLOUD_URL,\n\t\tprocess.env.TEKMEMO_API_URL,\n\t);\n\tif (!baseUrl) {\n\t\tthrow new CliUsageError(\n\t\t\t\"TekMemo Cloud URL is required. Pass --cloud-url or set TEKMEMO_CLOUD_URL.\",\n\t\t);\n\t}\n\n\tconst apiKey = firstNonEmpty(options.apiKey, process.env.TEKMEMO_API_KEY);\n\tif (!apiKey && !options.allowMissingApiKey) {\n\t\tthrow new CliUsageError(\n\t\t\t\"TekMemo Cloud API key is required. Pass --api-key or set TEKMEMO_API_KEY.\",\n\t\t);\n\t}\n\n\tconst workspaceId = firstNonEmpty(\n\t\toptions.workspaceId,\n\t\tprocess.env.TEKMEMO_WORKSPACE_ID,\n\t);\n\tconst projectId = firstNonEmpty(\n\t\toptions.projectId,\n\t\tprocess.env.TEKMEMO_PROJECT_ID,\n\t);\n\tif (!projectId && !options.allowMissingProjectId) {\n\t\tthrow new CliUsageError(\n\t\t\t\"TekMemo Cloud project ID is required. Pass --project-id or set TEKMEMO_PROJECT_ID.\",\n\t\t);\n\t}\n\tconst timeoutMs = normalizeTimeoutMs(options.timeoutMs);\n\n\treturn {\n\t\tbaseUrl,\n\t\t...(apiKey !== undefined ? { apiKey } : {}),\n\t\t...(workspaceId !== undefined ? { workspaceId } : {}),\n\t\t...(projectId !== undefined ? { projectId } : {}),\n\t\t...(timeoutMs !== undefined ? { timeoutMs } : {}),\n\t};\n}\n\nexport function formatCloudError(error: unknown): string {\n\tif (error instanceof TekMemoCloudError) {\n\t\tconst parts = [error.message];\n\t\tif (error.status !== undefined) parts.push(`status=${error.status}`);\n\t\tif (error.code) parts.push(`code=${error.code}`);\n\t\tif (error.requestId) parts.push(`requestId=${error.requestId}`);\n\t\tif (error.retryAfterMs !== undefined)\n\t\t\tparts.push(`retryAfterMs=${error.retryAfterMs}`);\n\t\treturn parts.join(\" \");\n\t}\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function cloudConnectionSummary(\n\toptions: NormalizedCloudConnectionOptions,\n): Record<string, unknown> {\n\treturn {\n\t\tbaseUrl: options.baseUrl,\n\t\tapiKey: options.apiKey\n\t\t\t? redactSecrets(options.apiKey, [options.apiKey])\n\t\t\t: null,\n\t\tworkspaceId: options.workspaceId ?? null,\n\t\tprojectId: options.projectId ?? null,\n\t\ttimeoutMs: options.timeoutMs ?? null,\n\t};\n}\n\nfunction firstNonEmpty(\n\t...values: Array<string | undefined>\n): string | undefined {\n\tfor (const value of values) {\n\t\tconst trimmed = value?.trim();\n\t\tif (trimmed) return trimmed;\n\t}\n\treturn undefined;\n}\n\nfunction normalizeTimeoutMs(\n\tvalue: number | string | undefined,\n): number | undefined {\n\tif (value === undefined) return undefined;\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isInteger(value) || value < 1) {\n\t\t\tthrow new CliUsageError(\n\t\t\t\t\"timeout must be a positive integer in milliseconds.\",\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\tconst parsed = Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 1) {\n\t\tthrow new CliUsageError(\n\t\t\t\"timeout must be a positive integer in milliseconds.\",\n\t\t);\n\t}\n\treturn parsed;\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { CliUsageError } from \"../errors/cli-errors\";\n\nexport type TekMemoRuntimeMode = \"local\" | \"cloud\" | \"hybrid\";\nexport type TekMemoReadPolicy =\n\t| \"local-first\"\n\t| \"cloud-first\"\n\t| \"local-only\"\n\t| \"cloud-only\";\nexport type TekMemoWritePolicy =\n\t| \"local-first\"\n\t| \"cloud-first\"\n\t| \"local-only\"\n\t| \"cloud-only\";\n\nexport interface TekMemoConfigFile {\n\tversion?: number;\n\truntime?: TekMemoRuntimeMode;\n\troot?: string;\n\tcloud?: {\n\t\tbaseUrl?: string;\n\t\tworkspaceId?: string;\n\t\tprojectId?: string;\n\t\ttimeoutMs?: number;\n\t};\n\thybrid?: {\n\t\treadPolicy?: TekMemoReadPolicy;\n\t\twritePolicy?: TekMemoWritePolicy;\n\t};\n}\n\nexport interface CliRuntimeFlags {\n\troot?: string;\n\truntime?: string;\n\tcloudUrl?: string;\n\tapiKey?: string;\n\tworkspaceId?: string;\n\tprojectId?: string;\n\ttimeoutMs?: string | number;\n\treadPolicy?: string;\n\twritePolicy?: string;\n}\n\nexport interface ResolvedCliRuntimeConfig {\n\truntime: TekMemoRuntimeMode;\n\troot: string;\n\tconfigPath: string;\n\tconfigLoaded: boolean;\n\tcloud: {\n\t\tcloudUrl?: string;\n\t\tapiKey?: string;\n\t\tworkspaceId?: string;\n\t\tprojectId?: string;\n\t\ttimeoutMs?: number;\n\t};\n\thybrid: {\n\t\treadPolicy: TekMemoReadPolicy;\n\t\twritePolicy: TekMemoWritePolicy;\n\t};\n}\n\nexport async function resolveCliRuntimeConfig(input: {\n\tcwd: string;\n\tflags?: CliRuntimeFlags;\n\tenv?: NodeJS.ProcessEnv;\n}): Promise<ResolvedCliRuntimeConfig> {\n\tconst flags = input.flags ?? {};\n\tconst env = input.env ?? process.env;\n\tconst initialRoot =\n\t\tfirstNonEmpty(flags.root, env.TEKMEMO_ROOT, input.cwd) ?? input.cwd;\n\tconst configPath = path.join(\n\t\tpath.resolve(input.cwd, initialRoot),\n\t\t\".tekmemo\",\n\t\t\"config.json\",\n\t);\n\tconst config = await readOptionalConfig(configPath);\n\tconst configRoot = config.value?.root;\n\tconst root = path.resolve(\n\t\tinput.cwd,\n\t\tfirstNonEmpty(flags.root, env.TEKMEMO_ROOT, configRoot, initialRoot) ??\n\t\t\tinitialRoot,\n\t);\n\tconst runtime = normalizeRuntime(\n\t\tfirstNonEmpty(\n\t\t\tflags.runtime,\n\t\t\tenv.TEKMEMO_RUNTIME,\n\t\t\tconfig.value?.runtime,\n\t\t\t\"local\",\n\t\t),\n\t);\n\tconst readPolicy = normalizeReadPolicy(\n\t\tfirstNonEmpty(\n\t\t\tflags.readPolicy,\n\t\t\tenv.TEKMEMO_READ_POLICY,\n\t\t\tconfig.value?.hybrid?.readPolicy,\n\t\t\t\"local-first\",\n\t\t),\n\t);\n\tconst writePolicy = normalizeWritePolicy(\n\t\tfirstNonEmpty(\n\t\t\tflags.writePolicy,\n\t\t\tenv.TEKMEMO_WRITE_POLICY,\n\t\t\tconfig.value?.hybrid?.writePolicy,\n\t\t\t\"local-first\",\n\t\t),\n\t);\n\tconst timeoutValue = firstDefined(\n\t\tflags.timeoutMs,\n\t\tenv.TEKMEMO_CLOUD_TIMEOUT_MS,\n\t\tconfig.value?.cloud?.timeoutMs,\n\t);\n\tconst timeoutMs = normalizeTimeoutMs(timeoutValue);\n\treturn {\n\t\truntime,\n\t\troot,\n\t\tconfigPath,\n\t\tconfigLoaded: config.loaded,\n\t\tcloud: compactCloud({\n\t\t\tcloudUrl: firstNonEmpty(\n\t\t\t\tflags.cloudUrl,\n\t\t\t\tenv.TEKMEMO_CLOUD_URL,\n\t\t\t\tenv.TEKMEMO_API_URL,\n\t\t\t\tconfig.value?.cloud?.baseUrl,\n\t\t\t),\n\t\t\tapiKey: firstNonEmpty(flags.apiKey, env.TEKMEMO_API_KEY),\n\t\t\tworkspaceId: firstNonEmpty(\n\t\t\t\tflags.workspaceId,\n\t\t\t\tenv.TEKMEMO_WORKSPACE_ID,\n\t\t\t\tconfig.value?.cloud?.workspaceId,\n\t\t\t),\n\t\t\tprojectId: firstNonEmpty(\n\t\t\t\tflags.projectId,\n\t\t\t\tenv.TEKMEMO_PROJECT_ID,\n\t\t\t\tconfig.value?.cloud?.projectId,\n\t\t\t),\n\t\t\t...(timeoutMs !== undefined ? { timeoutMs } : {}),\n\t\t}),\n\t\thybrid: { readPolicy, writePolicy },\n\t};\n}\n\nexport async function writeDefaultCliConfig(input: {\n\tcwd: string;\n\troot?: string;\n\tconfig?: TekMemoConfigFile;\n\tforce?: boolean;\n}): Promise<{ path: string; created: boolean; overwritten: boolean }> {\n\tconst root = path.resolve(input.cwd, input.root ?? \".\");\n\tconst configPath = path.join(root, \".tekmemo\", \"config.json\");\n\tawait fs.mkdir(path.dirname(configPath), { recursive: true });\n\tconst exists = await fileExists(configPath);\n\tif (exists && !input.force)\n\t\treturn { path: configPath, created: false, overwritten: false };\n\tconst config = input.config ?? {\n\t\tversion: 1,\n\t\truntime: \"local\",\n\t\troot: \".\",\n\t};\n\tawait fs.writeFile(\n\t\tconfigPath,\n\t\t`${JSON.stringify(config, null, 2)}\\n`,\n\t\t\"utf8\",\n\t);\n\treturn { path: configPath, created: !exists, overwritten: exists };\n}\n\nasync function readOptionalConfig(\n\tconfigPath: string,\n): Promise<{ loaded: boolean; value?: TekMemoConfigFile }> {\n\ttry {\n\t\tconst raw = await fs.readFile(configPath, \"utf8\");\n\t\tconst parsed = JSON.parse(raw) as unknown;\n\t\treturn { loaded: true, value: validateConfig(parsed, configPath) };\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return { loaded: false };\n\t\tif (error instanceof SyntaxError) {\n\t\t\tthrow new CliUsageError(\n\t\t\t\t`Invalid TekMemo config JSON at ${configPath}: ${error.message}`,\n\t\t\t);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction validateConfig(value: unknown, configPath: string): TekMemoConfigFile {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new CliUsageError(`TekMemo config must be an object: ${configPath}`);\n\t}\n\tconst record = value as TekMemoConfigFile;\n\tif (record.runtime !== undefined) normalizeRuntime(record.runtime);\n\tif (record.hybrid?.readPolicy !== undefined)\n\t\tnormalizeReadPolicy(record.hybrid.readPolicy);\n\tif (record.hybrid?.writePolicy !== undefined)\n\t\tnormalizeWritePolicy(record.hybrid.writePolicy);\n\tif (record.cloud?.timeoutMs !== undefined)\n\t\tnormalizeTimeoutMs(record.cloud.timeoutMs);\n\treturn record;\n}\n\nfunction normalizeRuntime(value: unknown): TekMemoRuntimeMode {\n\tif (value === \"local\" || value === \"cloud\" || value === \"hybrid\")\n\t\treturn value;\n\tthrow new CliUsageError(\"runtime must be local, cloud, or hybrid.\");\n}\n\nfunction normalizeReadPolicy(value: unknown): TekMemoReadPolicy {\n\tif (\n\t\tvalue === \"local-first\" ||\n\t\tvalue === \"cloud-first\" ||\n\t\tvalue === \"local-only\" ||\n\t\tvalue === \"cloud-only\"\n\t)\n\t\treturn value;\n\tthrow new CliUsageError(\n\t\t\"read policy must be local-first, cloud-first, local-only, or cloud-only.\",\n\t);\n}\n\nfunction normalizeWritePolicy(value: unknown): TekMemoWritePolicy {\n\tif (\n\t\tvalue === \"local-first\" ||\n\t\tvalue === \"cloud-first\" ||\n\t\tvalue === \"local-only\" ||\n\t\tvalue === \"cloud-only\"\n\t)\n\t\treturn value;\n\tthrow new CliUsageError(\n\t\t\"write policy must be local-first, cloud-first, local-only, or cloud-only.\",\n\t);\n}\n\nfunction normalizeTimeoutMs(value: unknown): number | undefined {\n\tif (value === undefined || value === null || value === \"\") return undefined;\n\tconst parsed = typeof value === \"number\" ? value : Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 1) {\n\t\tthrow new CliUsageError(\n\t\t\t\"cloud timeout must be a positive integer in milliseconds.\",\n\t\t);\n\t}\n\treturn parsed;\n}\n\nfunction firstNonEmpty(...values: unknown[]): string | undefined {\n\tfor (const value of values) {\n\t\tif (typeof value !== \"string\") continue;\n\t\tconst trimmed = value.trim();\n\t\tif (trimmed) return trimmed;\n\t}\n\treturn undefined;\n}\n\nfunction firstDefined(...values: unknown[]): unknown {\n\tfor (const value of values) {\n\t\tif (value !== undefined) return value;\n\t}\n\treturn undefined;\n}\n\nfunction compactCloud(input: {\n\tcloudUrl?: string;\n\tapiKey?: string;\n\tworkspaceId?: string;\n\tprojectId?: string;\n\ttimeoutMs?: number;\n}): ResolvedCliRuntimeConfig[\"cloud\"] {\n\treturn {\n\t\t...(input.cloudUrl !== undefined ? { cloudUrl: input.cloudUrl } : {}),\n\t\t...(input.apiKey !== undefined ? { apiKey: input.apiKey } : {}),\n\t\t...(input.workspaceId !== undefined\n\t\t\t? { workspaceId: input.workspaceId }\n\t\t\t: {}),\n\t\t...(input.projectId !== undefined ? { projectId: input.projectId } : {}),\n\t\t...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n\t};\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n\ttry {\n\t\tawait fs.stat(filePath);\n\t\treturn true;\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return false;\n\t\tthrow error;\n\t}\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error;\n}\n","import path from \"node:path\";\nimport { CliFsError } from \"../errors/cli-errors\";\n\nexport function normalizeRootDir(rootDir: string): string {\n\tif (typeof rootDir !== \"string\" || rootDir.trim().length === 0) {\n\t\tthrow new CliFsError(\"rootDir must be a non-empty string.\");\n\t}\n\n\tif (rootDir.includes(\"\\0\")) {\n\t\tthrow new CliFsError(\"rootDir must not contain null bytes.\");\n\t}\n\n\treturn path.resolve(rootDir);\n}\n\nexport function resolveInsideRoot(\n\trootDir: string,\n\trelativePath: string,\n): string {\n\tif (typeof relativePath !== \"string\" || relativePath.trim().length === 0) {\n\t\tthrow new CliFsError(\"relativePath must be a non-empty string.\");\n\t}\n\n\tif (relativePath.includes(\"\\0\")) {\n\t\tthrow new CliFsError(\"relativePath must not contain null bytes.\");\n\t}\n\n\tif (path.isAbsolute(relativePath)) {\n\t\tthrow new CliFsError(\"relativePath must not be absolute.\");\n\t}\n\n\tconst normalized = relativePath.replaceAll(\"\\\\\", \"/\");\n\n\tif (normalized.split(\"/\").includes(\"..\")) {\n\t\tthrow new CliFsError(\"relativePath must not contain path traversal.\");\n\t}\n\n\tconst resolved = path.resolve(rootDir, normalized);\n\tconst relative = path.relative(rootDir, resolved);\n\n\tif (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n\t\tthrow new CliFsError(\"Resolved path escaped rootDir.\");\n\t}\n\n\treturn resolved;\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { CliFsError } from \"../errors/cli-errors\";\nimport { normalizeRootDir, resolveInsideRoot } from \"./paths\";\n\nexport interface TekMemoFileSystemOptions {\n\trootDir: string;\n\trejectSymlinkedTekMemoDir?: boolean;\n}\n\nexport class TekMemoFileSystem {\n\treadonly rootDir: string;\n\tprivate readonly rejectSymlinkedTekMemoDir: boolean;\n\n\tconstructor(options: TekMemoFileSystemOptions) {\n\t\tthis.rootDir = normalizeRootDir(options.rootDir);\n\t\tthis.rejectSymlinkedTekMemoDir = options.rejectSymlinkedTekMemoDir ?? true;\n\t}\n\n\tresolve(relativePath: string): string {\n\t\treturn resolveInsideRoot(this.rootDir, relativePath);\n\t}\n\n\tasync ensureSafeRoot(): Promise<void> {\n\t\tawait fs.mkdir(this.rootDir, { recursive: true });\n\t\tawait this.rejectUnsafeTekMemoSymlinkIfNeeded();\n\t}\n\n\tasync exists(relativePath: string): Promise<boolean> {\n\t\ttry {\n\t\t\tawait fs.lstat(this.resolve(relativePath));\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (isNodeError(error) && error.code === \"ENOENT\") return false;\n\t\t\tthrow new CliFsError(`Failed checking path \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync readText(relativePath: string): Promise<string> {\n\t\ttry {\n\t\t\treturn await fs.readFile(this.resolve(relativePath), \"utf8\");\n\t\t} catch (error) {\n\t\t\tthrow new CliFsError(`Failed reading \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync readTextIfExists(relativePath: string): Promise<string | undefined> {\n\t\ttry {\n\t\t\treturn await fs.readFile(this.resolve(relativePath), \"utf8\");\n\t\t} catch (error) {\n\t\t\tif (isNodeError(error) && error.code === \"ENOENT\") return undefined;\n\t\t\tthrow new CliFsError(`Failed reading \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync writeText(relativePath: string, content: string): Promise<void> {\n\t\tif (typeof content !== \"string\") {\n\t\t\tthrow new CliFsError(\"content must be a string.\");\n\t\t}\n\n\t\tconst target = this.resolve(relativePath);\n\t\tconst parent = path.dirname(target);\n\t\tawait fs.mkdir(parent, { recursive: true });\n\n\t\tconst tmp = path.join(\n\t\t\tparent,\n\t\t\t`.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`,\n\t\t);\n\n\t\ttry {\n\t\t\tawait fs.writeFile(tmp, content, \"utf8\");\n\t\t\tawait fs.rename(tmp, target);\n\t\t} catch (error) {\n\t\t\tawait fs.rm(tmp, { force: true }).catch(() => undefined);\n\t\t\tthrow new CliFsError(`Failed writing \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync appendText(relativePath: string, content: string): Promise<void> {\n\t\tif (typeof content !== \"string\") {\n\t\t\tthrow new CliFsError(\"content must be a string.\");\n\t\t}\n\n\t\tconst target = this.resolve(relativePath);\n\t\tawait fs.mkdir(path.dirname(target), { recursive: true });\n\n\t\ttry {\n\t\t\tawait fs.appendFile(target, content, \"utf8\");\n\t\t} catch (error) {\n\t\t\tthrow new CliFsError(`Failed appending \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync mkdir(relativePath: string): Promise<void> {\n\t\ttry {\n\t\t\tawait fs.mkdir(this.resolve(relativePath), { recursive: true });\n\t\t} catch (error) {\n\t\t\tthrow new CliFsError(`Failed creating directory \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync stat(relativePath: string): Promise<{\n\t\tisFile: boolean;\n\t\tisDirectory: boolean;\n\t\tisSymbolicLink: boolean;\n\t\tsize: number;\n\t}> {\n\t\ttry {\n\t\t\tconst stats = await fs.lstat(this.resolve(relativePath));\n\t\t\treturn {\n\t\t\t\tisFile: stats.isFile(),\n\t\t\t\tisDirectory: stats.isDirectory(),\n\t\t\t\tisSymbolicLink: stats.isSymbolicLink(),\n\t\t\t\tsize: stats.size,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new CliFsError(`Failed stat for \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async rejectUnsafeTekMemoSymlinkIfNeeded(): Promise<void> {\n\t\tif (!this.rejectSymlinkedTekMemoDir) return;\n\n\t\ttry {\n\t\t\tconst stats = await fs.lstat(this.resolve(\".tekmemo\"));\n\t\t\tif (stats.isSymbolicLink()) {\n\t\t\t\tthrow new CliFsError(\"Refusing to use symlinked .tekmemo directory.\");\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof CliFsError) throw error;\n\t\t\tif (isNodeError(error) && error.code === \"ENOENT\") return;\n\t\t\tthrow new CliFsError(\"Failed checking .tekmemo directory safety.\", {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error;\n}\n","export interface CliOutput {\n\tstdout: string[];\n\tstderr: string[];\n\twrite(message: string): void;\n\terror(message: string): void;\n\tsuccess(message: string): void;\n\twarn(message: string): void;\n}\n\nexport interface JsonEnvelope<T = unknown> {\n\tok: boolean;\n\tcommand: string;\n\tdata?: T;\n\terror?: {\n\t\tcode: string;\n\t\tmessage: string;\n\t\tdetails?: unknown;\n\t};\n}\n\nconst colors = {\n\treset: \"\\x1b[0m\",\n\tred: \"\\x1b[31m\",\n\tgreen: \"\\x1b[32m\",\n\tyellow: \"\\x1b[33m\",\n\tdim: \"\\x1b[2m\",\n};\n\nfunction shouldDisableColor(noColor?: boolean): boolean {\n\tif (noColor) return true;\n\tif (\"NO_COLOR\" in process.env) return true;\n\tif (process.env.TERM === \"dumb\") return true;\n\treturn false;\n}\n\nexport interface BufferedOutputOptions {\n\tnoColor?: boolean;\n}\n\nexport function createBufferedOutput(\n\toptions?: BufferedOutputOptions,\n): CliOutput {\n\tconst stdout: string[] = [];\n\tconst stderr: string[] = [];\n\tconst disabled = shouldDisableColor(options?.noColor);\n\n\tconst c = disabled\n\t\t? { red: \"\", green: \"\", yellow: \"\", reset: \"\", dim: \"\" }\n\t\t: colors;\n\n\treturn {\n\t\tstdout,\n\t\tstderr,\n\t\twrite(message) {\n\t\t\tstdout.push(message);\n\t\t},\n\t\terror(message) {\n\t\t\tstderr.push(`${c.red}${message}${c.reset}`);\n\t\t},\n\t\tsuccess(message) {\n\t\t\tstdout.push(`${c.green}${message}${c.reset}`);\n\t\t},\n\t\twarn(message) {\n\t\t\tstdout.push(`${c.yellow}${message}${c.reset}`);\n\t\t},\n\t};\n}\n\nexport function printHumanOrJson(\n\toutput: CliOutput,\n\tvalue: unknown,\n\thuman: string,\n\tjson = false,\n): void {\n\tif (json) {\n\t\toutput.write(JSON.stringify(value, null, 2));\n\t\treturn;\n\t}\n\n\toutput.write(human);\n}\n\nexport function printJsonEnvelope<T>(\n\toutput: CliOutput,\n\tcommand: string,\n\tdata: T,\n): void {\n\tconst envelope: JsonEnvelope<T> = { ok: true, command, data };\n\toutput.write(JSON.stringify(envelope, null, 2));\n}\n\nexport function printJsonError(\n\toutput: CliOutput,\n\tcommand: string,\n\tcode: string,\n\tmessage: string,\n\tdetails?: unknown,\n): void {\n\tconst error: JsonEnvelope = {\n\t\tok: false,\n\t\tcommand,\n\t\terror: {\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\t...(details !== undefined ? { details } : {}),\n\t\t},\n\t};\n\toutput.write(JSON.stringify(error, null, 2));\n}\n","import {\n\tCANONICAL_TEKMEMO_FILES,\n\tCHUNKS_INDEX_PATH,\n\tCONVERSATIONS_MEMORY_PATH,\n\tCORE_MEMORY_PATH,\n\tGRAPH_EDGES_PATH,\n\tGRAPH_NODES_PATH,\n\tMANIFEST_PATH,\n\tMEMORY_EVENTS_PATH,\n\tNOTES_MEMORY_PATH,\n\tSNAPSHOTS_INDEX_PATH,\n\tTEKMEMO_DIR,\n} from \"tekmemo\";\n\nexport { TEKMEMO_DIR };\n\n/**\n * Flat CLI path map kept for command ergonomics.\n * The values intentionally come from `tekmemo`, so the CLI cannot drift from\n * the canonical protocol owned by the core package.\n */\nexport const TEKMEMO_PATHS = {\n\tmanifest: MANIFEST_PATH,\n\tcoreMemory: CORE_MEMORY_PATH,\n\tnotesMemory: NOTES_MEMORY_PATH,\n\tmemoryEvents: MEMORY_EVENTS_PATH,\n\tconversations: CONVERSATIONS_MEMORY_PATH,\n\tchunks: CHUNKS_INDEX_PATH,\n\tgraphNodes: GRAPH_NODES_PATH,\n\tgraphEdges: GRAPH_EDGES_PATH,\n\tsnapshots: SNAPSHOTS_INDEX_PATH,\n\tsnapshotsDir: `${TEKMEMO_DIR}/snapshots`,\n\ttmpDir: `${TEKMEMO_DIR}/tmp`,\n} as const;\n\nexport const REQUIRED_FILES = CANONICAL_TEKMEMO_FILES;\n\nexport const REQUIRED_DIRS = [\n\tTEKMEMO_DIR,\n\t`${TEKMEMO_DIR}/memory`,\n\t`${TEKMEMO_DIR}/events`,\n\t`${TEKMEMO_DIR}/indexes`,\n\t`${TEKMEMO_DIR}/graph`,\n\t`${TEKMEMO_DIR}/snapshots`,\n\t`${TEKMEMO_DIR}/tmp`,\n] as const;\n","import { CliJsonlError } from \"../errors/cli-errors\";\n\nexport interface JsonlParseOptions {\n\tstrict?: boolean | undefined;\n}\n\nexport interface JsonlRecord {\n\tline: number;\n\tvalue: Record<string, unknown>;\n}\n\nexport function parseJsonl(\n\tcontent: string,\n\toptions?: JsonlParseOptions,\n): JsonlRecord[] {\n\tconst strict = options?.strict ?? false;\n\tconst records: JsonlRecord[] = [];\n\tconst lines = content.split(/\\r?\\n/);\n\n\tlines.forEach((line, index) => {\n\t\tconst lineNumber = index + 1;\n\t\tconst trimmed = line.trim();\n\n\t\tif (trimmed.length === 0) return;\n\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(trimmed) as unknown;\n\n\t\t\tif (\n\t\t\t\ttypeof parsed !== \"object\" ||\n\t\t\t\tparsed === null ||\n\t\t\t\tArray.isArray(parsed)\n\t\t\t) {\n\t\t\t\tthrow new CliJsonlError(`Line ${lineNumber} is not a JSON object.`);\n\t\t\t}\n\n\t\t\trecords.push({\n\t\t\t\tline: lineNumber,\n\t\t\t\tvalue: parsed as Record<string, unknown>,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (strict) {\n\t\t\t\tif (error instanceof CliJsonlError) throw error;\n\t\t\t\tthrow new CliJsonlError(`Line ${lineNumber} is invalid JSON.`, {\n\t\t\t\t\tcause: error,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\treturn records;\n}\n\nexport function stringifyJsonl(\n\trecords: readonly Record<string, unknown>[],\n): string {\n\treturn (\n\t\trecords.map((record) => JSON.stringify(record)).join(\"\\n\") +\n\t\t(records.length > 0 ? \"\\n\" : \"\")\n\t);\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n\tcreateDefaultTekMemoManifest,\n\tparseManifest as parseCoreManifest,\n\ttype TekMemoManifest,\n\tvalidateTekMemoManifest,\n} from \"tekmemo\";\nimport { CliProtocolError } from \"../errors/cli-errors\";\n\nexport type TekMemoCliManifest = TekMemoManifest;\n\nexport function createDefaultManifest(input?: {\n\tprojectId?: string;\n\tnow?: string;\n}): TekMemoCliManifest {\n\treturn createDefaultTekMemoManifest({\n\t\tprojectId: input?.projectId ?? `proj_${randomUUID()}`,\n\t\t...(input?.now !== undefined ? { now: () => input.now as string } : {}),\n\t});\n}\n\nexport function parseManifest(content: string): TekMemoCliManifest {\n\ttry {\n\t\treturn parseCoreManifest(content);\n\t} catch (error) {\n\t\tthrow new CliProtocolError(\n\t\t\t`manifest.json is invalid: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\nexport function validateManifest(value: unknown): TekMemoCliManifest {\n\ttry {\n\t\treturn validateTekMemoManifest(value);\n\t} catch (error) {\n\t\tthrow new CliProtocolError(\n\t\t\t`manifest.json is invalid: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport { TEKMEMO_PATHS } from \"./constants\";\nimport { parseJsonl } from \"./jsonl\";\nimport { parseManifest, type TekMemoCliManifest } from \"./manifest\";\n\nexport interface TekMemoInspection {\n\trootDir: string;\n\texists: boolean;\n\tmanifest?: TekMemoCliManifest;\n\tfiles: Array<{\n\t\tpath: string;\n\t\texists: boolean;\n\t\tbytes: number;\n\t\tlines?: number;\n\t\trecords?: number;\n\t}>;\n\tsummary: {\n\t\teventCount: number;\n\t\tconversationCount: number;\n\t\tchunkCount: number;\n\t\tgraphNodeCount: number;\n\t\tgraphEdgeCount: number;\n\t\tsnapshotCount: number;\n\t};\n}\n\nexport async function inspectTekMemo(\n\tfs: TekMemoFileSystem,\n): Promise<TekMemoInspection> {\n\tconst exists = await fs.exists(\".tekmemo\");\n\tconst manifestContent = await fs.readTextIfExists(TEKMEMO_PATHS.manifest);\n\tconst manifest =\n\t\tmanifestContent === undefined ? undefined : parseManifest(manifestContent);\n\n\tconst tracked = [\n\t\tTEKMEMO_PATHS.manifest,\n\t\tTEKMEMO_PATHS.coreMemory,\n\t\tTEKMEMO_PATHS.notesMemory,\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t\tTEKMEMO_PATHS.conversations,\n\t\tTEKMEMO_PATHS.chunks,\n\t\tTEKMEMO_PATHS.graphNodes,\n\t\tTEKMEMO_PATHS.graphEdges,\n\t\tTEKMEMO_PATHS.snapshots,\n\t];\n\n\tconst files: TekMemoInspection[\"files\"] = [];\n\tconst recordCounts: Record<string, number> = {};\n\n\tfor (const filePath of tracked) {\n\t\tconst content = await fs.readTextIfExists(filePath);\n\t\tconst isJsonl = filePath.endsWith(\".jsonl\");\n\n\t\tlet records = 0;\n\t\tif (content !== undefined && isJsonl) {\n\t\t\trecords = parseJsonl(content, { strict: false }).length;\n\t\t\trecordCounts[filePath] = records;\n\t\t}\n\n\t\tfiles.push({\n\t\t\tpath: filePath,\n\t\t\texists: content !== undefined,\n\t\t\tbytes: content ? Buffer.byteLength(content) : 0,\n\t\t\t...(content !== undefined\n\t\t\t\t? { lines: content.split(/\\r?\\n/).filter(Boolean).length }\n\t\t\t\t: {}),\n\t\t\t...(content !== undefined && isJsonl ? { records } : {}),\n\t\t});\n\t}\n\n\treturn {\n\t\trootDir: fs.rootDir,\n\t\texists,\n\t\t...(manifest ? { manifest } : {}),\n\t\tfiles,\n\t\tsummary: {\n\t\t\teventCount: recordCounts[TEKMEMO_PATHS.memoryEvents] ?? 0,\n\t\t\tconversationCount: recordCounts[TEKMEMO_PATHS.conversations] ?? 0,\n\t\t\tchunkCount: recordCounts[TEKMEMO_PATHS.chunks] ?? 0,\n\t\t\tgraphNodeCount: recordCounts[TEKMEMO_PATHS.graphNodes] ?? 0,\n\t\t\tgraphEdgeCount: recordCounts[TEKMEMO_PATHS.graphEdges] ?? 0,\n\t\t\tsnapshotCount: recordCounts[TEKMEMO_PATHS.snapshots] ?? 0,\n\t\t},\n\t};\n}\n","import type { AgentfsLikeClient } from \"@tekmemo/agentfs\";\nimport {\n\tcreateTekMemoAgentSession,\n\textractSessionMemory,\n} from \"@tekmemo/agentfs\";\nimport { createNodeFsMemoryStore } from \"@tekmemo/fs\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\n\nconst LATEST_AGENT_SESSION_PATH = `${TEKMEMO_PATHS.tmpDir}/agent-sessions/latest.json`;\n\n/**\n * Shared options for local AgentFS session commands.\n */\ninterface AgentCommandBaseOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n}\n\n/**\n * Options for starting an agent session.\n */\nexport interface AgentStartCommandOptions extends AgentCommandBaseOptions {\n\ttask: string;\n\tprojectId?: string | undefined;\n\tactorId?: string | undefined;\n\tsessionId?: string | undefined;\n}\n\n/**\n * Options for session lookup commands.\n */\nexport interface AgentSessionLookupOptions extends AgentCommandBaseOptions {\n\tsession?: string | undefined;\n}\n\n/**\n * Options for completing an agent session.\n */\nexport interface AgentCompleteCommandOptions extends AgentSessionLookupOptions {\n\textract?: boolean | undefined;\n\tcheckpointLabel?: string | undefined;\n}\n\n/**\n * Starts a local AgentFS-style session workspace.\n *\n * @param options - Command options.\n * @returns CLI exit code.\n */\nexport async function runAgentStartCommand(\n\toptions: AgentStartCommandOptions,\n): Promise<number> {\n\tconst client = createLocalAgentfsClient(options.fs);\n\tconst memory = createNodeFsMemoryStore({\n\t\trootDir: options.fs.rootDir,\n\t\tmissingFileBehavior: \"empty\",\n\t\tcreateRoot: true,\n\t});\n\tconst session = createTekMemoAgentSession({\n\t\tclient,\n\t\tmemory,\n\t\ttask: options.task,\n\t\tprojectId: options.projectId,\n\t\tactorId: options.actorId,\n\t\tsessionId: options.sessionId,\n\t});\n\n\tawait session.prepare();\n\tconst pointer = {\n\t\tsessionId: session.sessionId,\n\t\tprojectId: options.projectId ?? null,\n\t\troot: session.paths.root,\n\t\ttask: options.task,\n\t\tcreatedAt: new Date().toISOString(),\n\t\tpaths: session.paths,\n\t};\n\tawait options.fs.writeText(\n\t\tLATEST_AGENT_SESSION_PATH,\n\t\t`${JSON.stringify(pointer, null, 2)}\\n`,\n\t);\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"agent.start\", pointer);\n\t\treturn 0;\n\t}\n\n\toptions.output.success(`Started TekMemo agent session ${session.sessionId}`);\n\toptions.output.write(formatAgentInstructions(pointer));\n\treturn 0;\n}\n\n/**\n * Prints paths for a known agent session.\n *\n * @param options - Command options.\n * @returns CLI exit code.\n */\nexport async function runAgentPathsCommand(\n\toptions: AgentSessionLookupOptions,\n): Promise<number> {\n\tconst pointer = await readSessionPointer(options.fs, options.session);\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"agent.paths\", pointer);\n\t\treturn 0;\n\t}\n\toptions.output.write(formatAgentInstructions(pointer));\n\treturn 0;\n}\n\n/**\n * Extracts output files from an agent session.\n *\n * @param options - Command options.\n * @returns CLI exit code.\n */\nexport async function runAgentExtractCommand(\n\toptions: AgentSessionLookupOptions,\n): Promise<number> {\n\tconst pointer = await readSessionPointer(options.fs, options.session);\n\tconst extracted = await extractSessionMemory(\n\t\tcreateLocalAgentfsClient(options.fs),\n\t\tpointer.paths,\n\t);\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"agent.extract\", {\n\t\t\tsessionId: pointer.sessionId,\n\t\t\textracted,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`# TekMemo Agent Session ${pointer.sessionId}`,\n\t\t\t\"\",\n\t\t\t\"## Summary\",\n\t\t\textracted.summary || \"No summary written.\",\n\t\t\t\"\",\n\t\t\t\"## Durable Memory\",\n\t\t\textracted.durableMemory || \"No durable memory written.\",\n\t\t\t\"\",\n\t\t\t\"## Follow-ups\",\n\t\t\textracted.followUps || \"No follow-ups written.\",\n\t\t].join(\"\\n\"),\n\t);\n\treturn 0;\n}\n\n/**\n * Completes an agent session and optionally persists durable memory locally.\n *\n * @param options - Command options.\n * @returns CLI exit code.\n */\nexport async function runAgentCompleteCommand(\n\toptions: AgentCompleteCommandOptions,\n): Promise<number> {\n\tconst pointer = await readSessionPointer(options.fs, options.session);\n\tconst client = createLocalAgentfsClient(options.fs);\n\tconst memory = createNodeFsMemoryStore({\n\t\trootDir: options.fs.rootDir,\n\t\tmissingFileBehavior: \"empty\",\n\t\tcreateRoot: true,\n\t});\n\tconst session = createTekMemoAgentSession({\n\t\tclient,\n\t\tmemory,\n\t\ttask: pointer.task,\n\t\tprojectId: pointer.projectId ?? undefined,\n\t\tsessionId: pointer.sessionId,\n\t});\n\tconst result = await session.complete({\n\t\textractDurableMemory: options.extract ?? false,\n\t\tcheckpointLabel: options.checkpointLabel,\n\t});\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"agent.complete\", {\n\t\t\tsessionId: pointer.sessionId,\n\t\t\t...result,\n\t\t});\n\t\treturn 0;\n\t}\n\n\toptions.output.success(\n\t\t`Completed TekMemo agent session ${pointer.sessionId}`,\n\t);\n\tif (result.durableMemoryWritten) {\n\t\toptions.output.success(\"Persisted extracted durable memory to notes.\");\n\t}\n\toptions.output.write(\n\t\t`Summary: ${result.extracted.summary || \"No summary written.\"}`,\n\t);\n\treturn 0;\n}\n\n/**\n * Adapts the CLI filesystem to the AgentFS-like client contract.\n *\n * @param fs - CLI filesystem.\n * @returns AgentFS-like client.\n */\nfunction createLocalAgentfsClient(fs: TekMemoFileSystem): AgentfsLikeClient {\n\treturn {\n\t\treadText(path: string) {\n\t\t\treturn fs.readText(toRelativeAgentPath(path));\n\t\t},\n\t\twriteText(path: string, content: string) {\n\t\t\treturn fs.writeText(toRelativeAgentPath(path), content);\n\t\t},\n\t\tappendText(path: string, content: string) {\n\t\t\treturn fs.appendText(toRelativeAgentPath(path), content);\n\t\t},\n\t\texists(path: string) {\n\t\t\treturn fs.exists(toRelativeAgentPath(path));\n\t\t},\n\t\tsync: {\n\t\t\tpull: async () => {},\n\t\t\tpush: async () => {},\n\t\t\tcheckpoint: async () => {},\n\t\t},\n\t};\n}\n\n/**\n * Converts AgentFS absolute-ish paths into project-relative CLI paths.\n *\n * @param path - AgentFS path.\n * @returns Project-relative path.\n */\nfunction toRelativeAgentPath(path: string): string {\n\treturn path.replace(/^\\/+/, \"\");\n}\n\n/**\n * Reads a session pointer from `.tekmemo/tmp`.\n *\n * @param fs - CLI filesystem.\n * @param session - Session ID or latest.\n * @returns Session pointer.\n */\nasync function readSessionPointer(\n\tfs: TekMemoFileSystem,\n\tsession: string | undefined,\n): Promise<AgentSessionPointer> {\n\tconst latest = await fs.readText(LATEST_AGENT_SESSION_PATH);\n\tconst pointer = JSON.parse(latest) as AgentSessionPointer;\n\tif (!session || session === \"latest\" || session === pointer.sessionId) {\n\t\treturn pointer;\n\t}\n\tthrow new Error(\n\t\t`Unknown session \"${session}\". Only latest session ${pointer.sessionId} is tracked locally.`,\n\t);\n}\n\n/**\n * Formats agent-facing instructions for Codex, Claude Code, or any file-native agent.\n *\n * @param pointer - Session pointer.\n * @returns Markdown instructions.\n */\nfunction formatAgentInstructions(pointer: AgentSessionPointer): string {\n\treturn [\n\t\t\"\",\n\t\t\"## Agent Instructions\",\n\t\t`Session: ${pointer.sessionId}`,\n\t\t`Task: ${pointer.task}`,\n\t\t\"\",\n\t\t\"Read before editing:\",\n\t\t`- ${pointer.paths.context.core}`,\n\t\t`- ${pointer.paths.context.notes}`,\n\t\t\"\",\n\t\t\"Update during work:\",\n\t\t`- ${pointer.paths.working.plan}`,\n\t\t`- ${pointer.paths.working.commands}`,\n\t\t`- ${pointer.paths.working.errors}`,\n\t\t`- ${pointer.paths.working.changes}`,\n\t\t\"\",\n\t\t\"Write before finishing:\",\n\t\t`- ${pointer.paths.output.summary}`,\n\t\t`- ${pointer.paths.output.durableMemory}`,\n\t\t`- ${pointer.paths.output.followUps}`,\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n/**\n * Stored local pointer for the latest agent session.\n */\ninterface AgentSessionPointer {\n\tsessionId: string;\n\tprojectId: string | null;\n\troot: string;\n\ttask: string;\n\tcreatedAt: string;\n\tpaths: ReturnType<typeof createTekMemoAgentSession>[\"paths\"];\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\n\nexport interface ChunksCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tlimit?: number | undefined;\n\tstrict?: boolean | undefined;\n}\n\nexport async function runChunksCommand(\n\toptions: ChunksCommandOptions,\n): Promise<number> {\n\tconst content = await options.fs.readTextIfExists(TEKMEMO_PATHS.chunks);\n\tconst records = content\n\t\t? parseJsonl(content, { strict: options.strict ?? false })\n\t\t: [];\n\tconst selected =\n\t\toptions.limit && options.limit > 0\n\t\t\t? records.slice(-options.limit)\n\t\t\t: records;\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify(selected, null, 2));\n\t\treturn 0;\n\t}\n\n\tif (selected.length === 0) {\n\t\toptions.output.write(\"No chunk records found.\");\n\t\treturn 0;\n\t}\n\n\toptions.output.write(\n\t\tselected\n\t\t\t.map((record) => {\n\t\t\t\tconst id =\n\t\t\t\t\ttypeof record.value.id === \"string\"\n\t\t\t\t\t\t? record.value.id\n\t\t\t\t\t\t: typeof record.value.chunkId === \"string\"\n\t\t\t\t\t\t\t? record.value.chunkId\n\t\t\t\t\t\t\t: `line ${record.line}`;\n\t\t\t\tconst source =\n\t\t\t\t\ttypeof record.value.sourcePath === \"string\"\n\t\t\t\t\t\t? record.value.sourcePath\n\t\t\t\t\t\t: \"unknown source\";\n\t\t\t\tconst status =\n\t\t\t\t\ttypeof record.value.status === \"string\"\n\t\t\t\t\t\t? record.value.status\n\t\t\t\t\t\t: typeof record.value.indexStatus === \"string\"\n\t\t\t\t\t\t\t? record.value.indexStatus\n\t\t\t\t\t\t\t: \"unknown\";\n\t\t\t\treturn `${id} ${status} ${source}`;\n\t\t\t})\n\t\t\t.join(\"\\n\"),\n\t);\n\n\treturn 0;\n}\n","import fs from \"node:fs/promises\";\nimport { CliUsageError } from \"../errors/cli-errors\";\nimport { resolveInsideRoot } from \"../fs/paths\";\n\nexport interface ResolveContentInput {\n\trootDir: string;\n\tinline?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tstdinContent?: string | undefined;\n}\n\nexport async function resolveCommandContent(\n\tinput: ResolveContentInput,\n): Promise<string> {\n\tconst sources = [\n\t\tinput.inline !== undefined,\n\t\tinput.stdin === true,\n\t\tinput.file !== undefined,\n\t].filter(Boolean).length;\n\n\tif (sources === 0) {\n\t\tthrow new CliUsageError(\n\t\t\t\"Provide content as an argument, --stdin, or --file <path>.\",\n\t\t);\n\t}\n\tif (sources > 1) {\n\t\tthrow new CliUsageError(\n\t\t\t\"Use only one content source: argument, --stdin, or --file.\",\n\t\t);\n\t}\n\n\tlet content: string;\n\tif (input.inline !== undefined) {\n\t\tcontent = input.inline;\n\t} else if (input.file !== undefined) {\n\t\tconst path = resolveInsideRoot(input.rootDir, input.file);\n\t\tcontent = await fs.readFile(path, \"utf8\");\n\t} else {\n\t\tcontent = input.stdinContent ?? (await readStdin());\n\t}\n\n\tif (content.includes(\"\\0\"))\n\t\tthrow new CliUsageError(\"Content must not contain null bytes.\");\n\tif (content.trim().length === 0)\n\t\tthrow new CliUsageError(\"Content must not be empty.\");\n\treturn content.trimEnd();\n}\n\nasync function readStdin(): Promise<string> {\n\tconst chunks: Buffer[] = [];\n\tfor await (const chunk of process.stdin) {\n\t\tchunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n\t}\n\treturn Buffer.concat(chunks).toString(\"utf8\");\n}\n","import { CliUsageError } from \"../errors/cli-errors\";\n\nexport function parseMetadataJson(\n\tvalue?: string,\n): Record<string, unknown> | undefined {\n\tif (value === undefined || value.trim().length === 0) return undefined;\n\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(value);\n\t} catch (error) {\n\t\tthrow new CliUsageError(\n\t\t\t`metadata must be valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\n\tif (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n\t\tthrow new CliUsageError(\"metadata must be a JSON object.\");\n\t}\n\n\tassertJsonSerializable(parsed, \"metadata\");\n\treturn parsed as Record<string, unknown>;\n}\n\nexport function assertJsonSerializable(value: unknown, name = \"value\"): void {\n\ttry {\n\t\tJSON.stringify(value);\n\t} catch (error) {\n\t\tthrow new CliUsageError(`${name} must be JSON serializable.`, {\n\t\t\tcause: error,\n\t\t});\n\t}\n}\n","import { CliUsageError } from \"../errors/cli-errors\";\n\nexport function parseNonNegativeInteger(value: string, name = \"value\"): number {\n\tconst parsed = Number.parseInt(value, 10);\n\tif (\n\t\t!Number.isFinite(parsed) ||\n\t\tparsed < 0 ||\n\t\tString(parsed) !== String(value).trim()\n\t) {\n\t\tthrow new CliUsageError(`${name} must be a non-negative integer.`);\n\t}\n\treturn parsed;\n}\n\nexport function parsePositiveInteger(value: string, name = \"value\"): number {\n\tconst parsed = parseNonNegativeInteger(value, name);\n\tif (parsed === 0) throw new CliUsageError(`${name} must be greater than 0.`);\n\treturn parsed;\n}\n\nexport function parseConfidence(value: string): number {\n\tconst parsed = Number.parseFloat(value);\n\tif (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {\n\t\tthrow new CliUsageError(\"confidence must be a number between 0 and 1.\");\n\t}\n\treturn parsed;\n}\n","export interface SecretScanFinding {\n\tkind: string;\n\tindex: number;\n\tpreview: string;\n}\n\nconst SECRET_PATTERNS: Array<{ kind: string; pattern: RegExp }> = [\n\t{\n\t\tkind: \"env_assignment_secret\",\n\t\tpattern:\n\t\t\t/\\b[A-Z0-9_]*(?:API[_-]?KEY|SECRET|TOKEN|PASSWORD|PRIVATE[_-]?KEY)[A-Z0-9_]*\\s*=\\s*[^\\s]+/gi,\n\t},\n\t{ kind: \"openai_key\", pattern: /\\bsk-[A-Za-z0-9_-]{20,}\\b/g },\n\t{ kind: \"github_token\", pattern: /\\bgh[pousr]_[A-Za-z0-9_]{20,}\\b/g },\n\t{\n\t\tkind: \"jwt\",\n\t\tpattern: /\\beyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\b/g,\n\t},\n\t{ kind: \"pem_private_key\", pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----/g },\n];\n\nexport function scanForSecrets(content: string): SecretScanFinding[] {\n\tconst findings: SecretScanFinding[] = [];\n\tfor (const { kind, pattern } of SECRET_PATTERNS) {\n\t\tpattern.lastIndex = 0;\n\t\tlet match = pattern.exec(content);\n\t\twhile (match !== null) {\n\t\t\tfindings.push({\n\t\t\t\tkind,\n\t\t\t\tindex: match.index,\n\t\t\t\tpreview: redactSecretPreview(match[0]),\n\t\t\t});\n\t\t\tmatch = pattern.exec(content);\n\t\t}\n\t}\n\treturn findings;\n}\n\nexport function redactSecretPreview(value: string): string {\n\tconst trimmed = value.trim();\n\tif (trimmed.length <= 8) return \"[redacted]\";\n\treturn `${trimmed.slice(0, 4)}…${trimmed.slice(-4)}`;\n}\n","import type {\n\tCreateNoteInput,\n\tJsonObject,\n\tMemoryKind,\n\tRecallFallbackMode,\n\tRecallIndexMode,\n\tRecallStrategy,\n\tSyncConflictResolution,\n\tSyncEventInput,\n\tTekMemoCloudClient,\n} from \"@tekmemo/cloud-client\";\nimport { type CloudConnectionOptions, createCliCloudClient } from \"../cloud\";\nimport { CliUsageError } from \"../errors/cli-errors\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { resolveCommandContent } from \"../utils/content\";\nimport { parseMetadataJson } from \"../utils/metadata\";\nimport { parseConfidence } from \"../utils/numbers\";\nimport { scanForSecrets } from \"../utils/secrets\";\n\nexport interface CloudCommandBaseOptions extends CloudConnectionOptions {\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\trootDir?: string | undefined;\n\tstdinContent?: string | undefined;\n}\n\nexport interface CloudHealthCommandOptions extends CloudCommandBaseOptions {}\n\nexport interface CloudContextCommandOptions extends CloudCommandBaseOptions {\n\tquery: string;\n\tlimit?: string | number | undefined;\n\tmaxBytes?: string | number | undefined;\n\tincludeCore?: boolean | undefined;\n\tincludeNotes?: boolean | undefined;\n\tincludeRecent?: boolean | undefined;\n}\n\nexport interface CloudRecallCommandOptions extends CloudCommandBaseOptions {\n\tquery: string;\n\tlimit?: string | number | undefined;\n\tstrategy?: string | undefined;\n\tfallback?: string | undefined;\n\trerank?: boolean | undefined;\n}\n\nexport interface CloudRecallIndexCommandOptions\n\textends CloudCommandBaseOptions {\n\tmode?: string | undefined;\n\tforce?: boolean | undefined;\n}\n\nexport interface CloudRememberCommandOptions extends CloudCommandBaseOptions {\n\tcontent?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tkind?: string | undefined;\n\ttitle?: string | undefined;\n\ttags?: string[] | undefined;\n\tconfidence?: string | number | undefined;\n\tsource?: string | undefined;\n\tmetadata?: string | undefined;\n\tallowSecrets?: boolean | undefined;\n}\n\nexport interface CloudReadCommandOptions extends CloudCommandBaseOptions {\n\ttarget: \"core\" | \"notes\";\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudUpdateCoreCommandOptions extends CloudCommandBaseOptions {\n\tcontent?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tallowSecrets?: boolean | undefined;\n}\n\nexport interface CloudRecentCommandOptions extends CloudCommandBaseOptions {\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudValidateCommandOptions extends CloudCommandBaseOptions {\n\tstrict?: boolean | undefined;\n}\n\nexport interface CloudSnapshotCommandOptions extends CloudCommandBaseOptions {\n\tlabel?: string | undefined;\n\ttype?: string | undefined;\n}\n\nexport interface CloudSyncStatusCommandOptions extends CloudCommandBaseOptions {\n\tclientId?: string | undefined;\n}\n\nexport interface CloudSyncPullCommandOptions extends CloudCommandBaseOptions {\n\tclientId: string;\n\tsinceServerVersion?: string | number | undefined;\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudSyncPushCommandOptions extends CloudCommandBaseOptions {\n\tclientId: string;\n\teventsJson?: string | undefined;\n\tfile?: string | undefined;\n\tstdin?: boolean | undefined;\n\tcheckpointJson?: string | undefined;\n}\n\nexport interface CloudSyncResolveCommandOptions\n\textends CloudCommandBaseOptions {\n\tconflictId: string;\n\tresolution: string;\n\tcontentJson?: string | undefined;\n}\n\nexport interface CloudReadinessCommandOptions extends CloudCommandBaseOptions {}\n\nexport interface CloudContextComposeCommandOptions\n\textends CloudCommandBaseOptions {\n\tquery: string;\n\ttopK?: string | number | undefined;\n\tstrategy?: string | undefined;\n\trerank?: boolean | undefined;\n\tincludeCoreMemory?: boolean | undefined;\n\tincludeRecallResults?: boolean | undefined;\n\tincludeGraphContext?: boolean | undefined;\n}\n\nexport interface CloudGraphListNodesCommandOptions\n\textends CloudCommandBaseOptions {\n\tlimit?: string | number | undefined;\n\tcursor?: string | undefined;\n\tstatus?: string | undefined;\n}\n\nexport interface CloudGraphCreateNodeCommandOptions\n\textends CloudCommandBaseOptions {\n\tnodeId: string;\n\ttype: string;\n\tlabel: string;\n\tsummary?: string | undefined;\n\taliases?: string[] | undefined;\n\tmetadataJson?: string | undefined;\n}\n\nexport interface CloudGraphListEdgesCommandOptions\n\textends CloudCommandBaseOptions {\n\tlimit?: string | number | undefined;\n\tcursor?: string | undefined;\n\tstatus?: string | undefined;\n}\n\nexport interface CloudGraphCreateEdgeCommandOptions\n\textends CloudCommandBaseOptions {\n\tedgeId?: string | undefined;\n\tfromNodeId: string;\n\ttoNodeId: string;\n\ttype: string;\n\tdirected?: boolean | undefined;\n\tweight?: string | number | undefined;\n\tmetadataJson?: string | undefined;\n}\n\nexport interface CloudGraphNeighborsCommandOptions\n\textends CloudCommandBaseOptions {\n\tnodeId: string;\n\tdirection?: string | undefined;\n\tdepth?: string | number | undefined;\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudGraphPathCommandOptions extends CloudCommandBaseOptions {\n\tfromNodeId: string;\n\ttoNodeId: string;\n\tmaxDepth?: string | number | undefined;\n}\n\nexport interface CloudExtractionRunCommandOptions\n\textends CloudCommandBaseOptions {\n\tmode?: string | undefined;\n\tforce?: boolean | undefined;\n}\n\nexport interface CloudExtractionJobsCommandOptions\n\textends CloudCommandBaseOptions {\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudEvalsRunCommandOptions extends CloudCommandBaseOptions {\n\tfixtureIds?: string | undefined;\n\titerations?: string | number | undefined;\n\tthresholdsJson?: string | undefined;\n}\n\nexport interface CloudBenchmarksRunCommandOptions\n\textends CloudCommandBaseOptions {\n\tfixtureIds?: string | undefined;\n\titerations?: string | number | undefined;\n\tthresholdsJson?: string | undefined;\n}\n\nexport interface CloudExportsCreateCommandOptions\n\textends CloudCommandBaseOptions {\n\tlabel?: string | undefined;\n}\n\nexport interface CloudExportsDownloadCommandOptions\n\textends CloudCommandBaseOptions {\n\texportId: string;\n}\n\nexport interface CloudSnapshotsCreateCommandOptions\n\textends CloudCommandBaseOptions {\n\tlabel?: string | undefined;\n\ttrigger?: string | undefined;\n}\n\nexport interface CloudSnapshotsDownloadCommandOptions\n\textends CloudCommandBaseOptions {\n\tsnapshotId: string;\n}\n\nexport interface CloudProvidersListCommandOptions\n\textends CloudCommandBaseOptions {}\n\nexport interface CloudProvidersCreateCommandOptions\n\textends CloudCommandBaseOptions {\n\tprovider: string;\n\tkeyName: string;\n\tsecret: string;\n\trestUrl?: string | undefined;\n\tembeddingModel?: string | undefined;\n\trerankModel?: string | undefined;\n}\n\nexport interface CloudProvidersTestCommandOptions\n\textends CloudCommandBaseOptions {\n\tcredentialId: string;\n}\n\nconst MEMORY_KINDS = new Set<MemoryKind>([\n\t\"decision\",\n\t\"constraint\",\n\t\"goal\",\n\t\"preference\",\n\t\"reference\",\n\t\"summary\",\n\t\"note\",\n]);\n\nconst RECALL_STRATEGIES = new Set<RecallStrategy>([\n\t\"local\",\n\t\"vector\",\n\t\"hybrid\",\n]);\nconst RECALL_FALLBACKS = new Set<RecallFallbackMode>([\"none\", \"local\"]);\nconst INDEX_MODES = new Set<RecallIndexMode>([\n\t\"all\",\n\t\"changed\",\n\t\"core\",\n\t\"notes\",\n]);\nconst CONFLICT_RESOLUTIONS = new Set<SyncConflictResolution>([\n\t\"keep_cloud\",\n\t\"use_client\",\n\t\"ignore\",\n]);\n\nexport async function runCloudHealthCommand(\n\toptions: CloudHealthCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options, true, true);\n\tconst result = await client.health();\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.health\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t\"TekMemo Cloud\",\n\t\t\t`ok: ${result.ok}`,\n\t\t\t`name: ${result.name ?? \"unknown\"}`,\n\t\t\t`version: ${result.version ?? \"unknown\"}`,\n\t\t\t`capabilities: ${(result.capabilities ?? []).join(\", \") || \"none\"}`,\n\t\t\t...(result.warnings?.length\n\t\t\t\t? result.warnings.map((warning) => `warning: ${warning}`)\n\t\t\t\t: []),\n\t\t].join(\"\\n\"),\n\t);\n\treturn result.ok ? 0 : 1;\n}\n\nexport async function runCloudContextCommand(\n\toptions: CloudContextCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst topK = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst maxBytes = normalizeOptionalPositiveInteger(\n\t\toptions.maxBytes,\n\t\t\"max bytes\",\n\t);\n\tconst includeCore = options.includeCore !== false;\n\tconst includeNotes = options.includeNotes !== false;\n\tconst includeRecent = options.includeRecent !== false;\n\n\tconst sections: string[] = [];\n\tconst data: Record<string, unknown> = {\n\t\tquery: options.query,\n\t\tsections: [] as unknown[],\n\t};\n\n\tif (includeCore) {\n\t\tconst core = await client.memory.readCore();\n\t\tsections.push(`# Core Memory\\n\\n${core.content.trim()}`);\n\t\t(data.sections as unknown[]).push({ type: \"core\", content: core.content });\n\t}\n\n\tif (includeNotes || includeRecent) {\n\t\tconst notes = await client.memory.listNotes({ limit: topK ?? 10 });\n\t\tconst renderedNotes = notes.items.map(renderNote).join(\"\\n\\n\");\n\t\tsections.push(`# Notes\\n\\n${renderedNotes || \"No cloud notes found.\"}`);\n\t\t(data.sections as unknown[]).push({\n\t\t\ttype: \"notes\",\n\t\t\titems: notes.items,\n\t\t\tnextCursor: notes.nextCursor,\n\t\t});\n\t}\n\n\tconst recall = await client.recall.query({\n\t\tquery: options.query,\n\t\t...(topK !== undefined ? { topK } : {}),\n\t\tstrategy: \"hybrid\",\n\t\tfallback: \"local\",\n\t\trerank: true,\n\t});\n\tsections.push(`# Recall\\n\\n${renderRecallHits(recall.items)}`);\n\t(data.sections as unknown[]).push({ type: \"recall\", result: recall });\n\n\tconst text = truncateText(\n\t\tsections.filter(Boolean).join(\"\\n\\n---\\n\\n\"),\n\t\tmaxBytes,\n\t);\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.context\", {\n\t\t\t...data,\n\t\t\ttext,\n\t\t\ttruncated: maxBytes !== undefined && text.length >= maxBytes,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.write(text.trimEnd());\n\treturn 0;\n}\n\nexport async function runCloudRecallCommand(\n\toptions: CloudRecallCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst topK = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst strategy = normalizeRecallStrategy(options.strategy);\n\tconst fallback = normalizeRecallFallback(options.fallback);\n\tconst result = await client.recall.query({\n\t\tquery: options.query,\n\t\t...(topK !== undefined ? { topK } : {}),\n\t\t...(strategy !== undefined ? { strategy } : {}),\n\t\t...(fallback !== undefined ? { fallback } : {}),\n\t\t...(options.rerank !== undefined ? { rerank: options.rerank } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.recall\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(renderRecallHits(result.items));\n\treturn 0;\n}\n\nexport async function runCloudRecallIndexCommand(\n\toptions: CloudRecallIndexCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst mode = normalizeIndexMode(options.mode);\n\tconst result = await client.recall.index({\n\t\t...(mode !== undefined ? { mode } : {}),\n\t\t...(options.force !== undefined ? { force: options.force } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.recall.index\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(\n\t\t`Recall indexing ${result.status}${result.jobId ? ` job=${result.jobId}` : \"\"}`,\n\t);\n\tif (result.indexed !== undefined)\n\t\toptions.output.write(`indexed: ${result.indexed}`);\n\tfor (const warning of result.warnings ?? [])\n\t\toptions.output.warn(`warning: ${warning}`);\n\treturn 0;\n}\n\nexport async function runCloudRememberCommand(\n\toptions: CloudRememberCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst content = await resolveCommandContent({\n\t\trootDir: options.rootDir ?? process.cwd(),\n\t\tinline: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t});\n\tconst findings = scanForSecrets(content);\n\tif (findings.length > 0 && !options.allowSecrets) {\n\t\tconst data = { stored: false, secretFindings: findings };\n\t\tif (options.json) printJsonEnvelope(options.output, \"cloud.remember\", data);\n\t\telse\n\t\t\toptions.output.error(\n\t\t\t\t`Refusing to store possible secret (${findings[0]?.kind}). Use --allow-secrets only after review.`,\n\t\t\t);\n\t\treturn 1;\n\t}\n\n\tconst metadata = parseMetadataJson(options.metadata);\n\tconst kind = normalizeMemoryKind(options.kind);\n\tconst note: CreateNoteInput = {\n\t\tcontent,\n\t\tkind,\n\t\t...(options.title ? { title: options.title } : {}),\n\t\t...(options.tags?.length\n\t\t\t? { tags: options.tags.map((tag) => tag.trim()).filter(Boolean) }\n\t\t\t: {}),\n\t\t...(options.source ? { source: options.source } : {}),\n\t\t...(options.confidence !== undefined\n\t\t\t? { confidence: normalizeConfidence(options.confidence) }\n\t\t\t: {}),\n\t\t...(metadata ? { metadata: metadata as JsonObject } : {}),\n\t};\n\tconst result = await client.memory.createNote(note);\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.remember\", {\n\t\t\t...result,\n\t\t\tsecretFindings: findings,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.success(`Stored cloud memory ${result.id}`);\n\treturn 0;\n}\n\nexport async function runCloudReadCommand(\n\toptions: CloudReadCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tif (options.target === \"core\") {\n\t\tconst result = await client.memory.readCore();\n\t\tif (options.json)\n\t\t\tprintJsonEnvelope(options.output, \"cloud.read\", {\n\t\t\t\ttarget: \"core\",\n\t\t\t\t...result,\n\t\t\t});\n\t\telse options.output.write(result.content.trimEnd());\n\t\treturn 0;\n\t}\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.memory.listNotes({\n\t\t...(limit !== undefined ? { limit } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.read\", {\n\t\t\ttarget: \"notes\",\n\t\t\t...result,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult.items.map(renderNote).join(\"\\n\\n\") || \"No cloud notes found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudUpdateCoreCommand(\n\toptions: CloudUpdateCoreCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst content = await resolveCommandContent({\n\t\trootDir: options.rootDir ?? process.cwd(),\n\t\tinline: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t});\n\tconst findings = scanForSecrets(content);\n\tif (findings.length > 0 && !options.allowSecrets) {\n\t\tconst data = { updated: false, secretFindings: findings };\n\t\tif (options.json)\n\t\t\tprintJsonEnvelope(options.output, \"cloud.update-core\", data);\n\t\telse\n\t\t\toptions.output.error(\n\t\t\t\t`Refusing to store possible secret (${findings[0]?.kind}). Use --allow-secrets only after review.`,\n\t\t\t);\n\t\treturn 1;\n\t}\n\tconst result = await client.memory.updateCore({ content });\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.update-core\", {\n\t\t\t...result,\n\t\t\tsecretFindings: findings,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.success(\"Updated cloud core memory.\");\n\treturn 0;\n}\n\nexport async function runCloudRecentCommand(\n\toptions: CloudRecentCommandOptions,\n): Promise<number> {\n\treturn runCloudReadCommand({ ...options, target: \"notes\" });\n}\n\nexport async function runCloudValidateCommand(\n\toptions: CloudValidateCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst errors: string[] = [];\n\tconst warnings: string[] = [];\n\tlet healthOk = false;\n\ttry {\n\t\tconst health = await client.health();\n\t\thealthOk = health.ok;\n\t\tfor (const warning of health.warnings ?? []) warnings.push(warning);\n\t\tif (!health.ok) errors.push(\"Cloud health check returned ok=false.\");\n\t} catch (error) {\n\t\terrors.push(\n\t\t\t`health: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\ttry {\n\t\tawait client.memory.readCore();\n\t} catch (error) {\n\t\terrors.push(\n\t\t\t`memory/core: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\tif (options.strict) {\n\t\ttry {\n\t\t\tawait client.memory.listNotes({ limit: 1 });\n\t\t} catch (error) {\n\t\t\terrors.push(\n\t\t\t\t`memory/notes: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t}\n\tconst result = { ok: healthOk && errors.length === 0, warnings, errors };\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.validate\", result);\n\t\treturn result.ok ? 0 : 1;\n\t}\n\tif (result.ok) options.output.success(\"Cloud memory is valid.\");\n\telse options.output.error(\"Cloud memory validation failed.\");\n\tfor (const warning of warnings) options.output.warn(`warning: ${warning}`);\n\tfor (const error of errors) options.output.error(`error: ${error}`);\n\treturn result.ok ? 0 : 1;\n}\n\nexport async function runCloudSnapshotCommand(\n\toptions: CloudSnapshotCommandOptions,\n): Promise<number> {\n\tconst data = {\n\t\tcreated: false,\n\t\treason: \"cloud_snapshots_not_available\",\n\t\tmessage:\n\t\t\t\"Cloud snapshots/exports are planned for the R2 milestone and are not exposed by the current project-scoped Cloud API.\",\n\t\tlabel: options.label ?? \"manual\",\n\t\ttype: options.type ?? \"manual\",\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"cloud.snapshot\", data);\n\telse options.output.error(data.message);\n\treturn 2;\n}\n\nexport async function runCloudSyncStatusCommand(\n\toptions: CloudSyncStatusCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.sync.status({\n\t\t...(options.clientId ? { clientId: options.clientId } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.sync.status\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`serverVersion: ${result.serverVersion}`,\n\t\t\t`openConflicts: ${result.openConflicts}`,\n\t\t\t`clients: ${result.clients.length}`,\n\t\t\t...(result.recentEvents !== undefined\n\t\t\t\t? [`recentEvents: ${result.recentEvents}`]\n\t\t\t\t: []),\n\t\t].join(\"\\n\"),\n\t);\n\treturn 0;\n}\n\nexport async function runCloudSyncPullCommand(\n\toptions: CloudSyncPullCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst sinceServerVersion = normalizeOptionalNonNegativeInteger(\n\t\toptions.sinceServerVersion,\n\t\t\"since server version\",\n\t);\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.sync.pull({\n\t\tclientId: options.clientId,\n\t\t...(sinceServerVersion !== undefined ? { sinceServerVersion } : {}),\n\t\t...(limit !== undefined ? { limit } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.sync.pull\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t`Pulled ${result.events.length} event(s). serverVersion=${result.serverVersion}`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudSyncPushCommand(\n\toptions: CloudSyncPushCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst payload = await resolveJsonPayload({\n\t\trootDir: options.rootDir ?? process.cwd(),\n\t\tinline: options.eventsJson,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t\tfieldName: \"events JSON\",\n\t});\n\tconst events = extractSyncEvents(payload);\n\tconst checkpoint = options.checkpointJson\n\t\t? parseJsonObject(options.checkpointJson, \"checkpoint JSON\")\n\t\t: extractCheckpoint(payload);\n\tconst result = await client.sync.push({\n\t\tclientId: options.clientId,\n\t\tevents,\n\t\t...(checkpoint !== undefined ? { checkpoint } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.sync.push\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`accepted: ${result.accepted.length}`,\n\t\t\t`duplicates: ${result.duplicates.length}`,\n\t\t\t`rejected: ${result.rejected.length}`,\n\t\t\t`conflicts: ${result.conflicts.length}`,\n\t\t\t`serverVersion: ${result.serverVersion}`,\n\t\t].join(\"\\n\"),\n\t);\n\treturn result.rejected.length === 0 && result.conflicts.length === 0 ? 0 : 1;\n}\n\nexport async function runCloudSyncResolveCommand(\n\toptions: CloudSyncResolveCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst resolution = normalizeConflictResolution(options.resolution);\n\tconst content = options.contentJson\n\t\t? parseJsonObject(options.contentJson, \"content JSON\")\n\t\t: undefined;\n\tconst result = await client.sync.resolveConflict({\n\t\tconflictId: options.conflictId,\n\t\tresolution,\n\t\t...(content !== undefined ? { content } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.sync.resolve\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Resolved conflict ${result.conflictId}`);\n\tif (result.serverVersion !== undefined)\n\t\toptions.output.write(`serverVersion: ${result.serverVersion}`);\n\treturn result.resolved ? 0 : 1;\n}\n\nexport async function runCloudReadinessCommand(\n\toptions: CloudReadinessCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options, true, true);\n\tconst result = await client.readiness();\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.readiness\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`ok: ${result.ok}`,\n\t\t\t`name: ${result.name ?? \"unknown\"}`,\n\t\t\t`version: ${result.version ?? \"unknown\"}`,\n\t\t\t`capabilities: ${(result.capabilities ?? []).join(\", \") || \"none\"}`,\n\t\t\t...(result.warnings?.length\n\t\t\t\t? result.warnings.map((warning) => `warning: ${warning}`)\n\t\t\t\t: []),\n\t\t].join(\"\\n\"),\n\t);\n\treturn result.ok ? 0 : 1;\n}\n\nexport async function runCloudContextComposeCommand(\n\toptions: CloudContextComposeCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst topK = normalizeOptionalPositiveInteger(options.topK, \"topK\");\n\tconst result = await client.context.compose({\n\t\tquery: options.query,\n\t\t...(topK !== undefined ? { topK } : {}),\n\t\t...(options.strategy !== undefined\n\t\t\t? { strategy: options.strategy as \"auto\" | \"vector\" | \"local\" }\n\t\t\t: {}),\n\t\t...(options.rerank !== undefined ? { rerank: options.rerank } : {}),\n\t\t...(options.includeCoreMemory !== undefined\n\t\t\t? { includeCoreMemory: options.includeCoreMemory }\n\t\t\t: {}),\n\t\t...(options.includeRecallResults !== undefined\n\t\t\t? { includeRecallResults: options.includeRecallResults }\n\t\t\t: {}),\n\t\t...(options.includeGraphContext !== undefined\n\t\t\t? { includeGraphContext: options.includeGraphContext }\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.context.compose\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(result.context);\n\treturn 0;\n}\n\nexport async function runCloudGraphListNodesCommand(\n\toptions: CloudGraphListNodesCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.graph.listNodes({\n\t\t...(limit !== undefined ? { limit } : {}),\n\t\t...(options.cursor ? { cursor: options.cursor } : {}),\n\t\t...(options.status\n\t\t\t? {\n\t\t\t\t\tstatus: options.status as\n\t\t\t\t\t\t| \"active\"\n\t\t\t\t\t\t| \"deprecated\"\n\t\t\t\t\t\t| \"conflicted\"\n\t\t\t\t\t\t| \"deleted\",\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.list-nodes\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult.items\n\t\t\t.map((node) => `Node: ${node.nodeId} - ${node.label}`)\n\t\t\t.join(\"\\n\") || \"No nodes found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudGraphCreateNodeCommand(\n\toptions: CloudGraphCreateNodeCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst metadata = options.metadataJson\n\t\t? parseJsonObject(options.metadataJson, \"metadata JSON\")\n\t\t: undefined;\n\tconst result = await client.graph.createNode({\n\t\tnodeId: options.nodeId,\n\t\ttype: options.type,\n\t\tlabel: options.label,\n\t\t...(options.summary ? { summary: options.summary } : {}),\n\t\t...(options.aliases ? { aliases: options.aliases } : {}),\n\t\t...(metadata ? { metadata } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.create-node\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created node ${result.nodeId}`);\n\treturn 0;\n}\n\nexport async function runCloudGraphListEdgesCommand(\n\toptions: CloudGraphListEdgesCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.graph.listEdges({\n\t\t...(limit !== undefined ? { limit } : {}),\n\t\t...(options.cursor ? { cursor: options.cursor } : {}),\n\t\t...(options.status\n\t\t\t? {\n\t\t\t\t\tstatus: options.status as\n\t\t\t\t\t\t| \"active\"\n\t\t\t\t\t\t| \"deprecated\"\n\t\t\t\t\t\t| \"conflicted\"\n\t\t\t\t\t\t| \"deleted\",\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.list-edges\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult.items\n\t\t\t.map(\n\t\t\t\t(edge) =>\n\t\t\t\t\t`Edge: ${edge.edgeId ?? \"(new)\"} - ${edge.fromNodeId} -> ${edge.toNodeId}`,\n\t\t\t)\n\t\t\t.join(\"\\n\") || \"No edges found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudGraphCreateEdgeCommand(\n\toptions: CloudGraphCreateEdgeCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst metadata = options.metadataJson\n\t\t? parseJsonObject(options.metadataJson, \"metadata JSON\")\n\t\t: undefined;\n\tconst weight =\n\t\toptions.weight !== undefined\n\t\t\t? parseFloat(String(options.weight))\n\t\t\t: undefined;\n\tconst result = await client.graph.createEdge({\n\t\t...(options.edgeId ? { edgeId: options.edgeId } : {}),\n\t\tfromNodeId: options.fromNodeId,\n\t\ttoNodeId: options.toNodeId,\n\t\ttype: options.type,\n\t\t...(options.directed !== undefined ? { directed: options.directed } : {}),\n\t\t...(weight !== undefined ? { weight } : {}),\n\t\t...(metadata ? { metadata } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.create-edge\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created edge ${result.edgeId ?? \"(new)\"}`);\n\treturn 0;\n}\n\nexport async function runCloudGraphNeighborsCommand(\n\toptions: CloudGraphNeighborsCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst depth =\n\t\toptions.depth !== undefined\n\t\t\t? parseInt(String(options.depth), 10)\n\t\t\t: undefined;\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.graph.neighbors({\n\t\tnodeId: options.nodeId,\n\t\t...(options.direction\n\t\t\t? { direction: options.direction as \"in\" | \"out\" | \"both\" }\n\t\t\t: {}),\n\t\t...(depth !== undefined ? { depth } : {}),\n\t\t...(limit !== undefined ? { limit } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.neighbors\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t`Nodes: ${result.nodes.length}, Edges: ${result.edges.length}`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudGraphPathCommand(\n\toptions: CloudGraphPathCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst maxDepth =\n\t\toptions.maxDepth !== undefined\n\t\t\t? parseInt(String(options.maxDepth), 10)\n\t\t\t: undefined;\n\tconst result = await client.graph.path({\n\t\tfromNodeId: options.fromNodeId,\n\t\ttoNodeId: options.toNodeId,\n\t\t...(maxDepth !== undefined ? { maxDepth } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.path\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t`Nodes: ${result.nodes.length}, Edges: ${result.edges.length}`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudExtractionRunCommand(\n\toptions: CloudExtractionRunCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.extraction.run({\n\t\t...(options.mode\n\t\t\t? {\n\t\t\t\t\tmode: options.mode as\n\t\t\t\t\t\t| \"full\"\n\t\t\t\t\t\t| \"core\"\n\t\t\t\t\t\t| \"notes\"\n\t\t\t\t\t\t| \"sync\"\n\t\t\t\t\t\t| \"connectors\",\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(options.force !== undefined ? { force: options.force } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.extraction.run\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(\n\t\t`Extraction ${result.status}${result.jobId ? ` job=${result.jobId}` : \"\"}`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudExtractionJobsCommand(\n\toptions: CloudExtractionJobsCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.extraction.jobs({\n\t\t...(limit !== undefined ? { limit } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.extraction.jobs\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult.items.map((job) => `Job: ${job.jobId} - ${job.status}`).join(\"\\n\") ||\n\t\t\t\"No jobs found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudEvalsRunCommand(\n\toptions: CloudEvalsRunCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.evals.run({\n\t\t...(options.fixtureIds\n\t\t\t? { fixtureIds: options.fixtureIds.split(\",\").map((s) => s.trim()) }\n\t\t\t: {}),\n\t\t...(options.iterations !== undefined\n\t\t\t? { iterations: parseInt(String(options.iterations), 10) }\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.evals.run\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Eval pass rate: ${result.passRate}`);\n\treturn 0;\n}\n\nexport async function runCloudBenchmarksRunCommand(\n\toptions: CloudBenchmarksRunCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.benchmarks.run({\n\t\t...(options.fixtureIds\n\t\t\t? { fixtureIds: options.fixtureIds.split(\",\").map((s) => s.trim()) }\n\t\t\t: {}),\n\t\t...(options.iterations !== undefined\n\t\t\t? { iterations: parseInt(String(options.iterations), 10) }\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.benchmarks.run\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(\n\t\t`Benchmark pass rate: ${result.passRate}, avg latency: ${result.avgLatencyMs ?? \"N/A\"}ms`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudExportsCreateCommand(\n\toptions: CloudExportsCreateCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.exports.create({\n\t\t...(options.label ? { label: options.label } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.exports.create\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created export ${result.exportId}`);\n\treturn 0;\n}\n\nexport async function runCloudExportsDownloadCommand(\n\toptions: CloudExportsDownloadCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.exports.downloadUrl({\n\t\texportId: options.exportId,\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.exports.download\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(`Download URL: ${result.downloadUrl}`);\n\treturn 0;\n}\n\nexport async function runCloudSnapshotsCreateCommand(\n\toptions: CloudSnapshotsCreateCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.snapshots.create({\n\t\t...(options.label ? { label: options.label } : {}),\n\t\t...(options.trigger\n\t\t\t? { trigger: options.trigger as \"manual\" | \"sync\" | \"system\" }\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.snapshots.create\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created snapshot ${result.snapshotId}`);\n\treturn 0;\n}\n\nexport async function runCloudSnapshotsDownloadCommand(\n\toptions: CloudSnapshotsDownloadCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.snapshots.downloadUrl({\n\t\tsnapshotId: options.snapshotId,\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.snapshots.download\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(`Download URL: ${result.downloadUrl}`);\n\treturn 0;\n}\n\nexport async function runCloudProvidersListCommand(\n\toptions: CloudProvidersListCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.providers.list();\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.providers.list\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult\n\t\t\t.map((cred) => `Provider: ${cred.provider} - ${cred.keyName}`)\n\t\t\t.join(\"\\n\") || \"No providers found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudProvidersCreateCommand(\n\toptions: CloudProvidersCreateCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.providers.create({\n\t\tprovider: options.provider as \"voyageai\" | \"openai\" | \"upstash-vector\",\n\t\tkeyName: options.keyName,\n\t\tsecret: options.secret,\n\t\t...(options.restUrl ? { restUrl: options.restUrl } : {}),\n\t\t...(options.embeddingModel\n\t\t\t? { embeddingModel: options.embeddingModel }\n\t\t\t: {}),\n\t\t...(options.rerankModel ? { rerankModel: options.rerankModel } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.providers.create\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created provider credential ${result.credentialId}`);\n\treturn 0;\n}\n\nexport async function runCloudProvidersTestCommand(\n\toptions: CloudProvidersTestCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.providers.test({\n\t\tcredentialId: options.credentialId,\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.providers.test\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t`Test result: ${result.ok ? \"OK\" : \"Failed\"}${result.message ? ` - ${result.message}` : \"\"}`,\n\t);\n\treturn result.ok ? 0 : 1;\n}\n\nfunction createCloudClient(\n\toptions: CloudCommandBaseOptions,\n\tallowMissingApiKey = false,\n\tallowMissingProjectId = false,\n): TekMemoCloudClient {\n\treturn createCliCloudClient({\n\t\tcloudUrl: options.cloudUrl,\n\t\tapiKey: options.apiKey,\n\t\tworkspaceId: options.workspaceId,\n\t\tprojectId: options.projectId,\n\t\ttimeoutMs: options.timeoutMs,\n\t\tallowMissingApiKey,\n\t\tallowMissingProjectId,\n\t});\n}\n\nfunction normalizeMemoryKind(value: string | undefined): MemoryKind {\n\tconst candidate = value ?? \"note\";\n\tif (!MEMORY_KINDS.has(candidate as MemoryKind)) {\n\t\tthrow new CliUsageError(\n\t\t\t`kind must be one of: ${[...MEMORY_KINDS].join(\", \")}.`,\n\t\t);\n\t}\n\treturn candidate as MemoryKind;\n}\n\nfunction normalizeRecallStrategy(\n\tvalue: string | undefined,\n): RecallStrategy | undefined {\n\tif (value === undefined) return undefined;\n\tif (RECALL_STRATEGIES.has(value as RecallStrategy))\n\t\treturn value as RecallStrategy;\n\tthrow new CliUsageError(\"recall strategy must be local, vector, or hybrid.\");\n}\n\nfunction normalizeRecallFallback(\n\tvalue: string | undefined,\n): RecallFallbackMode | undefined {\n\tif (value === undefined) return undefined;\n\tif (RECALL_FALLBACKS.has(value as RecallFallbackMode))\n\t\treturn value as RecallFallbackMode;\n\tthrow new CliUsageError(\"recall fallback must be none or local.\");\n}\n\nfunction normalizeIndexMode(\n\tvalue: string | undefined,\n): RecallIndexMode | undefined {\n\tif (value === undefined) return undefined;\n\tif (INDEX_MODES.has(value as RecallIndexMode))\n\t\treturn value as RecallIndexMode;\n\tthrow new CliUsageError(\"index mode must be all, changed, core, or notes.\");\n}\n\nfunction normalizeConflictResolution(value: string): SyncConflictResolution {\n\tif (CONFLICT_RESOLUTIONS.has(value as SyncConflictResolution))\n\t\treturn value as SyncConflictResolution;\n\tthrow new CliUsageError(\n\t\t\"conflict resolution must be keep_cloud, use_client, or ignore.\",\n\t);\n}\n\nfunction normalizeConfidence(value: string | number): number {\n\treturn parseConfidence(String(value));\n}\n\nfunction normalizeOptionalPositiveInteger(\n\tvalue: string | number | undefined,\n\tname: string,\n): number | undefined {\n\tif (value === undefined) return undefined;\n\tconst parsed = typeof value === \"number\" ? value : Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 1) {\n\t\tthrow new CliUsageError(`${name} must be a positive integer.`);\n\t}\n\treturn parsed;\n}\n\nfunction normalizeOptionalNonNegativeInteger(\n\tvalue: string | number | undefined,\n\tname: string,\n): number | undefined {\n\tif (value === undefined) return undefined;\n\tconst parsed = typeof value === \"number\" ? value : Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 0) {\n\t\tthrow new CliUsageError(`${name} must be a non-negative integer.`);\n\t}\n\treturn parsed;\n}\n\nfunction renderNote(note: {\n\tid: string;\n\tkind: string;\n\ttitle?: string;\n\tcontent: string;\n\ttags?: string[];\n\tcreatedAt?: string;\n}): string {\n\tconst heading = note.title ? `${note.title} (${note.id})` : note.id;\n\tconst tags = note.tags?.length ? `\\n- tags: ${note.tags.join(\", \")}` : \"\";\n\tconst created = note.createdAt ? `\\n- createdAt: ${note.createdAt}` : \"\";\n\treturn `## ${heading}\\n- kind: ${note.kind}${created}${tags}\\n\\n${note.content.trim()}`;\n}\n\nfunction renderRecallHits(\n\titems: Array<{ text: string; score?: number }>,\n): string {\n\tif (items.length === 0) return \"No matching cloud memories found.\";\n\treturn items\n\t\t.map((item, index) => {\n\t\t\tconst score = item.score === undefined ? \"\" : ` score=${item.score}`;\n\t\t\treturn `${index + 1}. ${item.text}${score}`;\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n\nfunction truncateText(text: string, maxBytes: number | undefined): string {\n\tif (maxBytes === undefined || text.length <= maxBytes) return text;\n\treturn `${text.slice(0, Math.max(0, maxBytes - 40)).trimEnd()}\\n\\n[truncated by --max-bytes]`;\n}\n\nasync function resolveJsonPayload(input: {\n\trootDir: string;\n\tinline?: string;\n\tstdin?: boolean;\n\tfile?: string;\n\tstdinContent?: string;\n\tfieldName: string;\n}): Promise<unknown> {\n\tconst raw = await resolveCommandContent({\n\t\trootDir: input.rootDir,\n\t\tinline: input.inline,\n\t\tstdin: input.stdin,\n\t\tfile: input.file,\n\t\tstdinContent: input.stdinContent,\n\t});\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tthrow new CliUsageError(\n\t\t\t`${input.fieldName} must be valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\nfunction parseJsonObject(raw: string, fieldName: string): JsonObject {\n\ttry {\n\t\tconst parsed = JSON.parse(raw) as unknown;\n\t\tif (!isJsonObject(parsed)) throw new Error(\"value must be an object\");\n\t\treturn parsed;\n\t} catch (error) {\n\t\tthrow new CliUsageError(\n\t\t\t`${fieldName} must be a JSON object: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\nfunction extractSyncEvents(payload: unknown): SyncEventInput[] {\n\tconst events = Array.isArray(payload)\n\t\t? payload\n\t\t: isJsonObject(payload)\n\t\t\t? payload.events\n\t\t\t: undefined;\n\tif (!Array.isArray(events))\n\t\tthrow new CliUsageError(\n\t\t\t\"sync push payload must be an event array or an object with an events array.\",\n\t\t);\n\treturn events.map((event, index) => {\n\t\tif (!isJsonObject(event))\n\t\t\tthrow new CliUsageError(\n\t\t\t\t`sync event at index ${index} must be an object.`,\n\t\t\t);\n\t\treturn event as unknown as SyncEventInput;\n\t});\n}\n\nfunction extractCheckpoint(\n\tpayload: unknown,\n):\n\t| { localVersion?: number; serverVersion?: number; hash?: string }\n\t| undefined {\n\tif (!isJsonObject(payload) || payload.checkpoint === undefined)\n\t\treturn undefined;\n\tif (!isJsonObject(payload.checkpoint))\n\t\tthrow new CliUsageError(\"sync checkpoint must be an object.\");\n\treturn payload.checkpoint as {\n\t\tlocalVersion?: number;\n\t\tserverVersion?: number;\n\t\thash?: string;\n\t};\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\nimport { parsePositiveInteger } from \"../utils/numbers\";\n\nexport interface ContextCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tquery?: string | undefined;\n\tmaxChars?: number | string | undefined;\n\tincludeEvents?: boolean | undefined;\n\tincludeChunks?: boolean | undefined;\n}\n\ninterface ContextSearchMatch {\n\tfile: string;\n\tline: number;\n\tcontent: string;\n}\n\nfunction truncate(value: string, maxChars: number): string {\n\tif (value.length <= maxChars) return value;\n\treturn `${value.slice(0, Math.max(0, maxChars - 20)).trimEnd()}\\n\\n[truncated]`;\n}\n\nfunction searchText(\n\tfile: string,\n\tcontent: string,\n\tquery: string,\n): ContextSearchMatch[] {\n\tconst lower = query.toLowerCase();\n\treturn content\n\t\t.split(/\\r?\\n/)\n\t\t.map((line, index) => ({ file, line: index + 1, content: line.trim() }))\n\t\t.filter((entry) => entry.content.toLowerCase().includes(lower));\n}\n\nexport async function runContextCommand(\n\toptions: ContextCommandOptions,\n): Promise<number> {\n\tconst maxChars =\n\t\ttypeof options.maxChars === \"number\"\n\t\t\t? options.maxChars\n\t\t\t: options.maxChars\n\t\t\t\t? parsePositiveInteger(options.maxChars, \"max chars\")\n\t\t\t\t: 12000;\n\tconst core =\n\t\t(await options.fs.readTextIfExists(TEKMEMO_PATHS.coreMemory)) ?? \"\";\n\tconst notes =\n\t\t(await options.fs.readTextIfExists(TEKMEMO_PATHS.notesMemory)) ?? \"\";\n\tconst eventContent =\n\t\t(await options.fs.readTextIfExists(TEKMEMO_PATHS.memoryEvents)) ?? \"\";\n\tconst chunkContent =\n\t\t(await options.fs.readTextIfExists(TEKMEMO_PATHS.chunks)) ?? \"\";\n\tconst events = eventContent\n\t\t? parseJsonl(eventContent)\n\t\t\t\t.slice(-10)\n\t\t\t\t.map((record) => record.value)\n\t\t: [];\n\tconst chunks = chunkContent\n\t\t? parseJsonl(chunkContent)\n\t\t\t\t.slice(-10)\n\t\t\t\t.map((record) => record.value)\n\t\t: [];\n\tconst matches = options.query\n\t\t? [\n\t\t\t\t...searchText(TEKMEMO_PATHS.coreMemory, core, options.query),\n\t\t\t\t...searchText(TEKMEMO_PATHS.notesMemory, notes, options.query),\n\t\t\t]\n\t\t: [];\n\n\tconst data = {\n\t\trootDir: options.fs.rootDir,\n\t\tquery: options.query ?? null,\n\t\tcore: truncate(core.trim(), Math.floor(maxChars * 0.45)),\n\t\tnotes: truncate(notes.trim(), Math.floor(maxChars * 0.35)),\n\t\tmatches,\n\t\t...(options.includeEvents ? { recentEvents: events } : {}),\n\t\t...(options.includeChunks ? { recentChunks: chunks } : {}),\n\t};\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"context\", data);\n\t\treturn 0;\n\t}\n\n\tconst sections = [\n\t\t\"# TekMemo Context\",\n\t\t`Root: ${options.fs.rootDir}`,\n\t\toptions.query ? `Query: ${options.query}` : undefined,\n\t\t\"\",\n\t\t\"## Core Memory\",\n\t\tdata.core || \"No core memory found.\",\n\t\t\"\",\n\t\t\"## Notes Memory\",\n\t\tdata.notes || \"No notes memory found.\",\n\t];\n\tif (matches.length > 0) {\n\t\tsections.push(\n\t\t\t\"\",\n\t\t\t\"## Text Matches\",\n\t\t\t...matches\n\t\t\t\t.slice(0, 20)\n\t\t\t\t.map((m) => `- ${m.file}:${m.line} — ${m.content}`),\n\t\t);\n\t}\n\tif (options.includeEvents && events.length > 0) {\n\t\tsections.push(\n\t\t\t\"\",\n\t\t\t\"## Recent Memory Events\",\n\t\t\t...events.map((event) =>\n\t\t\t\t`- ${String(event.timestamp ?? \"unknown\")} ${String(event.type ?? \"unknown\")} ${String(event.summary ?? \"\")}`.trim(),\n\t\t\t),\n\t\t);\n\t}\n\toptions.output.write(\n\t\ttruncate(\n\t\t\tsections\n\t\t\t\t.filter((section): section is string => section !== undefined)\n\t\t\t\t.join(\"\\n\"),\n\t\t\tmaxChars,\n\t\t),\n\t);\n\treturn 0;\n}\n","import { createHash } from \"node:crypto\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\n\nexport interface DiffCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tlabelA: string;\n\tlabelB: string;\n}\n\ninterface SnapshotBundle {\n\tid: string;\n\tlabel?: string;\n\ttimestamp?: string;\n\tcreatedAt?: string;\n\tfiles: Record<string, string>;\n\tchecksum: string;\n}\n\ninterface FileDiff {\n\tpath: string;\n\tstatus: \"added\" | \"removed\" | \"changed\" | \"unchanged\";\n\tbytesA?: number;\n\tbytesB?: number;\n\trecordsA?: number;\n\trecordsB?: number;\n}\n\nfunction lineCount(content: string): number {\n\treturn content.split(/\\r?\\n/).filter(Boolean).length;\n}\n\nfunction contentHash(content: string): string {\n\treturn createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nasync function loadBundle(\n\tfs: TekMemoFileSystem,\n\tpath: string,\n): Promise<SnapshotBundle> {\n\tconst raw = await fs.readText(path);\n\tconst parsed = JSON.parse(raw) as SnapshotBundle;\n\tif (\n\t\ttypeof parsed !== \"object\" ||\n\t\tparsed === null ||\n\t\ttypeof parsed.files !== \"object\"\n\t) {\n\t\tthrow new Error(\"Snapshot bundle is malformed.\");\n\t}\n\treturn parsed;\n}\n\nfunction snapshotMatches(\n\trecord: Record<string, unknown>,\n\tkey: string,\n): boolean {\n\tif (record.id === key) return true;\n\tif (record.label === key) return true;\n\tconst metadata = record.metadata;\n\tif (\n\t\ttypeof metadata === \"object\" &&\n\t\tmetadata !== null &&\n\t\t!Array.isArray(metadata)\n\t) {\n\t\treturn (metadata as Record<string, unknown>).label === key;\n\t}\n\treturn false;\n}\n\nexport async function runDiffCommand(\n\toptions: DiffCommandOptions,\n): Promise<number> {\n\tconst snapshotContent = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.snapshots,\n\t);\n\tif (!snapshotContent) {\n\t\toptions.output.error(\"No snapshots found.\");\n\t\treturn 1;\n\t}\n\n\tconst snapshots = parseJsonl(snapshotContent);\n\tconst snapA = snapshots.find((s) => snapshotMatches(s.value, options.labelA));\n\tconst snapB = snapshots.find((s) => snapshotMatches(s.value, options.labelB));\n\n\tif (!snapA) {\n\t\toptions.output.error(`Snapshot \"${options.labelA}\" not found.`);\n\t\treturn 1;\n\t}\n\tif (!snapB) {\n\t\toptions.output.error(`Snapshot \"${options.labelB}\" not found.`);\n\t\treturn 1;\n\t}\n\n\tconst pathA = snapA.value.path;\n\tconst pathB = snapB.value.path;\n\tif (typeof pathA !== \"string\" || typeof pathB !== \"string\") {\n\t\toptions.output.error(\"Snapshot index contains a malformed path.\");\n\t\treturn 1;\n\t}\n\n\tlet bundleA: SnapshotBundle;\n\tlet bundleB: SnapshotBundle;\n\ttry {\n\t\tbundleA = await loadBundle(options.fs, pathA);\n\t} catch {\n\t\toptions.output.error(`Failed to load snapshot bundle: ${pathA}`);\n\t\treturn 1;\n\t}\n\ttry {\n\t\tbundleB = await loadBundle(options.fs, pathB);\n\t} catch {\n\t\toptions.output.error(`Failed to load snapshot bundle: ${pathB}`);\n\t\treturn 1;\n\t}\n\n\tconst allPaths = new Set([\n\t\t...Object.keys(bundleA.files),\n\t\t...Object.keys(bundleB.files),\n\t]);\n\tconst diffs: FileDiff[] = [];\n\n\tfor (const filePath of allPaths) {\n\t\tconst contentA = bundleA.files[filePath];\n\t\tconst contentB = bundleB.files[filePath];\n\t\tif (contentA === undefined && contentB !== undefined) {\n\t\t\tdiffs.push({\n\t\t\t\tpath: filePath,\n\t\t\t\tstatus: \"added\",\n\t\t\t\tbytesB: Buffer.byteLength(contentB),\n\t\t\t});\n\t\t} else if (contentA !== undefined && contentB === undefined) {\n\t\t\tdiffs.push({\n\t\t\t\tpath: filePath,\n\t\t\t\tstatus: \"removed\",\n\t\t\t\tbytesA: Buffer.byteLength(contentA),\n\t\t\t});\n\t\t} else if (contentA !== undefined && contentB !== undefined) {\n\t\t\tif (contentHash(contentA) === contentHash(contentB)) {\n\t\t\t\tdiffs.push({\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tstatus: \"unchanged\",\n\t\t\t\t\tbytesA: Buffer.byteLength(contentA),\n\t\t\t\t\tbytesB: Buffer.byteLength(contentB),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst isJsonl = filePath.endsWith(\".jsonl\");\n\t\t\t\tdiffs.push({\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tstatus: \"changed\",\n\t\t\t\t\tbytesA: Buffer.byteLength(contentA),\n\t\t\t\t\tbytesB: Buffer.byteLength(contentB),\n\t\t\t\t\t...(isJsonl\n\t\t\t\t\t\t? { recordsA: lineCount(contentA), recordsB: lineCount(contentB) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst changed = diffs.filter((d) => d.status !== \"unchanged\");\n\tconst data = {\n\t\tlabelA: options.labelA,\n\t\tlabelB: options.labelB,\n\t\tsnapshotA: {\n\t\t\tid: bundleA.id,\n\t\t\tcreatedAt: bundleA.createdAt ?? bundleA.timestamp,\n\t\t\tpath: pathA,\n\t\t},\n\t\tsnapshotB: {\n\t\t\tid: bundleB.id,\n\t\t\tcreatedAt: bundleB.createdAt ?? bundleB.timestamp,\n\t\t\tpath: pathB,\n\t\t},\n\t\ttotalFiles: allPaths.size,\n\t\tchangedFiles: changed.length,\n\t\tdiffs: changed,\n\t};\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"diff\", data);\n\t\treturn 0;\n\t}\n\n\toptions.output.write(`Comparing \"${options.labelA}\" vs \"${options.labelB}\"`);\n\toptions.output.write(\n\t\t` [A] ${data.snapshotA.createdAt ?? \"unknown\"} [B] ${data.snapshotB.createdAt ?? \"unknown\"}`,\n\t);\n\toptions.output.write(\"\");\n\tif (changed.length === 0) {\n\t\toptions.output.success(\"No differences found. Snapshots are identical.\");\n\t\treturn 0;\n\t}\n\n\tconst statusLabel: Record<string, string> = {\n\t\tadded: \"+\",\n\t\tremoved: \"-\",\n\t\tchanged: \"~\",\n\t};\n\tfor (const diff of changed) {\n\t\tconst icon = statusLabel[diff.status] ?? \"?\";\n\t\tlet line = ` ${icon} ${diff.path}`;\n\t\tif (diff.status === \"changed\") {\n\t\t\tconst sizeInfo = `${diff.bytesA}B → ${diff.bytesB}B`;\n\t\t\tconst recordInfo =\n\t\t\t\tdiff.recordsA !== undefined && diff.recordsB !== undefined\n\t\t\t\t\t? ` (${diff.recordsA} → ${diff.recordsB} records)`\n\t\t\t\t\t: \"\";\n\t\t\tline += ` ${sizeInfo}${recordInfo}`;\n\t\t} else if (diff.status === \"added\" && diff.bytesB !== undefined)\n\t\t\tline += ` (${diff.bytesB}B)`;\n\t\telse if (diff.status === \"removed\" && diff.bytesA !== undefined)\n\t\t\tline += ` (${diff.bytesA}B)`;\n\t\toptions.output.write(line);\n\t}\n\toptions.output.write(\n\t\t`\\n${changed.length} file(s) changed out of ${allPaths.size} total.`,\n\t);\n\treturn 0;\n}\n","import { z } from \"zod\";\n\nconst JsonRecordSchema = z.record(z.string(), z.unknown());\nconst IsoDateSchema = z.string().datetime();\nconst NonEmptyStringSchema = z.string().min(1);\n\nexport const ManifestSchema = z.object({\n\tversion: NonEmptyStringSchema,\n\tprojectId: NonEmptyStringSchema.optional(),\n\tcreatedAt: IsoDateSchema,\n\tupdatedAt: IsoDateSchema,\n\tmemory: z.object({\n\t\tcore: NonEmptyStringSchema,\n\t\tnotes: NonEmptyStringSchema,\n\t}),\n\tevents: z.object({\n\t\tmemoryEvents: NonEmptyStringSchema,\n\t\tconversations: NonEmptyStringSchema,\n\t}),\n\tindexes: z.object({\n\t\tchunks: NonEmptyStringSchema,\n\t}),\n\tgraph: z.object({\n\t\tnodes: NonEmptyStringSchema,\n\t\tedges: NonEmptyStringSchema,\n\t}),\n\tsnapshots: z.object({\n\t\tindex: NonEmptyStringSchema,\n\t}),\n});\n\nexport const ConversationEntrySchema = z.object({\n\ttimestamp: IsoDateSchema,\n\trole: z.enum([\"user\", \"assistant\", \"system\", \"tool\"]),\n\tcontent: z.string(),\n\tsummary: z.string().optional(),\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const MemoryEventSchema = z.object({\n\tid: NonEmptyStringSchema,\n\ttype: z.enum([\n\t\t\"memory.created\",\n\t\t\"memory.updated\",\n\t\t\"memory.merged\",\n\t\t\"memory.conflicted\",\n\t\t\"memory.decayed\",\n\t\t\"memory.forgotten\",\n\t\t\"memory.restored\",\n\t\t\"memory.indexed\",\n\t\t\"memory.reindexed\",\n\t\t\"snapshot.created\",\n\t\t\"sync.started\",\n\t\t\"sync.completed\",\n\t\t\"sync.failed\",\n\t]),\n\ttimestamp: IsoDateSchema,\n\tprojectId: NonEmptyStringSchema.optional(),\n\tsourcePath: NonEmptyStringSchema.optional(),\n\tactor: z\n\t\t.object({\n\t\t\ttype: z.enum([\"user\", \"agent\", \"system\", \"api\"]),\n\t\t\tid: NonEmptyStringSchema.optional(),\n\t\t})\n\t\t.optional(),\n\tsummary: NonEmptyStringSchema.optional(),\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const ChunkRecordSchema = z.object({\n\tchunkId: NonEmptyStringSchema,\n\tsourcePath: NonEmptyStringSchema,\n\tsourceType: z.enum([\n\t\t\"document\",\n\t\t\"note\",\n\t\t\"conversation\",\n\t\t\"event\",\n\t\t\"import\",\n\t\t\"graph\",\n\t]),\n\tsourceId: NonEmptyStringSchema,\n\tsourceHash: NonEmptyStringSchema,\n\ttextHash: NonEmptyStringSchema,\n\tmemoryType: z.enum([\n\t\t\"core\",\n\t\t\"notes\",\n\t\t\"conversation\",\n\t\t\"event\",\n\t\t\"chunk\",\n\t\t\"graph\",\n\t]),\n\tindex: z.number().int().nonnegative(),\n\tstartOffset: z.number().int().nonnegative(),\n\tendOffset: z.number().int().nonnegative(),\n\tstatus: z.enum([\"active\", \"stale\", \"deleted\"]),\n\tcreatedAt: IsoDateSchema,\n\tupdatedAt: IsoDateSchema.optional(),\n\tsectionName: z.string().optional(),\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const SnapshotEntrySchema = z.object({\n\tid: NonEmptyStringSchema,\n\tpath: NonEmptyStringSchema,\n\ttype: z.enum([\"manual\", \"automatic\", \"pre-sync\", \"pre-restore\"]),\n\tstatus: z.enum([\"available\", \"expired\", \"deleted\"]),\n\tcreatedAt: IsoDateSchema,\n\texpiresAt: IsoDateSchema.optional(),\n\tchecksum: NonEmptyStringSchema.optional(),\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const LegacySnapshotEntrySchema = z.object({\n\tid: NonEmptyStringSchema,\n\ttimestamp: IsoDateSchema,\n\tlabel: NonEmptyStringSchema,\n\tpath: NonEmptyStringSchema,\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const MemoryChunkSchema = ChunkRecordSchema;\n","import type { z } from \"zod\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport {\n\tREQUIRED_DIRS,\n\tREQUIRED_FILES,\n\tTEKMEMO_PATHS,\n} from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\nimport {\n\tConversationEntrySchema,\n\tManifestSchema,\n\tMemoryChunkSchema,\n\tMemoryEventSchema,\n\tSnapshotEntrySchema,\n} from \"../protocol/schemas\";\n\nexport interface DoctorIssue {\n\tlevel: \"error\" | \"warning\";\n\tcode: string;\n\tmessage: string;\n}\n\nexport interface DoctorCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tstrict?: boolean | undefined;\n}\n\nexport async function runDoctorCommand(\n\toptions: DoctorCommandOptions,\n): Promise<number> {\n\tconst issues: DoctorIssue[] = [];\n\n\tfor (const dir of REQUIRED_DIRS) {\n\t\tconst exists = await options.fs.exists(dir);\n\t\tif (!exists) {\n\t\t\tissues.push({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tcode: \"missing_dir\",\n\t\t\t\tmessage: `Missing directory: ${dir}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const file of REQUIRED_FILES) {\n\t\tconst exists = await options.fs.exists(file);\n\t\tif (!exists) {\n\t\t\tissues.push({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tcode: \"missing_file\",\n\t\t\t\tmessage: `Missing file: ${file}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst manifestContent = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.manifest,\n\t);\n\tif (manifestContent) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(manifestContent);\n\t\t\tManifestSchema.parse(parsed);\n\t\t} catch (error) {\n\t\t\tissues.push({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tcode: \"invalid_manifest\",\n\t\t\t\tmessage: `manifest.json: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst validationMap: Record<string, z.ZodSchema> = {\n\t\t[TEKMEMO_PATHS.memoryEvents]: MemoryEventSchema,\n\t\t[TEKMEMO_PATHS.conversations]: ConversationEntrySchema,\n\t\t[TEKMEMO_PATHS.chunks]: MemoryChunkSchema,\n\t\t[TEKMEMO_PATHS.snapshots]: SnapshotEntrySchema,\n\t};\n\n\tconst conversationIds = new Set<string>();\n\n\tfor (const [file, schema] of Object.entries(validationMap)) {\n\t\tconst content = await options.fs.readTextIfExists(file);\n\t\tif (content === undefined) continue;\n\n\t\tconst records = parseJsonl(content, { strict: options.strict ?? false });\n\t\tfor (const record of records) {\n\t\t\ttry {\n\t\t\t\tconst validated = schema.parse(record.value) as Record<string, unknown>;\n\n\t\t\t\tif (\n\t\t\t\t\tfile === TEKMEMO_PATHS.conversations &&\n\t\t\t\t\ttypeof validated.id === \"string\"\n\t\t\t\t) {\n\t\t\t\t\tconversationIds.add(validated.id);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tissues.push({\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tcode: \"invalid_line\",\n\t\t\t\t\tmessage: `${file}:${record.line}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst eventContent = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t);\n\tif (eventContent) {\n\t\tconst events = parseJsonl(eventContent);\n\t\tfor (const event of events) {\n\t\t\tconst docId = event.value.documentId;\n\t\t\tif (typeof docId !== \"string\") continue;\n\t\t\tif (docId === \"core\" || docId === \"notes\") continue;\n\n\t\t\tif (conversationIds.size > 0 && !conversationIds.has(docId)) {\n\t\t\t\tissues.push({\n\t\t\t\t\tlevel: \"warning\",\n\t\t\t\t\tcode: \"orphaned_event\",\n\t\t\t\t\tmessage: `${TEKMEMO_PATHS.memoryEvents}:${event.line}: Event references unknown document/conversation \"${docId}\"`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst result = {\n\t\tok: issues.filter((issue) => issue.level === \"error\").length === 0,\n\t\tissues,\n\t};\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify(result, null, 2));\n\t} else if (result.ok) {\n\t\tif (issues.length > 0) {\n\t\t\toptions.output.warn(\n\t\t\t\t[\n\t\t\t\t\t\"TekMemo doctor passed with warnings:\",\n\t\t\t\t\t...issues.map((issue) => `- [${issue.level}] ${issue.message}`),\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t} else {\n\t\t\toptions.output.success(\"TekMemo doctor passed.\");\n\t\t}\n\t} else {\n\t\toptions.output.error(\n\t\t\t[\n\t\t\t\t\"TekMemo doctor found errors:\",\n\t\t\t\t...issues.map((issue) => `- [${issue.level}] ${issue.message}`),\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\treturn result.ok ? 0 : 1;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { stringifyJsonl } from \"../protocol/jsonl\";\nimport { scanForSecrets } from \"../utils/secrets\";\n\nexport interface EditCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\ttype: \"note\" | \"core\";\n\tmessage: string;\n\tallowSecrets?: boolean | undefined;\n}\n\nexport async function runEditCommand(\n\toptions: EditCommandOptions,\n): Promise<number> {\n\tconst findings = scanForSecrets(options.message);\n\tif (findings.length > 0 && !options.allowSecrets) {\n\t\tif (options.json)\n\t\t\tprintJsonEnvelope(options.output, \"edit\", {\n\t\t\t\tupdated: false,\n\t\t\t\tsecretFindings: findings,\n\t\t\t});\n\t\telse\n\t\t\toptions.output.error(\n\t\t\t\t`Refusing to store possible secret (${findings[0]?.kind}). Use --allow-secrets only after review.`,\n\t\t\t);\n\t\treturn 1;\n\t}\n\n\tconst file =\n\t\toptions.type === \"core\"\n\t\t\t? TEKMEMO_PATHS.coreMemory\n\t\t\t: TEKMEMO_PATHS.notesMemory;\n\tconst timestamp = new Date().toISOString();\n\tconst entry =\n\t\toptions.type === \"note\"\n\t\t\t? `\\n## ${timestamp}\\n- kind: note\\n- tags: none\\n- confidence: 1\\n\\n${options.message.trim()}\\n`\n\t\t\t: `\\n${options.message.trim()}\\n`;\n\tawait options.fs.appendText(file, entry);\n\n\tconst event = {\n\t\tid: `evt_${Date.now()}_${Math.random().toString(16).slice(2)}`,\n\t\ttype: \"memory.updated\",\n\t\ttimestamp,\n\t\tsourcePath: file,\n\t\tactor: { type: \"user\" },\n\t\tsummary: `${options.type} memory updated by CLI`,\n\t\tmetadata: {\n\t\t\tdocument: options.type,\n\t\t\tcommand: \"edit\",\n\t\t\tcreatedBy: \"@tekmemo/cli\",\n\t\t},\n\t};\n\tawait options.fs.appendText(\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t\tstringifyJsonl([event]),\n\t);\n\n\tconst data = {\n\t\tupdated: true,\n\t\tpath: file,\n\t\teventId: event.id,\n\t\tsecretFindings: findings,\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"edit\", data);\n\telse options.output.success(`Updated ${file}`);\n\treturn 0;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\n\nexport interface EventsCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tlimit?: number | undefined;\n\tstrict?: boolean | undefined;\n}\n\nexport async function runEventsCommand(\n\toptions: EventsCommandOptions,\n): Promise<number> {\n\tconst content = await options.fs.readTextIfExists(TEKMEMO_PATHS.memoryEvents);\n\tconst records = content\n\t\t? parseJsonl(content, { strict: options.strict ?? false })\n\t\t: [];\n\tconst selected =\n\t\toptions.limit && options.limit > 0\n\t\t\t? records.slice(-options.limit)\n\t\t\t: records;\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify(selected, null, 2));\n\t\treturn 0;\n\t}\n\n\tif (selected.length === 0) {\n\t\toptions.output.write(\"No memory events found.\");\n\t\treturn 0;\n\t}\n\n\toptions.output.write(\n\t\tselected\n\t\t\t.map((record) => {\n\t\t\t\tconst type =\n\t\t\t\t\ttypeof record.value.type === \"string\" ? record.value.type : \"unknown\";\n\t\t\t\tconst at =\n\t\t\t\t\ttypeof record.value.timestamp === \"string\"\n\t\t\t\t\t\t? record.value.timestamp\n\t\t\t\t\t\t: `line ${record.line}`;\n\t\t\t\tconst summary =\n\t\t\t\t\ttypeof record.value.summary === \"string\"\n\t\t\t\t\t\t? ` — ${record.value.summary}`\n\t\t\t\t\t\t: \"\";\n\t\t\t\treturn `${at} ${type}${summary}`;\n\t\t\t})\n\t\t\t.join(\"\\n\"),\n\t);\n\n\treturn 0;\n}\n","import readline from \"node:readline/promises\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport {\n\tREQUIRED_DIRS,\n\tREQUIRED_FILES,\n\tTEKMEMO_PATHS,\n} from \"../protocol/constants\";\nimport { createDefaultManifest } from \"../protocol/manifest\";\n\nexport interface InitCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tforce?: boolean | undefined;\n\tprojectId?: string | undefined;\n\tnoInput?: boolean | undefined;\n}\n\nexport async function runInitCommand(\n\toptions: InitCommandOptions,\n): Promise<number> {\n\tawait options.fs.ensureSafeRoot();\n\n\tlet projectId: string | undefined = options.projectId?.trim();\n\tif (projectId !== undefined && projectId.length === 0) projectId = undefined;\n\n\tif (!projectId && !options.json && !options.noInput && process.stdout.isTTY) {\n\t\toptions.output.write(\"Initializing TekMemo...\");\n\t\tconst rl = readline.createInterface({\n\t\t\tinput: process.stdin,\n\t\t\toutput: process.stdout,\n\t\t});\n\t\ttry {\n\t\t\tconst answer = await rl.question(\n\t\t\t\t\"Enter project ID (leave empty for random): \",\n\t\t\t);\n\t\t\tif (answer.trim()) projectId = answer.trim();\n\t\t} finally {\n\t\t\trl.close();\n\t\t}\n\t}\n\n\tfor (const dir of REQUIRED_DIRS) await options.fs.mkdir(dir);\n\n\tconst existingManifest = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.manifest,\n\t);\n\tif (existingManifest && !options.force) {\n\t\tconst data = {\n\t\t\tcreated: false,\n\t\t\trootDir: options.fs.rootDir,\n\t\t\tmessage: \".tekmemo already exists. Use --force to overwrite seed files.\",\n\t\t};\n\t\tif (options.json) printJsonEnvelope(options.output, \"init\", data);\n\t\telse options.output.write(data.message);\n\t\treturn 0;\n\t}\n\n\tconst manifest = createDefaultManifest(projectId ? { projectId } : undefined);\n\tconst seedFiles: Record<string, string> = {\n\t\t[TEKMEMO_PATHS.manifest]: `${JSON.stringify(manifest, null, 2)}\\n`,\n\t\t[TEKMEMO_PATHS.coreMemory]: \"# Core Memory\\n\\n\",\n\t\t[TEKMEMO_PATHS.notesMemory]: \"# Notes\\n\\n\",\n\t\t[TEKMEMO_PATHS.memoryEvents]: \"\",\n\t\t[TEKMEMO_PATHS.conversations]: \"\",\n\t\t[TEKMEMO_PATHS.chunks]: \"\",\n\t\t[TEKMEMO_PATHS.graphNodes]: \"\",\n\t\t[TEKMEMO_PATHS.graphEdges]: \"\",\n\t\t[TEKMEMO_PATHS.snapshots]: \"\",\n\t};\n\n\tconst created: string[] = [];\n\tconst overwritten: string[] = [];\n\tconst skipped: string[] = [];\n\n\tfor (const file of REQUIRED_FILES) {\n\t\tconst exists = await options.fs.exists(file);\n\t\tif (!exists || options.force) {\n\t\t\tawait options.fs.writeText(file, seedFiles[file] ?? \"\");\n\t\t\tif (exists) overwritten.push(file);\n\t\t\telse created.push(file);\n\t\t} else {\n\t\t\tskipped.push(file);\n\t\t}\n\t}\n\n\tconst data = {\n\t\tcreated: true,\n\t\trootDir: options.fs.rootDir,\n\t\tmanifest,\n\t\tfiles: { created, overwritten, skipped },\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"init\", data);\n\telse\n\t\toptions.output.success(\n\t\t\t`Initialized .tekmemo at ${options.fs.rootDir} (Project ID: ${manifest.projectId ?? \"none\"})`,\n\t\t);\n\treturn 0;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { inspectTekMemo } from \"../protocol/summary\";\n\nexport interface InspectCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean;\n}\n\nexport async function runInspectCommand(\n\toptions: InspectCommandOptions,\n): Promise<number> {\n\tconst inspection = await inspectTekMemo(options.fs);\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify(inspection, null, 2));\n\t\treturn 0;\n\t}\n\n\tconst lines = [\n\t\t`TekMemo root: ${inspection.rootDir}`,\n\t\t`.tekmemo exists: ${inspection.exists ? \"yes\" : \"no\"}`,\n\t\tinspection.manifest\n\t\t\t? `Project: ${inspection.manifest.projectId}`\n\t\t\t: \"Project: missing manifest\",\n\t\t\"\",\n\t\t\"Files:\",\n\t];\n\n\tfor (const file of inspection.files) {\n\t\tlines.push(\n\t\t\t`- ${file.path}: ${file.exists ? `${file.bytes} bytes` : \"missing\"}${file.records !== undefined ? `, ${file.records} records` : \"\"}`,\n\t\t);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\"Summary:\");\n\tlines.push(`- events: ${inspection.summary.eventCount}`);\n\tlines.push(`- conversations: ${inspection.summary.conversationCount}`);\n\tlines.push(`- chunks: ${inspection.summary.chunkCount}`);\n\tlines.push(`- graph nodes: ${inspection.summary.graphNodeCount}`);\n\tlines.push(`- graph edges: ${inspection.summary.graphEdgeCount}`);\n\tlines.push(`- snapshots: ${inspection.summary.snapshotCount}`);\n\n\toptions.output.write(lines.join(\"\\n\"));\n\treturn 0;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\n\nexport interface ReadCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\ttarget: \"core\" | \"notes\" | \"manifest\";\n}\n\nconst TARGET_PATHS = {\n\tcore: TEKMEMO_PATHS.coreMemory,\n\tnotes: TEKMEMO_PATHS.notesMemory,\n\tmanifest: TEKMEMO_PATHS.manifest,\n} as const;\n\nexport async function runReadCommand(\n\toptions: ReadCommandOptions,\n): Promise<number> {\n\tconst path = TARGET_PATHS[options.target];\n\tconst content = await options.fs.readTextIfExists(path);\n\tif (content === undefined) {\n\t\toptions.output.error(`${path} does not exist. Run tekmemo init first.`);\n\t\treturn 1;\n\t}\n\tif (options.json)\n\t\tprintJsonEnvelope(options.output, \"read\", {\n\t\t\ttarget: options.target,\n\t\t\tpath,\n\t\t\tcontent,\n\t\t});\n\telse options.output.write(content.trimEnd());\n\treturn 0;\n}\n","import { CliUsageError } from \"../errors/cli-errors\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { stringifyJsonl } from \"../protocol/jsonl\";\nimport { resolveCommandContent } from \"../utils/content\";\nimport { parseMetadataJson } from \"../utils/metadata\";\nimport { parseConfidence } from \"../utils/numbers\";\nimport { scanForSecrets } from \"../utils/secrets\";\n\nexport interface RememberCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tcontent?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tstdinContent?: string | undefined;\n\tkind?: string | undefined;\n\ttitle?: string | undefined;\n\ttags?: string[] | undefined;\n\tconfidence?: string | number | undefined;\n\tsource?: string | undefined;\n\tactor?: string | undefined;\n\tmetadata?: string | undefined;\n\tallowSecrets?: boolean | undefined;\n}\n\nconst NOTE_KINDS = new Set([\n\t\"decision\",\n\t\"constraint\",\n\t\"goal\",\n\t\"preference\",\n\t\"reference\",\n\t\"summary\",\n\t\"note\",\n]);\n\nfunction normalizeKind(kind?: string): string {\n\tconst normalized = (kind ?? \"note\").trim();\n\tif (!NOTE_KINDS.has(normalized)) {\n\t\tthrow new CliUsageError(\n\t\t\t`Invalid memory kind \"${normalized}\". Allowed: ${[...NOTE_KINDS].join(\", \")}`,\n\t\t);\n\t}\n\treturn normalized;\n}\n\nfunction parseActor(actor?: string): {\n\ttype: \"user\" | \"agent\" | \"system\" | \"api\";\n\tid?: string;\n} {\n\tif (!actor) return { type: \"user\" };\n\tconst [type, id] = actor.split(\":\", 2);\n\tif (\n\t\ttype !== \"user\" &&\n\t\ttype !== \"agent\" &&\n\t\ttype !== \"system\" &&\n\t\ttype !== \"api\"\n\t) {\n\t\tthrow new CliUsageError(\n\t\t\t\"actor must be one of user, agent, system, or api, optionally followed by :id.\",\n\t\t);\n\t}\n\treturn { type, ...(id ? { id } : {}) };\n}\n\nfunction formatTimestampedNote(input: {\n\ttimestamp: string;\n\tkind: string;\n\tcontent: string;\n\ttitle?: string;\n\ttags?: string[];\n\tconfidence: number;\n\tsource?: string;\n\tmetadata?: Record<string, unknown>;\n}): string {\n\tconst heading = input.title\n\t\t? `${input.timestamp} — ${input.title.replace(/\\s+/g, \" \").trim()}`\n\t\t: input.timestamp;\n\tconst tags = input.tags?.length ? input.tags.join(\", \") : \"none\";\n\tconst lines = [\n\t\t`## ${heading}`,\n\t\t`- kind: ${input.kind}`,\n\t\t`- tags: ${tags}`,\n\t\t`- confidence: ${input.confidence}`,\n\t\tinput.source ? `- source: ${input.source}` : undefined,\n\t\tinput.metadata\n\t\t\t? `- metadata: ${JSON.stringify(input.metadata)}`\n\t\t\t: undefined,\n\t\t\"\",\n\t\tinput.content.trim(),\n\t\t\"\",\n\t];\n\treturn lines.filter((line): line is string => line !== undefined).join(\"\\n\");\n}\n\nexport async function runRememberCommand(\n\toptions: RememberCommandOptions,\n): Promise<number> {\n\tconst content = await resolveCommandContent({\n\t\trootDir: options.fs.rootDir,\n\t\tinline: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t});\n\n\tconst findings = scanForSecrets(content);\n\tif (findings.length > 0 && !options.allowSecrets) {\n\t\tconst data = { secretFindings: findings };\n\t\tif (options.json)\n\t\t\tprintJsonEnvelope(options.output, \"remember\", { stored: false, ...data });\n\t\telse\n\t\t\toptions.output.error(\n\t\t\t\t`Refusing to store possible secret (${findings[0]?.kind}). Use --allow-secrets only after review.`,\n\t\t\t);\n\t\treturn 1;\n\t}\n\n\tconst timestamp = new Date().toISOString();\n\tconst kind = normalizeKind(options.kind);\n\tconst tags = (options.tags ?? []).map((tag) => tag.trim()).filter(Boolean);\n\tconst confidence =\n\t\ttypeof options.confidence === \"number\"\n\t\t\t? options.confidence\n\t\t\t: options.confidence\n\t\t\t\t? parseConfidence(options.confidence)\n\t\t\t\t: 1;\n\tconst metadata = parseMetadataJson(options.metadata);\n\tconst actor = parseActor(options.actor);\n\n\tconst note = formatTimestampedNote({\n\t\ttimestamp,\n\t\tkind,\n\t\tcontent,\n\t\t...(options.title ? { title: options.title } : {}),\n\t\t...(tags.length ? { tags } : {}),\n\t\tconfidence,\n\t\t...(options.source ? { source: options.source } : {}),\n\t\t...(metadata ? { metadata } : {}),\n\t});\n\n\tconst currentNotes = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.notesMemory,\n\t);\n\tconst nextNotes =\n\t\t`${(currentNotes ?? \"# Notes\\n\").trimEnd()}\\n\\n${note}`.trimStart();\n\tawait options.fs.writeText(\n\t\tTEKMEMO_PATHS.notesMemory,\n\t\t`${nextNotes.trimEnd()}\\n`,\n\t);\n\n\tconst eventId = `evt_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n\tconst event = {\n\t\tid: eventId,\n\t\ttype: \"memory.created\",\n\t\ttimestamp,\n\t\tsourcePath: TEKMEMO_PATHS.notesMemory,\n\t\tactor,\n\t\tsummary:\n\t\t\toptions.title ??\n\t\t\tcontent.split(/\\r?\\n/)[0]?.slice(0, 140) ??\n\t\t\t\"Stored memory note\",\n\t\tmetadata: {\n\t\t\tkind,\n\t\t\ttags,\n\t\t\tconfidence,\n\t\t\t...(options.source ? { source: options.source } : {}),\n\t\t\t...(metadata ? { userMetadata: metadata } : {}),\n\t\t\tcreatedBy: \"@tekmemo/cli\",\n\t\t},\n\t};\n\tawait options.fs.appendText(\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t\tstringifyJsonl([event]),\n\t);\n\n\tconst data = {\n\t\tstored: true,\n\t\teventId,\n\t\tpath: TEKMEMO_PATHS.notesMemory,\n\t\tkind,\n\t\ttags,\n\t\tconfidence,\n\t\tsecretFindings: findings,\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"remember\", data);\n\telse\n\t\toptions.output.success(\n\t\t\t`Stored ${kind} memory in ${TEKMEMO_PATHS.notesMemory}`,\n\t\t);\n\treturn 0;\n}\n","import { CliUsageError } from \"../errors/cli-errors\";\n\nexport function validateSnapshotLabel(label: string): string {\n\tif (typeof label !== \"string\" || label.trim().length === 0) {\n\t\tthrow new CliUsageError(\"Snapshot label must be a non-empty string.\");\n\t}\n\n\tconst normalized = label.trim();\n\tif (normalized.length > 80) {\n\t\tthrow new CliUsageError(\"Snapshot label must be 80 characters or fewer.\");\n\t}\n\n\tif (normalized.includes(\"\\0\")) {\n\t\tthrow new CliUsageError(\"Snapshot label must not contain null bytes.\");\n\t}\n\n\tif (!/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/.test(normalized)) {\n\t\tthrow new CliUsageError(\n\t\t\t\"Snapshot label may only contain letters, numbers, dots, underscores, and hyphens, and must start with a letter or number.\",\n\t\t);\n\t}\n\n\treturn normalized;\n}\n\nexport function createSafeIdFromLabel(\n\tlabel: string,\n\ttimestamp = new Date().toISOString(),\n): string {\n\tconst safeLabel = validateSnapshotLabel(label);\n\tconst safeTimestamp = timestamp.replace(/[:.]/g, \"-\");\n\treturn `${safeLabel}-${safeTimestamp}`.slice(0, 120);\n}\n","import { createHash } from \"node:crypto\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { REQUIRED_FILES, TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { stringifyJsonl } from \"../protocol/jsonl\";\nimport { createSafeIdFromLabel, validateSnapshotLabel } from \"../utils/labels\";\n\nexport interface SnapshotCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tlabel: string;\n}\n\ninterface SnapshotBundle {\n\tid: string;\n\tlabel: string;\n\tcreatedAt: string;\n\tprotocolVersion: string;\n\tfiles: Record<string, string>;\n\tchecksum: string;\n}\n\nfunction checksum(value: unknown): string {\n\treturn createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\");\n}\n\nexport async function runSnapshotCommand(\n\toptions: SnapshotCommandOptions,\n): Promise<number> {\n\tconst label = validateSnapshotLabel(options.label);\n\tconst createdAt = new Date().toISOString();\n\tconst id = createSafeIdFromLabel(label, createdAt);\n\tconst path = `${TEKMEMO_PATHS.snapshotsDir}/${id}.json`;\n\tconst files: Record<string, string> = {};\n\n\tfor (const filePath of REQUIRED_FILES) {\n\t\tconst content = await options.fs.readTextIfExists(filePath);\n\t\tif (content !== undefined) files[filePath] = content;\n\t}\n\n\tconst bundleWithoutChecksum = {\n\t\tid,\n\t\tlabel,\n\t\tcreatedAt,\n\t\tprotocolVersion: \"1\",\n\t\tfiles,\n\t};\n\tconst bundle: SnapshotBundle = {\n\t\t...bundleWithoutChecksum,\n\t\tchecksum: checksum(bundleWithoutChecksum),\n\t};\n\n\tawait options.fs.writeText(path, `${JSON.stringify(bundle, null, 2)}\\n`);\n\n\tconst record = {\n\t\tid,\n\t\tpath,\n\t\ttype: \"manual\",\n\t\tstatus: \"available\",\n\t\tcreatedAt,\n\t\tchecksum: bundle.checksum,\n\t\tmetadata: {\n\t\t\tlabel,\n\t\t\tfileCount: Object.keys(files).length,\n\t\t\tcreatedBy: \"@tekmemo/cli\",\n\t\t},\n\t};\n\n\tawait options.fs.appendText(\n\t\tTEKMEMO_PATHS.snapshots,\n\t\tstringifyJsonl([record]),\n\t);\n\tawait options.fs.appendText(\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t\tstringifyJsonl([\n\t\t\t{\n\t\t\t\tid: `evt_${id}`,\n\t\t\t\ttype: \"snapshot.created\",\n\t\t\t\ttimestamp: createdAt,\n\t\t\t\tsourcePath: path,\n\t\t\t\tactor: { type: \"system\", id: \"@tekmemo/cli\" },\n\t\t\t\tsummary: `Created snapshot ${label}`,\n\t\t\t\tmetadata: { snapshotId: id, label, checksum: bundle.checksum },\n\t\t\t},\n\t\t]),\n\t);\n\n\tconst data = {\n\t\tid,\n\t\tlabel,\n\t\tpath,\n\t\tcreatedAt,\n\t\tchecksum: bundle.checksum,\n\t\tfileCount: Object.keys(files).length,\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"snapshot\", data);\n\telse options.output.success(`Created snapshot \"${label}\" at ${path}`);\n\treturn 0;\n}\n","import type { z } from \"zod\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport {\n\tREQUIRED_DIRS,\n\tREQUIRED_FILES,\n\tTEKMEMO_PATHS,\n} from \"../protocol/constants\";\nimport { parseManifest } from \"../protocol/manifest\";\nimport {\n\tConversationEntrySchema,\n\tMemoryChunkSchema,\n\tMemoryEventSchema,\n\tSnapshotEntrySchema,\n} from \"../protocol/schemas\";\n\nexport interface ValidateCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n}\n\ninterface ValidateIssue {\n\tcode: string;\n\tmessage: string;\n}\n\nexport async function runValidateCommand(\n\toptions: ValidateCommandOptions,\n): Promise<number> {\n\tconst issues: ValidateIssue[] = [];\n\n\tfor (const dir of REQUIRED_DIRS) {\n\t\tconst exists = await options.fs.exists(dir);\n\t\tif (!exists) {\n\t\t\tissues.push({\n\t\t\t\tcode: \"missing_dir\",\n\t\t\t\tmessage: `Missing required directory: ${dir}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const file of REQUIRED_FILES) {\n\t\tconst exists = await options.fs.exists(file);\n\t\tif (!exists) {\n\t\t\tissues.push({\n\t\t\t\tcode: \"missing_file\",\n\t\t\t\tmessage: `Missing required file: ${file}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst manifestContent = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.manifest,\n\t);\n\tif (manifestContent === undefined) {\n\t\tissues.push({\n\t\t\tcode: \"missing_manifest\",\n\t\t\tmessage: \"manifest.json is missing\",\n\t\t});\n\t} else {\n\t\ttry {\n\t\t\tconst manifest = parseManifest(manifestContent);\n\t\t\tfor (const key of [\"core\", \"notes\"] as const) {\n\t\t\t\tconst filePath = manifest.memory[key];\n\t\t\t\tconst exists = await options.fs.exists(filePath);\n\t\t\t\tif (!exists) {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tcode: \"manifest_ref_missing\",\n\t\t\t\t\t\tmessage: `Manifest references ${filePath} but file is missing`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tissues.push({\n\t\t\t\tcode: \"invalid_manifest\",\n\t\t\t\tmessage: `manifest.json: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst strictSchemas: Record<string, z.ZodSchema> = {\n\t\t[TEKMEMO_PATHS.memoryEvents]: MemoryEventSchema,\n\t\t[TEKMEMO_PATHS.conversations]: ConversationEntrySchema,\n\t\t[TEKMEMO_PATHS.chunks]: MemoryChunkSchema,\n\t\t[TEKMEMO_PATHS.snapshots]: SnapshotEntrySchema,\n\t};\n\n\tfor (const [file, schema] of Object.entries(strictSchemas)) {\n\t\tconst content = await options.fs.readTextIfExists(file);\n\t\tif (content === undefined) continue;\n\n\t\tconst lines = content.split(/\\r?\\n/);\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]?.trim();\n\t\t\tif (!line) continue;\n\n\t\t\tconst lineNumber = i + 1;\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(line);\n\t\t\t} catch {\n\t\t\t\tissues.push({\n\t\t\t\t\tcode: \"invalid_json\",\n\t\t\t\t\tmessage: `${file}:${lineNumber}: Invalid JSON`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst result = schema.safeParse(parsed);\n\t\t\tif (!result.success) {\n\t\t\t\tconst firstIssue = result.error.issues[0];\n\t\t\t\tconst path = firstIssue?.path.join(\".\") ?? \"unknown\";\n\t\t\t\tconst msg = firstIssue?.message ?? \"validation failed\";\n\t\t\t\tissues.push({\n\t\t\t\t\tcode: \"schema_violation\",\n\t\t\t\t\tmessage: `${file}:${lineNumber}: ${path} — ${msg}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst ok = issues.length === 0;\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify({ ok, issues }, null, 2));\n\t} else if (ok) {\n\t\toptions.output.success(\"Validation passed. All protocol files are valid.\");\n\t} else {\n\t\toptions.output.error(\n\t\t\t[\n\t\t\t\t\"Validation failed:\",\n\t\t\t\t...issues.map((issue) => `- [${issue.code}] ${issue.message}`),\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\treturn ok ? 0 : 1;\n}\n","import type {\n\tResolvedCliRuntimeConfig,\n\tTekMemoReadPolicy,\n\tTekMemoWritePolicy,\n} from \"../config\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport {\n\ttype CliOutput,\n\tcreateBufferedOutput,\n\tprintJsonEnvelope,\n} from \"../output/output\";\nimport {\n\trunCloudContextCommand,\n\trunCloudReadCommand,\n\trunCloudRememberCommand,\n\trunCloudSnapshotCommand,\n\trunCloudValidateCommand,\n} from \"./cloud\";\nimport { runContextCommand } from \"./context\";\nimport { runReadCommand } from \"./read\";\nimport { runRememberCommand } from \"./remember\";\nimport { runSnapshotCommand } from \"./snapshot\";\nimport { runValidateCommand } from \"./validate\";\n\nexport interface RuntimeCommandBaseOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tstdinContent?: string | undefined;\n\tconfig: ResolvedCliRuntimeConfig;\n}\n\nexport interface RuntimeContextCommandOptions\n\textends RuntimeCommandBaseOptions {\n\tquery?: string | undefined;\n\tmaxChars?: number | string | undefined;\n\tincludeEvents?: boolean | undefined;\n\tincludeChunks?: boolean | undefined;\n}\n\nexport interface RuntimeRememberCommandOptions\n\textends RuntimeCommandBaseOptions {\n\tcontent?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tkind?: string | undefined;\n\ttitle?: string | undefined;\n\ttags?: string[] | undefined;\n\tconfidence?: string | number | undefined;\n\tsource?: string | undefined;\n\tactor?: string | undefined;\n\tmetadata?: string | undefined;\n\tallowSecrets?: boolean | undefined;\n}\n\nexport interface RuntimeReadCommandOptions extends RuntimeCommandBaseOptions {\n\ttarget: \"core\" | \"notes\" | \"manifest\";\n}\n\nexport interface RuntimeValidateCommandOptions\n\textends RuntimeCommandBaseOptions {}\n\nexport interface RuntimeSnapshotCommandOptions\n\textends RuntimeCommandBaseOptions {\n\tlabel?: string | undefined;\n}\n\nexport async function runRuntimeContextCommand(\n\toptions: RuntimeContextCommandOptions,\n): Promise<number> {\n\tif (options.config.runtime === \"cloud\") {\n\t\treturn runCloudContextCommand({\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\t...options.config.cloud,\n\t\t\tquery: options.query ?? \"project context\",\n\t\t\tmaxBytes: options.maxChars,\n\t\t});\n\t}\n\n\tif (options.config.runtime === \"local\") {\n\t\treturn runContextCommand({\n\t\t\tfs: options.fs,\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\tquery: options.query,\n\t\t\tmaxChars: options.maxChars,\n\t\t\tincludeEvents: options.includeEvents,\n\t\t\tincludeChunks: options.includeChunks,\n\t\t});\n\t}\n\n\treturn runHybridContextCommand(options);\n}\n\nexport async function runRuntimeRememberCommand(\n\toptions: RuntimeRememberCommandOptions,\n): Promise<number> {\n\tif (options.config.runtime === \"cloud\")\n\t\treturn runCloudRememberFromRuntime(options);\n\tif (options.config.runtime === \"local\")\n\t\treturn runLocalRememberFromRuntime(options);\n\treturn runWritePolicy(\n\t\toptions.config.hybrid.writePolicy,\n\t\t() => runLocalRememberFromRuntime(options),\n\t\t() => runCloudRememberFromRuntime(options),\n\t);\n}\n\nexport async function runRuntimeReadCommand(\n\toptions: RuntimeReadCommandOptions,\n): Promise<number> {\n\tif (options.target === \"manifest\") return runLocalReadFromRuntime(options);\n\tif (options.config.runtime === \"cloud\")\n\t\treturn runCloudReadFromRuntime(options);\n\tif (options.config.runtime === \"local\")\n\t\treturn runLocalReadFromRuntime(options);\n\treturn runReadPolicy(\n\t\toptions.config.hybrid.readPolicy,\n\t\t() => runLocalReadFromRuntime(options),\n\t\t() => runCloudReadFromRuntime(options),\n\t);\n}\n\nexport async function runRuntimeValidateCommand(\n\toptions: RuntimeValidateCommandOptions,\n): Promise<number> {\n\tif (options.config.runtime === \"cloud\")\n\t\treturn runCloudValidateCommand({\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\t...options.config.cloud,\n\t\t});\n\tif (options.config.runtime === \"local\")\n\t\treturn runValidateCommand({\n\t\t\tfs: options.fs,\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t});\n\n\tconst local = createBufferedOutput({ noColor: true });\n\tconst cloud = createBufferedOutput({ noColor: true });\n\tconst localExit = await runValidateCommand({\n\t\tfs: options.fs,\n\t\toutput: local,\n\t\tjson: options.json,\n\t});\n\tconst cloudExit = await runCloudValidateCommand({\n\t\toutput: cloud,\n\t\tjson: options.json,\n\t\t...options.config.cloud,\n\t}).catch((error: unknown) => {\n\t\tcloud.error(error instanceof Error ? error.message : String(error));\n\t\treturn 1;\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"validate\", {\n\t\t\truntime: \"hybrid\",\n\t\t\tlocal: {\n\t\t\t\texitCode: localExit,\n\t\t\t\tstdout: local.stdout,\n\t\t\t\tstderr: local.stderr,\n\t\t\t},\n\t\t\tcloud: {\n\t\t\t\texitCode: cloudExit,\n\t\t\t\tstdout: cloud.stdout,\n\t\t\t\tstderr: cloud.stderr,\n\t\t\t},\n\t\t});\n\t\treturn localExit === 0 && cloudExit === 0 ? 0 : 1;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t\"# Local validation\",\n\t\t\t...local.stdout,\n\t\t\t\"\",\n\t\t\t\"# Cloud validation\",\n\t\t\t...cloud.stdout,\n\t\t].join(\"\\n\"),\n\t);\n\tfor (const line of [...local.stderr, ...cloud.stderr])\n\t\toptions.output.error(line);\n\treturn localExit === 0 && cloudExit === 0 ? 0 : 1;\n}\n\nexport async function runRuntimeSnapshotCommand(\n\toptions: RuntimeSnapshotCommandOptions,\n): Promise<number> {\n\tif (options.config.runtime === \"cloud\")\n\t\treturn runCloudSnapshotCommand({\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\t...options.config.cloud,\n\t\t\tlabel: options.label,\n\t\t});\n\tif (options.config.runtime === \"local\")\n\t\treturn runSnapshotCommand({\n\t\t\tfs: options.fs,\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\tlabel: options.label ?? \"manual\",\n\t\t});\n\treturn runWritePolicy(\n\t\toptions.config.hybrid.writePolicy,\n\t\t() =>\n\t\t\trunSnapshotCommand({\n\t\t\t\tfs: options.fs,\n\t\t\t\toutput: options.output,\n\t\t\t\tjson: options.json,\n\t\t\t\tlabel: options.label ?? \"manual\",\n\t\t\t}),\n\t\t() =>\n\t\t\trunCloudSnapshotCommand({\n\t\t\t\toutput: options.output,\n\t\t\t\tjson: options.json,\n\t\t\t\t...options.config.cloud,\n\t\t\t\tlabel: options.label,\n\t\t\t}),\n\t);\n}\n\nasync function runHybridContextCommand(\n\toptions: RuntimeContextCommandOptions,\n): Promise<number> {\n\tconst readPolicy = options.config.hybrid.readPolicy;\n\tif (readPolicy === \"local-only\") {\n\t\treturn runContextCommand({\n\t\t\tfs: options.fs,\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\tquery: options.query,\n\t\t\tmaxChars: options.maxChars,\n\t\t\tincludeEvents: options.includeEvents,\n\t\t\tincludeChunks: options.includeChunks,\n\t\t});\n\t}\n\tif (readPolicy === \"cloud-only\") {\n\t\treturn runCloudContextCommand({\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\t...options.config.cloud,\n\t\t\tquery: options.query ?? \"project context\",\n\t\t\tmaxBytes: options.maxChars,\n\t\t});\n\t}\n\n\tconst local = createBufferedOutput({ noColor: true });\n\tconst cloud = createBufferedOutput({ noColor: true });\n\tconst localExit = await runContextCommand({\n\t\tfs: options.fs,\n\t\toutput: local,\n\t\tjson: false,\n\t\tquery: options.query,\n\t\tmaxChars: options.maxChars,\n\t\tincludeEvents: options.includeEvents,\n\t\tincludeChunks: options.includeChunks,\n\t});\n\tconst cloudExit = await runCloudContextCommand({\n\t\toutput: cloud,\n\t\tjson: false,\n\t\t...options.config.cloud,\n\t\tquery: options.query ?? \"project context\",\n\t\tmaxBytes: options.maxChars,\n\t}).catch((error: unknown) => {\n\t\tcloud.error(error instanceof Error ? error.message : String(error));\n\t\treturn 1;\n\t});\n\tconst first =\n\t\treadPolicy === \"cloud-first\"\n\t\t\t? { label: \"Cloud\", out: cloud, code: cloudExit }\n\t\t\t: { label: \"Local\", out: local, code: localExit };\n\tconst second =\n\t\treadPolicy === \"cloud-first\"\n\t\t\t? { label: \"Local\", out: local, code: localExit }\n\t\t\t: { label: \"Cloud\", out: cloud, code: cloudExit };\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"context\", {\n\t\t\truntime: \"hybrid\",\n\t\t\treadPolicy,\n\t\t\t[first.label.toLowerCase()]: {\n\t\t\t\texitCode: first.code,\n\t\t\t\tstdout: first.out.stdout,\n\t\t\t\tstderr: first.out.stderr,\n\t\t\t},\n\t\t\t[second.label.toLowerCase()]: {\n\t\t\t\texitCode: second.code,\n\t\t\t\tstdout: second.out.stdout,\n\t\t\t\tstderr: second.out.stderr,\n\t\t\t},\n\t\t});\n\t\treturn first.code === 0 || second.code === 0 ? 0 : 1;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`# TekMemo Hybrid Context`,\n\t\t\t`Read policy: ${readPolicy}`,\n\t\t\t\"\",\n\t\t\t`## ${first.label} Context`,\n\t\t\t...first.out.stdout,\n\t\t\t\"\",\n\t\t\t`## ${second.label} Context`,\n\t\t\t...second.out.stdout,\n\t\t].join(\"\\n\"),\n\t);\n\tfor (const line of [...first.out.stderr, ...second.out.stderr])\n\t\toptions.output.error(line);\n\treturn first.code === 0 || second.code === 0 ? 0 : 1;\n}\n\nasync function runLocalRememberFromRuntime(\n\toptions: RuntimeRememberCommandOptions,\n): Promise<number> {\n\treturn runRememberCommand({\n\t\tfs: options.fs,\n\t\toutput: options.output,\n\t\tjson: options.json,\n\t\tcontent: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t\tkind: options.kind,\n\t\ttitle: options.title,\n\t\ttags: options.tags,\n\t\tconfidence: options.confidence,\n\t\tsource: options.source,\n\t\tactor: options.actor,\n\t\tmetadata: options.metadata,\n\t\tallowSecrets: options.allowSecrets,\n\t});\n}\n\nasync function runCloudRememberFromRuntime(\n\toptions: RuntimeRememberCommandOptions,\n): Promise<number> {\n\treturn runCloudRememberCommand({\n\t\toutput: options.output,\n\t\tjson: options.json,\n\t\trootDir: options.config.root,\n\t\tstdinContent: options.stdinContent,\n\t\t...options.config.cloud,\n\t\tcontent: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tkind: options.kind,\n\t\ttitle: options.title,\n\t\ttags: options.tags,\n\t\tconfidence: options.confidence,\n\t\tsource: options.source,\n\t\tmetadata: options.metadata,\n\t\tallowSecrets: options.allowSecrets,\n\t});\n}\n\nasync function runLocalReadFromRuntime(\n\toptions: RuntimeReadCommandOptions,\n): Promise<number> {\n\treturn runReadCommand({\n\t\tfs: options.fs,\n\t\toutput: options.output,\n\t\tjson: options.json,\n\t\ttarget: options.target,\n\t});\n}\n\nasync function runCloudReadFromRuntime(\n\toptions: RuntimeReadCommandOptions,\n): Promise<number> {\n\tif (options.target === \"manifest\") {\n\t\tthrow new Error(\n\t\t\t\"Cloud runtime cannot read local manifest. Use --runtime local or read core/notes.\",\n\t\t);\n\t}\n\treturn runCloudReadCommand({\n\t\toutput: options.output,\n\t\tjson: options.json,\n\t\t...options.config.cloud,\n\t\ttarget: options.target,\n\t});\n}\n\nasync function runReadPolicy(\n\tpolicy: TekMemoReadPolicy,\n\tlocal: () => Promise<number>,\n\tcloud: () => Promise<number>,\n): Promise<number> {\n\tif (policy === \"local-only\") return local();\n\tif (policy === \"cloud-only\") return cloud();\n\tif (policy === \"cloud-first\") {\n\t\tconst cloudCode = await cloud();\n\t\treturn cloudCode === 0 ? cloudCode : local();\n\t}\n\tconst localCode = await local();\n\treturn localCode === 0 ? localCode : cloud();\n}\n\nasync function runWritePolicy(\n\tpolicy: TekMemoWritePolicy,\n\tlocal: () => Promise<number>,\n\tcloud: () => Promise<number>,\n): Promise<number> {\n\tif (policy === \"local-only\") return local();\n\tif (policy === \"cloud-only\") return cloud();\n\tif (policy === \"cloud-first\") {\n\t\tconst cloudCode = await cloud();\n\t\tconst localCode = await local();\n\t\treturn cloudCode === 0 && localCode === 0 ? 0 : 1;\n\t}\n\tconst localCode = await local();\n\tconst cloudCode = await cloud();\n\treturn localCode === 0 && cloudCode === 0 ? 0 : 1;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\n\nexport interface SearchCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tquery: string;\n\tregex?: boolean | undefined;\n}\n\ninterface SearchMatch {\n\tfile: string;\n\tline: number;\n\tcontent: string;\n}\n\nexport async function runSearchCommand(\n\toptions: SearchCommandOptions,\n): Promise<number> {\n\tconst matches: SearchMatch[] = [];\n\n\tconst filesToSearch = [\n\t\tTEKMEMO_PATHS.coreMemory,\n\t\tTEKMEMO_PATHS.notesMemory,\n\t\tTEKMEMO_PATHS.conversations,\n\t];\n\n\tlet matcher: (line: string) => boolean;\n\n\tif (options.regex) {\n\t\tlet pattern: RegExp;\n\t\ttry {\n\t\t\tpattern = new RegExp(options.query, \"i\");\n\t\t} catch {\n\t\t\toptions.output.error(`Invalid regular expression: ${options.query}`);\n\t\t\treturn 1;\n\t\t}\n\t\tmatcher = (line) => pattern.test(line);\n\t} else {\n\t\tconst query = options.query.toLowerCase();\n\t\tmatcher = (line) => line.toLowerCase().includes(query);\n\t}\n\n\tfor (const file of filesToSearch) {\n\t\tconst content = await options.fs.readTextIfExists(file);\n\t\tif (!content) continue;\n\n\t\tconst lines = content.split(/\\r?\\n/);\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i];\n\t\t\tif (line !== undefined && matcher(line)) {\n\t\t\t\tmatches.push({\n\t\t\t\t\tfile,\n\t\t\t\t\tline: i + 1,\n\t\t\t\t\tcontent: line.trim(),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tif (options.json) {\n\t\toptions.output.write(\n\t\t\tJSON.stringify({ query: options.query, matches }, null, 2),\n\t\t);\n\t\treturn 0;\n\t}\n\n\tif (matches.length === 0) {\n\t\toptions.output.write(`No matches found for \"${options.query}\".`);\n\t\treturn 0;\n\t}\n\n\tfor (const match of matches) {\n\t\toptions.output.write(`${match.file}:${match.line}: ${match.content}`);\n\t}\n\toptions.output.success(`Found ${matches.length} match(es).`);\n\n\treturn 0;\n}\n","import { createRequire } from \"node:module\";\nimport { Command, CommanderError } from \"commander\";\nimport {\n\trunAgentCompleteCommand,\n\trunAgentExtractCommand,\n\trunAgentPathsCommand,\n\trunAgentStartCommand,\n\trunChunksCommand,\n\trunCloudBenchmarksRunCommand,\n\trunCloudContextCommand,\n\trunCloudContextComposeCommand,\n\trunCloudEvalsRunCommand,\n\trunCloudExportsCreateCommand,\n\trunCloudExportsDownloadCommand,\n\trunCloudExtractionJobsCommand,\n\trunCloudExtractionRunCommand,\n\trunCloudGraphCreateEdgeCommand,\n\trunCloudGraphCreateNodeCommand,\n\trunCloudGraphListEdgesCommand,\n\trunCloudGraphListNodesCommand,\n\trunCloudGraphNeighborsCommand,\n\trunCloudGraphPathCommand,\n\trunCloudHealthCommand,\n\trunCloudProvidersCreateCommand,\n\trunCloudProvidersListCommand,\n\trunCloudProvidersTestCommand,\n\trunCloudReadCommand,\n\trunCloudReadinessCommand,\n\trunCloudRecallCommand,\n\trunCloudRecallIndexCommand,\n\trunCloudRecentCommand,\n\trunCloudRememberCommand,\n\trunCloudSnapshotCommand,\n\trunCloudSnapshotsCreateCommand,\n\trunCloudSnapshotsDownloadCommand,\n\trunCloudSyncPullCommand,\n\trunCloudSyncPushCommand,\n\trunCloudSyncResolveCommand,\n\trunCloudSyncStatusCommand,\n\trunCloudUpdateCoreCommand,\n\trunCloudValidateCommand,\n\trunDiffCommand,\n\trunDoctorCommand,\n\trunEditCommand,\n\trunEventsCommand,\n\trunInitCommand,\n\trunInspectCommand,\n\trunRuntimeContextCommand,\n\trunRuntimeReadCommand,\n\trunRuntimeRememberCommand,\n\trunRuntimeSnapshotCommand,\n\trunRuntimeValidateCommand,\n\trunSearchCommand,\n} from \"./commands\";\nimport {\n\ttype ResolvedCliRuntimeConfig,\n\tresolveCliRuntimeConfig,\n\ttype TekMemoConfigFile,\n\twriteDefaultCliConfig,\n} from \"./config\";\nimport { CliError } from \"./errors/cli-errors\";\nimport { TekMemoFileSystem } from \"./fs/tekmemo-fs\";\nimport {\n\ttype CliOutput,\n\tcreateBufferedOutput,\n\tprintJsonEnvelope,\n\tprintJsonError,\n} from \"./output/output\";\nimport { parseNonNegativeInteger, parsePositiveInteger } from \"./utils/numbers\";\n\nconst require = createRequire(import.meta.url);\nconst pkg = require(\"../package.json\") as { version: string };\nconst parsePositiveOption = parsePositiveInteger as unknown as (\n\tvalue: string,\n\tprevious: string | undefined,\n) => string;\nconst parseNonNegativeOption = parseNonNegativeInteger as unknown as (\n\tvalue: string,\n\tprevious: string | undefined,\n) => string;\n\nexport interface RunTekMemoCliInput {\n\targv: string[];\n\tcwd?: string;\n\toutput?: CliOutput;\n\tverbose?: boolean;\n\tquiet?: boolean;\n\tnoColor?: boolean;\n\tstdinContent?: string;\n}\n\nexport interface RunTekMemoCliResult {\n\texitCode: number;\n\tstdout: string[];\n\tstderr: string[];\n}\n\nfunction createFs(root: string): TekMemoFileSystem {\n\treturn new TekMemoFileSystem({ rootDir: root });\n}\n\nexport async function runTekMemoCli(\n\tinput: RunTekMemoCliInput,\n): Promise<RunTekMemoCliResult> {\n\tconst output =\n\t\tinput.output ??\n\t\tcreateBufferedOutput(\n\t\t\tinput.noColor === undefined ? undefined : { noColor: input.noColor },\n\t\t);\n\tlet exitCode = 0;\n\tlet currentCommand = \"tekmemo\";\n\tlet wantsJson = input.argv.includes(\"--json\") || input.argv.includes(\"-j\");\n\n\tconst program = new Command();\n\tprogram\n\t\t.name(\"tekmemo\")\n\t\t.description(\n\t\t\t\"Production-grade CLI for TekMemo .tekmemo/ memory, context, validation, snapshots, and agent tools.\",\n\t\t)\n\t\t.version(pkg.version)\n\t\t.option(\n\t\t\t\"-r, --root <path>\",\n\t\t\t\"project root containing .tekmemo/\",\n\t\t\tinput.cwd ?? process.cwd(),\n\t\t)\n\t\t.option(\"--runtime <mode>\", \"runtime mode: local, cloud, or hybrid\")\n\t\t.option(\n\t\t\t\"--cloud-url <url>\",\n\t\t\t\"TekMemo Cloud API URL; defaults to config or TEKMEMO_CLOUD_URL\",\n\t\t)\n\t\t.option(\n\t\t\t\"--api-key <key>\",\n\t\t\t\"TekMemo Cloud API key; defaults to TEKMEMO_API_KEY\",\n\t\t)\n\t\t.option(\"--workspace-id <id>\", \"default cloud workspace ID\")\n\t\t.option(\"--project-id <id>\", \"default cloud project ID\")\n\t\t.option(\n\t\t\t\"--timeout-ms <n>\",\n\t\t\t\"cloud request timeout in milliseconds\",\n\t\t\tparsePositiveOption,\n\t\t)\n\t\t.option(\n\t\t\t\"--read-policy <policy>\",\n\t\t\t\"hybrid read policy: local-first, cloud-first, local-only, cloud-only\",\n\t\t)\n\t\t.option(\n\t\t\t\"--write-policy <policy>\",\n\t\t\t\"hybrid write policy: local-first, cloud-first, local-only, cloud-only\",\n\t\t)\n\t\t.option(\"-j, --json\", \"output machine-readable JSON\", false)\n\t\t.option(\"-v, --verbose\", \"show detailed output\", input.verbose ?? false)\n\t\t.option(\n\t\t\t\"-q, --quiet\",\n\t\t\t\"suppress all output except errors\",\n\t\t\tinput.quiet ?? false,\n\t\t)\n\t\t.option(\"--no-color\", \"disable colored output\", input.noColor ?? false)\n\t\t.exitOverride()\n\t\t.showHelpAfterError()\n\t\t.configureOutput({\n\t\t\twriteOut: (str) => {\n\t\t\t\tif (!program.opts().quiet) output.write(str.trim());\n\t\t\t},\n\t\t\twriteErr: (str) => output.error(str.trim()),\n\t\t\tgetOutHelpWidth: () => 100,\n\t\t\tgetErrHelpWidth: () => 100,\n\t\t});\n\n\tasync function globals(): Promise<{\n\t\troot: string;\n\t\tjson: boolean;\n\t\tverbose: boolean;\n\t\tquiet: boolean;\n\t\tconfig: ResolvedCliRuntimeConfig;\n\t}> {\n\t\tconst opts = program.opts() as {\n\t\t\troot?: string;\n\t\t\tjson?: boolean;\n\t\t\tverbose?: boolean;\n\t\t\tquiet?: boolean;\n\t\t\truntime?: string;\n\t\t\tcloudUrl?: string;\n\t\t\tapiKey?: string;\n\t\t\tworkspaceId?: string;\n\t\t\tprojectId?: string;\n\t\t\ttimeoutMs?: number;\n\t\t\treadPolicy?: string;\n\t\t\twritePolicy?: string;\n\t\t};\n\t\twantsJson = Boolean(opts.json);\n\t\tconst config = await resolveCliRuntimeConfig({\n\t\t\tcwd: input.cwd ?? process.cwd(),\n\t\t\tflags: {\n\t\t\t\troot: opts.root,\n\t\t\t\truntime: opts.runtime,\n\t\t\t\tcloudUrl: opts.cloudUrl,\n\t\t\t\tapiKey: opts.apiKey,\n\t\t\t\tworkspaceId: opts.workspaceId,\n\t\t\t\tprojectId: opts.projectId,\n\t\t\t\ttimeoutMs: opts.timeoutMs,\n\t\t\t\treadPolicy: opts.readPolicy,\n\t\t\t\twritePolicy: opts.writePolicy,\n\t\t\t},\n\t\t});\n\t\treturn {\n\t\t\troot: config.root,\n\t\t\tjson: Boolean(opts.json),\n\t\t\tverbose: Boolean(opts.verbose),\n\t\t\tquiet: Boolean(opts.quiet),\n\t\t\tconfig,\n\t\t};\n\t}\n\n\tprogram\n\t\t.command(\"init\")\n\t\t.description(\"initialize canonical .tekmemo/ files\")\n\t\t.option(\"-f, --force\", \"overwrite existing seed files\", false)\n\t\t.option(\"-p, --project-id <id>\", \"explicit project ID\")\n\t\t.option(\"--no-input\", \"skip interactive prompts\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"init\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runInitCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tforce: options.force,\n\t\t\t\tprojectId: options.projectId,\n\t\t\t\tnoInput: options.noInput ?? !process.stdout.isTTY,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"inspect\")\n\t\t.description(\"summarize local TekMemo memory state\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"inspect\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runInspectCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"context\")\n\t\t.description(\"pack project memory into an agent-friendly context block\")\n\t\t.option(\"-q, --query <query>\", \"prioritize lines matching a task/query\")\n\t\t.option(\n\t\t\t\"--max-chars <n>\",\n\t\t\t\"maximum output characters\",\n\t\t\tparsePositiveOption,\n\t\t\t12000 as unknown as string,\n\t\t)\n\t\t.option(\"--include-events\", \"include recent memory events\", false)\n\t\t.option(\"--include-chunks\", \"include recent chunk records\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"context\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runRuntimeContextCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t\tquery: options.query,\n\t\t\t\tmaxChars: options.maxChars,\n\t\t\t\tincludeEvents: options.includeEvents,\n\t\t\t\tincludeChunks: options.includeChunks,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"remember\")\n\t\t.description(\"store a durable note for humans or coding agents\")\n\t\t.argument(\"[content]\", \"memory content\")\n\t\t.option(\"--stdin\", \"read memory content from stdin\", false)\n\t\t.option(\n\t\t\t\"--file <path>\",\n\t\t\t\"read memory content from a file inside the selected root\",\n\t\t)\n\t\t.option(\n\t\t\t\"-k, --kind <kind>\",\n\t\t\t\"decision | constraint | goal | preference | reference | summary | note\",\n\t\t\t\"note\",\n\t\t)\n\t\t.option(\"--title <title>\", \"optional note title\")\n\t\t.option(\"-t, --tag <tag>\", \"tag to attach; repeatable\", collect, [])\n\t\t.option(\"--confidence <n>\", \"confidence from 0 to 1\")\n\t\t.option(\"--source <source>\", \"source identifier, file, URL, or agent name\")\n\t\t.option(\n\t\t\t\"--actor <actor>\",\n\t\t\t\"actor type or type:id, e.g. agent:claude-code\",\n\t\t\t\"user\",\n\t\t)\n\t\t.option(\"--metadata-json <json>\", \"metadata JSON object\")\n\t\t.option(\n\t\t\t\"--allow-secrets\",\n\t\t\t\"allow content that looks like a secret after manual review\",\n\t\t\tfalse,\n\t\t)\n\t\t.action(async (content, options) => {\n\t\t\tcurrentCommand = \"remember\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runRuntimeRememberCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t\tcontent,\n\t\t\t\tstdin: options.stdin,\n\t\t\t\tfile: options.file,\n\t\t\t\tstdinContent: input.stdinContent,\n\t\t\t\tkind: options.kind,\n\t\t\t\ttitle: options.title,\n\t\t\t\ttags: options.tag,\n\t\t\t\tconfidence: options.confidence,\n\t\t\t\tsource: options.source,\n\t\t\t\tactor: options.actor,\n\t\t\t\tmetadata: options.metadataJson,\n\t\t\t\tallowSecrets: options.allowSecrets,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"read\")\n\t\t.description(\"read a canonical memory document\")\n\t\t.argument(\"<target>\", \"core | notes | manifest\")\n\t\t.action(async (target) => {\n\t\t\tcurrentCommand = \"read\";\n\t\t\tconst g = await globals();\n\t\t\tif (target !== \"core\" && target !== \"notes\" && target !== \"manifest\") {\n\t\t\t\toutput.error(\"read target must be core, notes, or manifest\");\n\t\t\t\texitCode = 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\texitCode = await runRuntimeReadCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t\ttarget,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"events\")\n\t\t.description(\"read memory event log\")\n\t\t.option(\n\t\t\t\"-l, --limit <n>\",\n\t\t\t\"limit number of events\",\n\t\t\tparseNonNegativeOption,\n\t\t\t0 as unknown as string,\n\t\t)\n\t\t.option(\"-s, --strict\", \"strict protocol validation\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"events\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runEventsCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"chunks\")\n\t\t.description(\"read local chunk index\")\n\t\t.option(\n\t\t\t\"-l, --limit <n>\",\n\t\t\t\"limit number of chunks\",\n\t\t\tparseNonNegativeOption,\n\t\t\t0 as unknown as string,\n\t\t)\n\t\t.option(\"-s, --strict\", \"strict protocol validation\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"chunks\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runChunksCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"snapshot\")\n\t\t.description(\"create local memory snapshot bundle\")\n\t\t.option(\"-l, --label <name>\", \"snapshot label\", \"manual\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"snapshot\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runRuntimeSnapshotCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t\tlabel: options.label,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"doctor\")\n\t\t.description(\"find missing or corrupt memory files\")\n\t\t.option(\"-s, --strict\", \"strict protocol validation\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"doctor\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runDoctorCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"validate\")\n\t\t.description(\"strict protocol validation for CI\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"validate\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runRuntimeValidateCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"search\")\n\t\t.description(\"search memory files for a query\")\n\t\t.argument(\"<query>\", \"text to search for\")\n\t\t.option(\"-e, --regex\", \"treat query as a regular expression\", false)\n\t\t.action(async (query, options) => {\n\t\t\tcurrentCommand = \"search\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runSearchCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tquery,\n\t\t\t\tregex: options.regex,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"edit\")\n\t\t.description(\"legacy alias: append a note or core memory text\")\n\t\t.argument(\"<type>\", \"note or core\")\n\t\t.argument(\"<message>\", \"content to append\")\n\t\t.option(\n\t\t\t\"--allow-secrets\",\n\t\t\t\"allow content that looks like a secret after manual review\",\n\t\t\tfalse,\n\t\t)\n\t\t.action(async (type, message, options) => {\n\t\t\tcurrentCommand = \"edit\";\n\t\t\tconst g = await globals();\n\t\t\tif (type !== \"note\" && type !== \"core\") {\n\t\t\t\toutput.error(\"Edit type must be 'note' or 'core'\");\n\t\t\t\texitCode = 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\texitCode = await runEditCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\ttype,\n\t\t\t\tmessage,\n\t\t\t\tallowSecrets: options.allowSecrets,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"diff\")\n\t\t.description(\"compare two memory snapshots by ID or label\")\n\t\t.argument(\"<labelA>\", \"first snapshot ID or label\")\n\t\t.argument(\"<labelB>\", \"second snapshot ID or label\")\n\t\t.action(async (labelA, labelB) => {\n\t\t\tcurrentCommand = \"diff\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runDiffCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tlabelA,\n\t\t\t\tlabelB,\n\t\t\t});\n\t\t});\n\n\tconst agent = program\n\t\t.command(\"agent\")\n\t\t.description(\"manage AgentFS-backed TekMemo coding sessions\");\n\n\tagent\n\t\t.command(\"start\")\n\t\t.description(\n\t\t\t\"start an AgentFS-style workspace for Codex, Claude Code, or another coding agent\",\n\t\t)\n\t\t.requiredOption(\"--task <task>\", \"agent task or brief\")\n\t\t.option(\"--project <id>\", \"project ID\")\n\t\t.option(\"--actor <id>\", \"actor ID, e.g. assistant:codex\")\n\t\t.option(\"--session <id>\", \"explicit safe session ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"agent.start\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runAgentStartCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\ttask: options.task,\n\t\t\t\tprojectId: options.project ?? g.config.cloud.projectId,\n\t\t\t\tactorId: options.actor,\n\t\t\t\tsessionId: options.session,\n\t\t\t});\n\t\t});\n\n\tagent\n\t\t.command(\"paths\")\n\t\t.description(\"print paths for the latest or selected agent session\")\n\t\t.option(\"--session <id>\", \"session ID or latest\", \"latest\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"agent.paths\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runAgentPathsCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tsession: options.session,\n\t\t\t});\n\t\t});\n\n\tagent\n\t\t.command(\"extract\")\n\t\t.description(\n\t\t\t\"extract summary, durable memory, and follow-ups from an agent session\",\n\t\t)\n\t\t.option(\"--session <id>\", \"session ID or latest\", \"latest\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"agent.extract\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runAgentExtractCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tsession: options.session,\n\t\t\t});\n\t\t});\n\n\tagent\n\t\t.command(\"complete\")\n\t\t.description(\n\t\t\t\"complete an agent session and optionally persist durable memory\",\n\t\t)\n\t\t.option(\"--session <id>\", \"session ID or latest\", \"latest\")\n\t\t.option(\n\t\t\t\"--extract\",\n\t\t\t\"append output/durable-memory.md to TekMemo notes\",\n\t\t\tfalse,\n\t\t)\n\t\t.option(\"--checkpoint-label <label>\", \"checkpoint label\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"agent.complete\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runAgentCompleteCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tsession: options.session,\n\t\t\t\textract: options.extract,\n\t\t\t\tcheckpointLabel: options.checkpointLabel,\n\t\t\t});\n\t\t});\n\n\tconst cloud = program\n\t\t.command(\"cloud\")\n\t\t.description(\"use TekMemo Cloud through @tekmemo/cloud-client\")\n\t\t.option(\n\t\t\t\"--cloud-url <url>\",\n\t\t\t\"TekMemo Cloud API URL; defaults to TEKMEMO_CLOUD_URL or TEKMEMO_API_URL\",\n\t\t)\n\t\t.option(\n\t\t\t\"--api-key <key>\",\n\t\t\t\"TekMemo Cloud API key; defaults to TEKMEMO_API_KEY\",\n\t\t)\n\t\t.option(\n\t\t\t\"--workspace-id <id>\",\n\t\t\t\"default cloud workspace ID; defaults to TEKMEMO_WORKSPACE_ID\",\n\t\t)\n\t\t.option(\n\t\t\t\"--project-id <id>\",\n\t\t\t\"default cloud project ID; defaults to TEKMEMO_PROJECT_ID\",\n\t\t)\n\t\t.option(\n\t\t\t\"--timeout-ms <n>\",\n\t\t\t\"cloud request timeout in milliseconds\",\n\t\t\tparsePositiveOption,\n\t\t);\n\n\tasync function cloudGlobals() {\n\t\tconst g = await globals();\n\t\tconst opts = cloud.opts() as {\n\t\t\tcloudUrl?: string;\n\t\t\tapiKey?: string;\n\t\t\tworkspaceId?: string;\n\t\t\tprojectId?: string;\n\t\t\ttimeoutMs?: number;\n\t\t};\n\t\treturn {\n\t\t\t...g,\n\t\t\tcloudUrl: opts.cloudUrl ?? g.config.cloud.cloudUrl,\n\t\t\tapiKey: opts.apiKey ?? g.config.cloud.apiKey,\n\t\t\tworkspaceId: opts.workspaceId ?? g.config.cloud.workspaceId,\n\t\t\tprojectId: opts.projectId ?? g.config.cloud.projectId,\n\t\t\ttimeoutMs: opts.timeoutMs ?? g.config.cloud.timeoutMs,\n\t\t};\n\t}\n\n\tcloud\n\t\t.command(\"health\")\n\t\t.description(\"check TekMemo Cloud health\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"cloud.health\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudHealthCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"context\")\n\t\t.description(\"pack cloud memory into an agent-friendly context block\")\n\t\t.requiredOption(\"-q, --query <query>\", \"task/query used to build context\")\n\t\t.option(\"-l, --limit <n>\", \"maximum recall items\", parsePositiveOption)\n\t\t.option(\"--max-bytes <n>\", \"maximum response bytes\", parsePositiveOption)\n\t\t.option(\"--include-core\", \"include core memory\", true)\n\t\t.option(\"--include-notes\", \"include notes memory\", true)\n\t\t.option(\"--include-recent\", \"include recent memory\", true)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.context\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudContextCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tquery: options.query,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tmaxBytes: options.maxBytes,\n\t\t\t\tincludeCore: options.includeCore,\n\t\t\t\tincludeNotes: options.includeNotes,\n\t\t\t\tincludeRecent: options.includeRecent,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"recall\")\n\t\t.description(\"search TekMemo Cloud memory\")\n\t\t.argument(\"<query>\", \"text to search for\")\n\t\t.option(\"-l, --limit <n>\", \"maximum recall items\", parsePositiveOption)\n\t\t.option(\"--strategy <strategy>\", \"local | vector | hybrid\")\n\t\t.option(\"--fallback <mode>\", \"none | local\")\n\t\t.option(\"--rerank\", \"request reranking\", false)\n\t\t.action(async (query, options) => {\n\t\t\tcurrentCommand = \"cloud.recall\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudRecallCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tquery,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tstrategy: options.strategy,\n\t\t\t\tfallback: options.fallback,\n\t\t\t\trerank: options.rerank,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"index\")\n\t\t.description(\"request TekMemo Cloud recall indexing for the project\")\n\t\t.option(\"--mode <mode>\", \"all | changed | core | notes\", \"changed\")\n\t\t.option(\"--force\", \"force re-indexing\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.index\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudRecallIndexCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tmode: options.mode,\n\t\t\t\tforce: options.force,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"remember\")\n\t\t.description(\"store durable memory in TekMemo Cloud\")\n\t\t.argument(\"[content]\", \"memory content\")\n\t\t.option(\"--stdin\", \"read memory content from stdin\", false)\n\t\t.option(\n\t\t\t\"--file <path>\",\n\t\t\t\"read memory content from a file inside the selected root\",\n\t\t)\n\t\t.option(\n\t\t\t\"-k, --kind <kind>\",\n\t\t\t\"decision | constraint | goal | preference | reference | summary | note\",\n\t\t\t\"note\",\n\t\t)\n\t\t.option(\"--title <title>\", \"optional note title\")\n\t\t.option(\"-t, --tag <tag>\", \"tag to attach; repeatable\", collect, [])\n\t\t.option(\"--confidence <n>\", \"confidence from 0 to 1\")\n\t\t.option(\"--source <source>\", \"source identifier, file, URL, or agent name\")\n\t\t.option(\"--metadata-json <json>\", \"metadata JSON object\")\n\t\t.option(\n\t\t\t\"--allow-secrets\",\n\t\t\t\"allow content that looks like a secret after manual review\",\n\t\t\tfalse,\n\t\t)\n\t\t.action(async (content, options) => {\n\t\t\tcurrentCommand = \"cloud.remember\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudRememberCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\trootDir: g.root,\n\t\t\t\tstdinContent: input.stdinContent,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tcontent,\n\t\t\t\tstdin: options.stdin,\n\t\t\t\tfile: options.file,\n\t\t\t\tkind: options.kind,\n\t\t\t\ttitle: options.title,\n\t\t\t\ttags: options.tag,\n\t\t\t\tconfidence: options.confidence,\n\t\t\t\tsource: options.source,\n\t\t\t\tmetadata: options.metadataJson,\n\t\t\t\tallowSecrets: options.allowSecrets,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"read\")\n\t\t.description(\"read a TekMemo Cloud memory document\")\n\t\t.argument(\"<target>\", \"core | notes\")\n\t\t.option(\n\t\t\t\"-l, --limit <n>\",\n\t\t\t\"maximum notes when target is notes\",\n\t\t\tparsePositiveOption,\n\t\t)\n\t\t.action(async (target, options) => {\n\t\t\tcurrentCommand = \"cloud.read\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\tif (target !== \"core\" && target !== \"notes\") {\n\t\t\t\toutput.error(\"cloud read target must be core or notes\");\n\t\t\t\texitCode = 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\texitCode = await runCloudReadCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\ttarget,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"update-core\")\n\t\t.description(\"replace TekMemo Cloud core memory\")\n\t\t.argument(\"[content]\", \"new core memory content\")\n\t\t.option(\"--stdin\", \"read core memory from stdin\", false)\n\t\t.option(\n\t\t\t\"--file <path>\",\n\t\t\t\"read core memory from a file inside the selected root\",\n\t\t)\n\t\t.option(\n\t\t\t\"--allow-secrets\",\n\t\t\t\"allow content that looks like a secret after manual review\",\n\t\t\tfalse,\n\t\t)\n\t\t.action(async (content, options) => {\n\t\t\tcurrentCommand = \"cloud.update-core\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudUpdateCoreCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\trootDir: g.root,\n\t\t\t\tstdinContent: input.stdinContent,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tcontent,\n\t\t\t\tstdin: options.stdin,\n\t\t\t\tfile: options.file,\n\t\t\t\tallowSecrets: options.allowSecrets,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"recent\")\n\t\t.description(\"list recent TekMemo Cloud memory events\")\n\t\t.option(\"-l, --limit <n>\", \"maximum recent items\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.recent\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudRecentCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"validate\")\n\t\t.description(\"validate TekMemo Cloud memory\")\n\t\t.option(\"-s, --strict\", \"strict protocol validation\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.validate\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudValidateCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"snapshot\")\n\t\t.description(\"explain TekMemo Cloud snapshot availability\")\n\t\t.option(\"-l, --label <name>\", \"snapshot label\", \"manual\")\n\t\t.option(\n\t\t\t\"--type <type>\",\n\t\t\t\"manual | automatic | pre-sync | pre-restore\",\n\t\t\t\"manual\",\n\t\t)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.snapshot\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSnapshotCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlabel: options.label,\n\t\t\t\ttype: options.type,\n\t\t\t});\n\t\t});\n\n\tconst sync = cloud\n\t\t.command(\"sync\")\n\t\t.description(\"use TekMemo Cloud memory sync APIs\");\n\n\tsync\n\t\t.command(\"status\")\n\t\t.description(\"read cloud sync status\")\n\t\t.option(\"--client-id <id>\", \"optional sync client ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.sync.status\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSyncStatusCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tclientId: options.clientId,\n\t\t\t});\n\t\t});\n\n\tsync\n\t\t.command(\"pull\")\n\t\t.description(\"pull cloud sync events\")\n\t\t.requiredOption(\"--client-id <id>\", \"sync client ID\")\n\t\t.option(\n\t\t\t\"--since-server-version <n>\",\n\t\t\t\"pull events after this server version\",\n\t\t\tparseNonNegativeOption,\n\t\t)\n\t\t.option(\"-l, --limit <n>\", \"maximum events to return\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.sync.pull\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSyncPullCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tclientId: options.clientId,\n\t\t\t\tsinceServerVersion: options.sinceServerVersion,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tsync\n\t\t.command(\"push\")\n\t\t.description(\"push local sync events to TekMemo Cloud\")\n\t\t.requiredOption(\"--client-id <id>\", \"sync client ID\")\n\t\t.option(\"--events-json <json>\", \"event array or object with events array\")\n\t\t.option(\"--checkpoint-json <json>\", \"optional checkpoint JSON object\")\n\t\t.option(\"--stdin\", \"read events JSON from stdin\", false)\n\t\t.option(\n\t\t\t\"--file <path>\",\n\t\t\t\"read events JSON from a file inside the selected root\",\n\t\t)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.sync.push\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSyncPushCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\trootDir: g.root,\n\t\t\t\tstdinContent: input.stdinContent,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tclientId: options.clientId,\n\t\t\t\teventsJson: options.eventsJson,\n\t\t\t\tcheckpointJson: options.checkpointJson,\n\t\t\t\tstdin: options.stdin,\n\t\t\t\tfile: options.file,\n\t\t\t});\n\t\t});\n\n\tsync\n\t\t.command(\"resolve\")\n\t\t.description(\"resolve a cloud sync conflict\")\n\t\t.argument(\"<conflictId>\", \"conflict ID\")\n\t\t.requiredOption(\n\t\t\t\"--resolution <resolution>\",\n\t\t\t\"keep_cloud | use_client | ignore\",\n\t\t)\n\t\t.option(\"--content-json <json>\", \"optional resolution content JSON object\")\n\t\t.action(async (conflictId, options) => {\n\t\t\tcurrentCommand = \"cloud.sync.resolve\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSyncResolveCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tconflictId,\n\t\t\t\tresolution: options.resolution,\n\t\t\t\tcontentJson: options.contentJson,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"readiness\")\n\t\t.description(\"check TekMemo Cloud readiness\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"cloud.readiness\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudReadinessCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"context-compose\")\n\t\t.description(\"compose full context package from cloud\")\n\t\t.requiredOption(\"-q, --query <query>\", \"task/query used to build context\")\n\t\t.option(\"-l, --limit <n>\", \"maximum recall items\", parsePositiveOption)\n\t\t.option(\"--strategy <strategy>\", \"auto | vector | local\")\n\t\t.option(\"--rerank\", \"request reranking\", false)\n\t\t.option(\"--include-core-memory\", \"include core memory\", true)\n\t\t.option(\"--include-recall-results\", \"include recall results\", true)\n\t\t.option(\"--include-graph-context\", \"include graph context\", true)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.context-compose\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudContextComposeCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tquery: options.query,\n\t\t\t\ttopK: options.limit,\n\t\t\t\tstrategy: options.strategy,\n\t\t\t\trerank: options.rerank,\n\t\t\t\tincludeCoreMemory: options.includeCoreMemory,\n\t\t\t\tincludeRecallResults: options.includeRecallResults,\n\t\t\t\tincludeGraphContext: options.includeGraphContext,\n\t\t\t});\n\t\t});\n\n\tconst graph = cloud.command(\"graph\").description(\"graph memory operations\");\n\n\tgraph\n\t\t.command(\"list-nodes\")\n\t\t.description(\"list graph nodes\")\n\t\t.option(\"-l, --limit <n>\", \"maximum nodes to return\", parsePositiveOption)\n\t\t.option(\"--cursor <string>\", \"pagination cursor\")\n\t\t.option(\"--status <status>\", \"active | deprecated | conflicted | deleted\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.list-nodes\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphListNodesCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tcursor: options.cursor,\n\t\t\t\tstatus: options.status,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"create-node\")\n\t\t.description(\"create a graph node\")\n\t\t.requiredOption(\"--node-id <id>\", \"node ID\")\n\t\t.requiredOption(\"--type <type>\", \"node type\")\n\t\t.requiredOption(\"--label <label>\", \"node label\")\n\t\t.option(\"--summary <summary>\", \"node summary\")\n\t\t.option(\"--aliases <aliases>\", \"comma-separated aliases\")\n\t\t.option(\"--metadata-json <json>\", \"metadata JSON object\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.create-node\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\tconst aliases = options.aliases\n\t\t\t\t? options.aliases.split(\",\").map((s: string) => s.trim())\n\t\t\t\t: undefined;\n\t\t\texitCode = await runCloudGraphCreateNodeCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tnodeId: options.nodeId,\n\t\t\t\ttype: options.type,\n\t\t\t\tlabel: options.label,\n\t\t\t\tsummary: options.summary,\n\t\t\t\taliases,\n\t\t\t\tmetadataJson: options.metadataJson,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"list-edges\")\n\t\t.description(\"list graph edges\")\n\t\t.option(\"-l, --limit <n>\", \"maximum edges to return\", parsePositiveOption)\n\t\t.option(\"--cursor <string>\", \"pagination cursor\")\n\t\t.option(\"--status <status>\", \"active | deprecated | conflicted | deleted\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.list-edges\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphListEdgesCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tcursor: options.cursor,\n\t\t\t\tstatus: options.status,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"create-edge\")\n\t\t.description(\"create a graph edge\")\n\t\t.option(\"--edge-id <id>\", \"edge ID\")\n\t\t.requiredOption(\"--from <id>\", \"from node ID\")\n\t\t.requiredOption(\"--to <id>\", \"to node ID\")\n\t\t.requiredOption(\"--type <type>\", \"edge type\")\n\t\t.option(\"--directed\", \"directed edge\", true)\n\t\t.option(\"--weight <n>\", \"edge weight (0-1)\", parsePositiveOption)\n\t\t.option(\"--metadata-json <json>\", \"metadata JSON object\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.create-edge\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphCreateEdgeCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tedgeId: options.edgeId,\n\t\t\t\tfromNodeId: options.from,\n\t\t\t\ttoNodeId: options.to,\n\t\t\t\ttype: options.type,\n\t\t\t\tdirected: options.directed,\n\t\t\t\tweight: options.weight,\n\t\t\t\tmetadataJson: options.metadataJson,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"neighbors\")\n\t\t.description(\"find graph neighbors\")\n\t\t.requiredOption(\"--node-id <id>\", \"seed node ID\")\n\t\t.option(\"--direction <dir>\", \"in | out | both\")\n\t\t.option(\"--depth <n>\", \"search depth\", parsePositiveOption)\n\t\t.option(\"-l, --limit <n>\", \"maximum results\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.neighbors\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphNeighborsCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tnodeId: options.nodeId,\n\t\t\t\tdirection: options.direction,\n\t\t\t\tdepth: options.depth,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"path\")\n\t\t.description(\"find graph path between nodes\")\n\t\t.requiredOption(\"--from <id>\", \"start node ID\")\n\t\t.requiredOption(\"--to <id>\", \"target node ID\")\n\t\t.option(\"--max-depth <n>\", \"maximum search depth\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.path\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphPathCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tfromNodeId: options.from,\n\t\t\t\ttoNodeId: options.to,\n\t\t\t\tmaxDepth: options.maxDepth,\n\t\t\t});\n\t\t});\n\n\tconst extraction = cloud\n\t\t.command(\"extraction\")\n\t\t.description(\"extraction operations\");\n\n\textraction\n\t\t.command(\"run\")\n\t\t.description(\"run graph extraction\")\n\t\t.option(\"--mode <mode>\", \"full | core | notes | sync | connectors\")\n\t\t.option(\"--force\", \"force re-extraction\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.extraction.run\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudExtractionRunCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tmode: options.mode,\n\t\t\t\tforce: options.force,\n\t\t\t});\n\t\t});\n\n\textraction\n\t\t.command(\"jobs\")\n\t\t.description(\"list extraction jobs\")\n\t\t.option(\"-l, --limit <n>\", \"maximum jobs to return\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.extraction.jobs\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudExtractionJobsCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"evals\")\n\t\t.description(\"run context quality evals\")\n\t\t.option(\"--fixture-ids <ids>\", \"comma-separated fixture IDs\")\n\t\t.option(\"--iterations <n>\", \"number of iterations\", parsePositiveOption)\n\t\t.option(\"--thresholds-json <json>\", \"thresholds JSON object\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.evals.run\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudEvalsRunCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tfixtureIds: options.fixtureIds,\n\t\t\t\titerations: options.iterations,\n\t\t\t\tthresholdsJson: options.thresholdsJson,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"benchmarks\")\n\t\t.description(\"run context benchmarks\")\n\t\t.option(\"--fixture-ids <ids>\", \"comma-separated fixture IDs\")\n\t\t.option(\"--iterations <n>\", \"number of iterations\", parsePositiveOption)\n\t\t.option(\"--thresholds-json <json>\", \"thresholds JSON object\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.benchmarks.run\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudBenchmarksRunCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tfixtureIds: options.fixtureIds,\n\t\t\t\titerations: options.iterations,\n\t\t\t\tthresholdsJson: options.thresholdsJson,\n\t\t\t});\n\t\t});\n\n\tconst exports = cloud.command(\"exports\").description(\"export operations\");\n\n\texports\n\t\t.command(\"create\")\n\t\t.description(\"create memory export\")\n\t\t.option(\"--label <name>\", \"export label\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.exports.create\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudExportsCreateCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlabel: options.label,\n\t\t\t});\n\t\t});\n\n\texports\n\t\t.command(\"download\")\n\t\t.description(\"download export archive\")\n\t\t.requiredOption(\"--export-id <id>\", \"export ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.exports.download\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudExportsDownloadCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\texportId: options.exportId,\n\t\t\t});\n\t\t});\n\n\tconst snapshots = cloud\n\t\t.command(\"snapshots\")\n\t\t.description(\"snapshot operations\");\n\n\tsnapshots\n\t\t.command(\"create\")\n\t\t.description(\"create memory snapshot\")\n\t\t.option(\"--label <name>\", \"snapshot label\")\n\t\t.option(\"--trigger <trigger>\", \"manual | sync | system\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.snapshots.create\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSnapshotsCreateCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlabel: options.label,\n\t\t\t\ttrigger: options.trigger,\n\t\t\t});\n\t\t});\n\n\tsnapshots\n\t\t.command(\"download\")\n\t\t.description(\"download snapshot archive\")\n\t\t.requiredOption(\"--snapshot-id <id>\", \"snapshot ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.snapshots.download\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSnapshotsDownloadCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tsnapshotId: options.snapshotId,\n\t\t\t});\n\t\t});\n\n\tconst providers = cloud\n\t\t.command(\"providers\")\n\t\t.description(\"provider operations\");\n\n\tproviders\n\t\t.command(\"list\")\n\t\t.description(\"list provider credentials\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"cloud.providers.list\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudProvidersListCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t});\n\t\t});\n\n\tproviders\n\t\t.command(\"create\")\n\t\t.description(\"create provider credential\")\n\t\t.requiredOption(\n\t\t\t\"--provider <provider>\",\n\t\t\t\"voyageai | openai | upstash-vector\",\n\t\t)\n\t\t.requiredOption(\"--key-name <name>\", \"key name\")\n\t\t.requiredOption(\"--secret <secret>\", \"provider secret\")\n\t\t.option(\"--rest-url <url>\", \"REST URL (required for upstash-vector)\")\n\t\t.option(\"--embedding-model <model>\", \"embedding model\")\n\t\t.option(\"--rerank-model <model>\", \"rerank model\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.providers.create\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudProvidersCreateCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tprovider: options.provider,\n\t\t\t\tkeyName: options.keyName,\n\t\t\t\tsecret: options.secret,\n\t\t\t\trestUrl: options.restUrl,\n\t\t\t\tembeddingModel: options.embeddingModel,\n\t\t\t\trerankModel: options.rerankModel,\n\t\t\t});\n\t\t});\n\n\tproviders\n\t\t.command(\"test\")\n\t\t.description(\"test provider credential\")\n\t\t.requiredOption(\"--credential-id <id>\", \"credential ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.providers.test\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudProvidersTestCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tcredentialId: options.credentialId,\n\t\t\t});\n\t\t});\n\n\tconst config = program\n\t\t.command(\"config\")\n\t\t.description(\"inspect or create .tekmemo/config.json\");\n\n\tconfig\n\t\t.command(\"get\")\n\t\t.description(\"print resolved CLI configuration\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"config.get\";\n\t\t\tconst g = await globals();\n\t\t\tconst safeConfig = {\n\t\t\t\t...g.config,\n\t\t\t\tcloud: {\n\t\t\t\t\t...g.config.cloud,\n\t\t\t\t\tapiKey: g.config.cloud.apiKey ? \"<redacted>\" : undefined,\n\t\t\t\t},\n\t\t\t};\n\t\t\tif (g.json) printJsonEnvelope(output, \"config.get\", safeConfig);\n\t\t\telse output.write(JSON.stringify(safeConfig, null, 2));\n\t\t});\n\n\tconfig\n\t\t.command(\"init\")\n\t\t.description(\"create .tekmemo/config.json without storing secrets\")\n\t\t.option(\"-f, --force\", \"overwrite existing config\", false)\n\t\t.option(\n\t\t\t\"--runtime <mode>\",\n\t\t\t\"runtime mode: local, cloud, or hybrid\",\n\t\t\t\"local\",\n\t\t)\n\t\t.option(\"--cloud-url <url>\", \"TekMemo Cloud API URL\")\n\t\t.option(\"--workspace-id <id>\", \"cloud workspace ID\")\n\t\t.option(\"--project-id <id>\", \"cloud project ID\")\n\t\t.option(\"--read-policy <policy>\", \"hybrid read policy\", \"local-first\")\n\t\t.option(\"--write-policy <policy>\", \"hybrid write policy\", \"local-first\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"config.init\";\n\t\t\tconst g = await globals();\n\t\t\tconst result = await writeDefaultCliConfig({\n\t\t\t\tcwd: input.cwd ?? process.cwd(),\n\t\t\t\troot: g.root,\n\t\t\t\tforce: options.force,\n\t\t\t\tconfig: {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\truntime: options.runtime,\n\t\t\t\t\troot: \".\",\n\t\t\t\t\tcloud: {\n\t\t\t\t\t\t...(options.cloudUrl ? { baseUrl: options.cloudUrl } : {}),\n\t\t\t\t\t\t...(options.workspaceId\n\t\t\t\t\t\t\t? { workspaceId: options.workspaceId }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(options.projectId ? { projectId: options.projectId } : {}),\n\t\t\t\t\t},\n\t\t\t\t\thybrid: {\n\t\t\t\t\t\treadPolicy: options.readPolicy,\n\t\t\t\t\t\twritePolicy: options.writePolicy,\n\t\t\t\t\t},\n\t\t\t\t} satisfies TekMemoConfigFile,\n\t\t\t});\n\t\t\tif (g.json) printJsonEnvelope(output, \"config.init\", result);\n\t\t\telse if (result.created) output.success(`Created ${result.path}`);\n\t\t\telse if (result.overwritten) output.success(`Overwrote ${result.path}`);\n\t\t\telse\n\t\t\t\toutput.warn(`${result.path} already exists. Use --force to overwrite.`);\n\t\t});\n\n\ttry {\n\t\tconst args = normalizeArgv(input.argv);\n\t\tawait program.parseAsync(args);\n\t\treturn { exitCode, stdout: output.stdout, stderr: output.stderr };\n\t} catch (error) {\n\t\tif (error instanceof CliError) {\n\t\t\texitCode = error.exitCode;\n\t\t\tif (wantsJson)\n\t\t\t\tprintJsonError(output, currentCommand, error.code, error.message);\n\t\t\telse output.error(error.message);\n\t\t} else if (isCommanderError(error)) {\n\t\t\texitCode = typeof error.exitCode === \"number\" ? error.exitCode : 1;\n\t\t} else {\n\t\t\texitCode = 1;\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (wantsJson)\n\t\t\t\tprintJsonError(output, currentCommand, \"CLI_UNEXPECTED_ERROR\", message);\n\t\t\telse output.error(message);\n\t\t}\n\t\treturn { exitCode, stdout: output.stdout, stderr: output.stderr };\n\t}\n}\n\nfunction collect(value: string, previous: string[]): string[] {\n\tprevious.push(value);\n\treturn previous;\n}\n\nfunction normalizeArgv(argv: string[]): string[] {\n\tif (\n\t\targv.length > 0 &&\n\t\t!argv[0]?.endsWith(\"node\") &&\n\t\t!argv[0]?.includes(\"/\") &&\n\t\targv[0] !== \"tekmemo\"\n\t) {\n\t\treturn [\"node\", \"tekmemo\", ...argv];\n\t}\n\tif (argv[0] === \"tekmemo\") return [\"node\", ...argv];\n\treturn [...argv];\n}\n\nfunction isCommanderError(error: unknown): error is CommanderError {\n\treturn error instanceof CommanderError;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner-DqYmvg3G.cjs","names":["firstNonEmpty","normalizeTimeoutMs","TekMemoCloudError","path","fs","isNodeError","path","fs","path","MANIFEST_PATH","CORE_MEMORY_PATH","NOTES_MEMORY_PATH","MEMORY_EVENTS_PATH","CONVERSATIONS_MEMORY_PATH","CHUNKS_INDEX_PATH","GRAPH_NODES_PATH","GRAPH_EDGES_PATH","SNAPSHOTS_INDEX_PATH","TEKMEMO_DIR","CANONICAL_TEKMEMO_FILES","fs","z","readline","Command","CommanderError"],"sources":["../src/errors/cli-errors.ts","../src/cloud/client.ts","../src/config/runtime.ts","../src/fs/paths.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/commands/agent.ts","../src/commands/chunks.ts","../src/utils/content.ts","../src/utils/metadata.ts","../src/utils/numbers.ts","../src/utils/secrets.ts","../src/commands/cloud.ts","../src/commands/context.ts","../src/commands/diff.ts","../src/protocol/schemas.ts","../src/commands/doctor.ts","../src/commands/edit.ts","../src/commands/events.ts","../src/commands/init.ts","../src/commands/inspect.ts","../src/commands/read.ts","../src/commands/remember.ts","../src/utils/labels.ts","../src/commands/snapshot.ts","../src/commands/validate.ts","../src/commands/runtime.ts","../src/commands/search.ts","../src/runner.ts"],"sourcesContent":["export type CliErrorCode =\n\t| \"CLI_USAGE_ERROR\"\n\t| \"CLI_VALIDATION_ERROR\"\n\t| \"CLI_FS_ERROR\"\n\t| \"CLI_PROTOCOL_ERROR\"\n\t| \"CLI_JSONL_ERROR\";\n\nexport class CliError extends Error {\n\treadonly code: CliErrorCode;\n\treadonly exitCode: number;\n\treadonly cause?: unknown;\n\n\tconstructor(\n\t\tcode: CliErrorCode,\n\t\tmessage: string,\n\t\toptions?: { exitCode?: number; cause?: unknown },\n\t) {\n\t\tsuper(message);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tthis.exitCode = options?.exitCode ?? 1;\n\t\tthis.cause = options?.cause;\n\t}\n}\n\nexport class CliUsageError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_USAGE_ERROR\", message, { exitCode: 1, cause: options?.cause });\n\t}\n}\n\nexport class CliValidationError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_VALIDATION_ERROR\", message, {\n\t\t\texitCode: 1,\n\t\t\tcause: options?.cause,\n\t\t});\n\t}\n}\n\nexport class CliFsError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_FS_ERROR\", message, { exitCode: 1, cause: options?.cause });\n\t}\n}\n\nexport class CliProtocolError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_PROTOCOL_ERROR\", message, {\n\t\t\texitCode: 1,\n\t\t\tcause: options?.cause,\n\t\t});\n\t}\n}\n\nexport class CliJsonlError extends CliError {\n\tconstructor(message: string, options?: { cause?: unknown }) {\n\t\tsuper(\"CLI_JSONL_ERROR\", message, { exitCode: 1, cause: options?.cause });\n\t}\n}\n","import {\n\tcreateTekMemoCloudClient,\n\tredactSecrets,\n\ttype TekMemoCloudClient,\n\ttype TekMemoCloudClientOptions,\n\tTekMemoCloudError,\n} from \"@tekmemo/cloud-client\";\nimport { CliUsageError } from \"../errors/cli-errors\";\n\nexport interface CloudConnectionOptions {\n\tcloudUrl?: string | undefined;\n\tapiKey?: string | undefined;\n\tworkspaceId?: string | undefined;\n\tprojectId?: string | undefined;\n\ttimeoutMs?: number | string | undefined;\n\tallowMissingApiKey?: boolean | undefined;\n\tallowMissingProjectId?: boolean | undefined;\n}\n\nexport interface NormalizedCloudConnectionOptions {\n\tbaseUrl: string;\n\tapiKey?: string | undefined;\n\tworkspaceId?: string | undefined;\n\tprojectId?: string | undefined;\n\ttimeoutMs?: number | undefined;\n}\n\nexport function createCliCloudClient(\n\toptions: CloudConnectionOptions = {},\n): TekMemoCloudClient {\n\treturn createTekMemoCloudClient(toCloudClientOptions(options));\n}\n\nexport function toCloudClientOptions(\n\toptions: CloudConnectionOptions = {},\n): TekMemoCloudClientOptions {\n\tconst normalized = normalizeCloudConnectionOptions(options);\n\treturn {\n\t\tbaseUrl: normalized.baseUrl,\n\t\t...(normalized.apiKey !== undefined ? { apiKey: normalized.apiKey } : {}),\n\t\t...(normalized.projectId !== undefined\n\t\t\t? { defaultProjectId: normalized.projectId }\n\t\t\t: {}),\n\t\t...(normalized.workspaceId !== undefined\n\t\t\t? { defaultWorkspaceId: normalized.workspaceId }\n\t\t\t: {}),\n\t\t...(normalized.timeoutMs !== undefined\n\t\t\t? { timeoutMs: normalized.timeoutMs }\n\t\t\t: {}),\n\t\tuserAgent: \"@tekmemo/cli\",\n\t\trequireApiKey: !options.allowMissingApiKey,\n\t\tacceptLegacyEnvelope: false,\n\t};\n}\n\nexport function normalizeCloudConnectionOptions(\n\toptions: CloudConnectionOptions = {},\n): NormalizedCloudConnectionOptions {\n\tconst baseUrl = firstNonEmpty(\n\t\toptions.cloudUrl,\n\t\tprocess.env.TEKMEMO_CLOUD_URL,\n\t\tprocess.env.TEKMEMO_API_URL,\n\t);\n\tif (!baseUrl) {\n\t\tthrow new CliUsageError(\n\t\t\t\"TekMemo Cloud URL is required. Pass --cloud-url or set TEKMEMO_CLOUD_URL.\",\n\t\t);\n\t}\n\n\tconst apiKey = firstNonEmpty(options.apiKey, process.env.TEKMEMO_API_KEY);\n\tif (!apiKey && !options.allowMissingApiKey) {\n\t\tthrow new CliUsageError(\n\t\t\t\"TekMemo Cloud API key is required. Pass --api-key or set TEKMEMO_API_KEY.\",\n\t\t);\n\t}\n\n\tconst workspaceId = firstNonEmpty(\n\t\toptions.workspaceId,\n\t\tprocess.env.TEKMEMO_WORKSPACE_ID,\n\t);\n\tconst projectId = firstNonEmpty(\n\t\toptions.projectId,\n\t\tprocess.env.TEKMEMO_PROJECT_ID,\n\t);\n\tif (!projectId && !options.allowMissingProjectId) {\n\t\tthrow new CliUsageError(\n\t\t\t\"TekMemo Cloud project ID is required. Pass --project-id or set TEKMEMO_PROJECT_ID.\",\n\t\t);\n\t}\n\tconst timeoutMs = normalizeTimeoutMs(options.timeoutMs);\n\n\treturn {\n\t\tbaseUrl,\n\t\t...(apiKey !== undefined ? { apiKey } : {}),\n\t\t...(workspaceId !== undefined ? { workspaceId } : {}),\n\t\t...(projectId !== undefined ? { projectId } : {}),\n\t\t...(timeoutMs !== undefined ? { timeoutMs } : {}),\n\t};\n}\n\nexport function formatCloudError(error: unknown): string {\n\tif (error instanceof TekMemoCloudError) {\n\t\tconst parts = [error.message];\n\t\tif (error.status !== undefined) parts.push(`status=${error.status}`);\n\t\tif (error.code) parts.push(`code=${error.code}`);\n\t\tif (error.requestId) parts.push(`requestId=${error.requestId}`);\n\t\tif (error.retryAfterMs !== undefined)\n\t\t\tparts.push(`retryAfterMs=${error.retryAfterMs}`);\n\t\treturn parts.join(\" \");\n\t}\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function cloudConnectionSummary(\n\toptions: NormalizedCloudConnectionOptions,\n): Record<string, unknown> {\n\treturn {\n\t\tbaseUrl: options.baseUrl,\n\t\tapiKey: options.apiKey\n\t\t\t? redactSecrets(options.apiKey, [options.apiKey])\n\t\t\t: null,\n\t\tworkspaceId: options.workspaceId ?? null,\n\t\tprojectId: options.projectId ?? null,\n\t\ttimeoutMs: options.timeoutMs ?? null,\n\t};\n}\n\nfunction firstNonEmpty(\n\t...values: Array<string | undefined>\n): string | undefined {\n\tfor (const value of values) {\n\t\tconst trimmed = value?.trim();\n\t\tif (trimmed) return trimmed;\n\t}\n\treturn undefined;\n}\n\nfunction normalizeTimeoutMs(\n\tvalue: number | string | undefined,\n): number | undefined {\n\tif (value === undefined) return undefined;\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isInteger(value) || value < 1) {\n\t\t\tthrow new CliUsageError(\n\t\t\t\t\"timeout must be a positive integer in milliseconds.\",\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t}\n\tconst parsed = Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 1) {\n\t\tthrow new CliUsageError(\n\t\t\t\"timeout must be a positive integer in milliseconds.\",\n\t\t);\n\t}\n\treturn parsed;\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { CliUsageError } from \"../errors/cli-errors\";\n\nexport type TekMemoRuntimeMode = \"local\" | \"cloud\" | \"hybrid\";\nexport type TekMemoReadPolicy =\n\t| \"local-first\"\n\t| \"cloud-first\"\n\t| \"local-only\"\n\t| \"cloud-only\";\nexport type TekMemoWritePolicy =\n\t| \"local-first\"\n\t| \"cloud-first\"\n\t| \"local-only\"\n\t| \"cloud-only\";\n\nexport interface TekMemoConfigFile {\n\tversion?: number;\n\truntime?: TekMemoRuntimeMode;\n\troot?: string;\n\tcloud?: {\n\t\tbaseUrl?: string;\n\t\tworkspaceId?: string;\n\t\tprojectId?: string;\n\t\ttimeoutMs?: number;\n\t};\n\thybrid?: {\n\t\treadPolicy?: TekMemoReadPolicy;\n\t\twritePolicy?: TekMemoWritePolicy;\n\t};\n}\n\nexport interface CliRuntimeFlags {\n\troot?: string;\n\truntime?: string;\n\tcloudUrl?: string;\n\tapiKey?: string;\n\tworkspaceId?: string;\n\tprojectId?: string;\n\ttimeoutMs?: string | number;\n\treadPolicy?: string;\n\twritePolicy?: string;\n}\n\nexport interface ResolvedCliRuntimeConfig {\n\truntime: TekMemoRuntimeMode;\n\troot: string;\n\tconfigPath: string;\n\tconfigLoaded: boolean;\n\tcloud: {\n\t\tcloudUrl?: string;\n\t\tapiKey?: string;\n\t\tworkspaceId?: string;\n\t\tprojectId?: string;\n\t\ttimeoutMs?: number;\n\t};\n\thybrid: {\n\t\treadPolicy: TekMemoReadPolicy;\n\t\twritePolicy: TekMemoWritePolicy;\n\t};\n}\n\nexport async function resolveCliRuntimeConfig(input: {\n\tcwd: string;\n\tflags?: CliRuntimeFlags;\n\tenv?: NodeJS.ProcessEnv;\n}): Promise<ResolvedCliRuntimeConfig> {\n\tconst flags = input.flags ?? {};\n\tconst env = input.env ?? process.env;\n\tconst initialRoot =\n\t\tfirstNonEmpty(flags.root, env.TEKMEMO_ROOT, input.cwd) ?? input.cwd;\n\tconst configPath = path.join(\n\t\tpath.resolve(input.cwd, initialRoot),\n\t\t\".tekmemo\",\n\t\t\"config.json\",\n\t);\n\tconst config = await readOptionalConfig(configPath);\n\tconst configRoot = config.value?.root;\n\tconst root = path.resolve(\n\t\tinput.cwd,\n\t\tfirstNonEmpty(flags.root, env.TEKMEMO_ROOT, configRoot, initialRoot) ??\n\t\t\tinitialRoot,\n\t);\n\tconst runtime = normalizeRuntime(\n\t\tfirstNonEmpty(\n\t\t\tflags.runtime,\n\t\t\tenv.TEKMEMO_RUNTIME,\n\t\t\tconfig.value?.runtime,\n\t\t\t\"local\",\n\t\t),\n\t);\n\tconst readPolicy = normalizeReadPolicy(\n\t\tfirstNonEmpty(\n\t\t\tflags.readPolicy,\n\t\t\tenv.TEKMEMO_READ_POLICY,\n\t\t\tconfig.value?.hybrid?.readPolicy,\n\t\t\t\"local-first\",\n\t\t),\n\t);\n\tconst writePolicy = normalizeWritePolicy(\n\t\tfirstNonEmpty(\n\t\t\tflags.writePolicy,\n\t\t\tenv.TEKMEMO_WRITE_POLICY,\n\t\t\tconfig.value?.hybrid?.writePolicy,\n\t\t\t\"local-first\",\n\t\t),\n\t);\n\tconst timeoutValue = firstDefined(\n\t\tflags.timeoutMs,\n\t\tenv.TEKMEMO_CLOUD_TIMEOUT_MS,\n\t\tconfig.value?.cloud?.timeoutMs,\n\t);\n\tconst timeoutMs = normalizeTimeoutMs(timeoutValue);\n\treturn {\n\t\truntime,\n\t\troot,\n\t\tconfigPath,\n\t\tconfigLoaded: config.loaded,\n\t\tcloud: compactCloud({\n\t\t\tcloudUrl: firstNonEmpty(\n\t\t\t\tflags.cloudUrl,\n\t\t\t\tenv.TEKMEMO_CLOUD_URL,\n\t\t\t\tenv.TEKMEMO_API_URL,\n\t\t\t\tconfig.value?.cloud?.baseUrl,\n\t\t\t),\n\t\t\tapiKey: firstNonEmpty(flags.apiKey, env.TEKMEMO_API_KEY),\n\t\t\tworkspaceId: firstNonEmpty(\n\t\t\t\tflags.workspaceId,\n\t\t\t\tenv.TEKMEMO_WORKSPACE_ID,\n\t\t\t\tconfig.value?.cloud?.workspaceId,\n\t\t\t),\n\t\t\tprojectId: firstNonEmpty(\n\t\t\t\tflags.projectId,\n\t\t\t\tenv.TEKMEMO_PROJECT_ID,\n\t\t\t\tconfig.value?.cloud?.projectId,\n\t\t\t),\n\t\t\t...(timeoutMs !== undefined ? { timeoutMs } : {}),\n\t\t}),\n\t\thybrid: { readPolicy, writePolicy },\n\t};\n}\n\nexport async function writeDefaultCliConfig(input: {\n\tcwd: string;\n\troot?: string;\n\tconfig?: TekMemoConfigFile;\n\tforce?: boolean;\n}): Promise<{ path: string; created: boolean; overwritten: boolean }> {\n\tconst root = path.resolve(input.cwd, input.root ?? \".\");\n\tconst configPath = path.join(root, \".tekmemo\", \"config.json\");\n\tawait fs.mkdir(path.dirname(configPath), { recursive: true });\n\tconst exists = await fileExists(configPath);\n\tif (exists && !input.force)\n\t\treturn { path: configPath, created: false, overwritten: false };\n\tconst config = input.config ?? {\n\t\tversion: 1,\n\t\truntime: \"local\",\n\t\troot: \".\",\n\t};\n\tawait fs.writeFile(\n\t\tconfigPath,\n\t\t`${JSON.stringify(config, null, 2)}\\n`,\n\t\t\"utf8\",\n\t);\n\treturn { path: configPath, created: !exists, overwritten: exists };\n}\n\nasync function readOptionalConfig(\n\tconfigPath: string,\n): Promise<{ loaded: boolean; value?: TekMemoConfigFile }> {\n\ttry {\n\t\tconst raw = await fs.readFile(configPath, \"utf8\");\n\t\tconst parsed = JSON.parse(raw) as unknown;\n\t\treturn { loaded: true, value: validateConfig(parsed, configPath) };\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return { loaded: false };\n\t\tif (error instanceof SyntaxError) {\n\t\t\tthrow new CliUsageError(\n\t\t\t\t`Invalid TekMemo config JSON at ${configPath}: ${error.message}`,\n\t\t\t);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction validateConfig(value: unknown, configPath: string): TekMemoConfigFile {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new CliUsageError(`TekMemo config must be an object: ${configPath}`);\n\t}\n\tconst record = value as TekMemoConfigFile;\n\tif (record.runtime !== undefined) normalizeRuntime(record.runtime);\n\tif (record.hybrid?.readPolicy !== undefined)\n\t\tnormalizeReadPolicy(record.hybrid.readPolicy);\n\tif (record.hybrid?.writePolicy !== undefined)\n\t\tnormalizeWritePolicy(record.hybrid.writePolicy);\n\tif (record.cloud?.timeoutMs !== undefined)\n\t\tnormalizeTimeoutMs(record.cloud.timeoutMs);\n\treturn record;\n}\n\nfunction normalizeRuntime(value: unknown): TekMemoRuntimeMode {\n\tif (value === \"local\" || value === \"cloud\" || value === \"hybrid\")\n\t\treturn value;\n\tthrow new CliUsageError(\"runtime must be local, cloud, or hybrid.\");\n}\n\nfunction normalizeReadPolicy(value: unknown): TekMemoReadPolicy {\n\tif (\n\t\tvalue === \"local-first\" ||\n\t\tvalue === \"cloud-first\" ||\n\t\tvalue === \"local-only\" ||\n\t\tvalue === \"cloud-only\"\n\t)\n\t\treturn value;\n\tthrow new CliUsageError(\n\t\t\"read policy must be local-first, cloud-first, local-only, or cloud-only.\",\n\t);\n}\n\nfunction normalizeWritePolicy(value: unknown): TekMemoWritePolicy {\n\tif (\n\t\tvalue === \"local-first\" ||\n\t\tvalue === \"cloud-first\" ||\n\t\tvalue === \"local-only\" ||\n\t\tvalue === \"cloud-only\"\n\t)\n\t\treturn value;\n\tthrow new CliUsageError(\n\t\t\"write policy must be local-first, cloud-first, local-only, or cloud-only.\",\n\t);\n}\n\nfunction normalizeTimeoutMs(value: unknown): number | undefined {\n\tif (value === undefined || value === null || value === \"\") return undefined;\n\tconst parsed = typeof value === \"number\" ? value : Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 1) {\n\t\tthrow new CliUsageError(\n\t\t\t\"cloud timeout must be a positive integer in milliseconds.\",\n\t\t);\n\t}\n\treturn parsed;\n}\n\nfunction firstNonEmpty(...values: unknown[]): string | undefined {\n\tfor (const value of values) {\n\t\tif (typeof value !== \"string\") continue;\n\t\tconst trimmed = value.trim();\n\t\tif (trimmed) return trimmed;\n\t}\n\treturn undefined;\n}\n\nfunction firstDefined(...values: unknown[]): unknown {\n\tfor (const value of values) {\n\t\tif (value !== undefined) return value;\n\t}\n\treturn undefined;\n}\n\nfunction compactCloud(input: {\n\tcloudUrl?: string;\n\tapiKey?: string;\n\tworkspaceId?: string;\n\tprojectId?: string;\n\ttimeoutMs?: number;\n}): ResolvedCliRuntimeConfig[\"cloud\"] {\n\treturn {\n\t\t...(input.cloudUrl !== undefined ? { cloudUrl: input.cloudUrl } : {}),\n\t\t...(input.apiKey !== undefined ? { apiKey: input.apiKey } : {}),\n\t\t...(input.workspaceId !== undefined\n\t\t\t? { workspaceId: input.workspaceId }\n\t\t\t: {}),\n\t\t...(input.projectId !== undefined ? { projectId: input.projectId } : {}),\n\t\t...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n\t};\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n\ttry {\n\t\tawait fs.stat(filePath);\n\t\treturn true;\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return false;\n\t\tthrow error;\n\t}\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error;\n}\n","import path from \"node:path\";\nimport { CliFsError } from \"../errors/cli-errors\";\n\nexport function normalizeRootDir(rootDir: string): string {\n\tif (typeof rootDir !== \"string\" || rootDir.trim().length === 0) {\n\t\tthrow new CliFsError(\"rootDir must be a non-empty string.\");\n\t}\n\n\tif (rootDir.includes(\"\\0\")) {\n\t\tthrow new CliFsError(\"rootDir must not contain null bytes.\");\n\t}\n\n\treturn path.resolve(rootDir);\n}\n\nexport function resolveInsideRoot(\n\trootDir: string,\n\trelativePath: string,\n): string {\n\tif (typeof relativePath !== \"string\" || relativePath.trim().length === 0) {\n\t\tthrow new CliFsError(\"relativePath must be a non-empty string.\");\n\t}\n\n\tif (relativePath.includes(\"\\0\")) {\n\t\tthrow new CliFsError(\"relativePath must not contain null bytes.\");\n\t}\n\n\tif (path.isAbsolute(relativePath)) {\n\t\tthrow new CliFsError(\"relativePath must not be absolute.\");\n\t}\n\n\tconst normalized = relativePath.replaceAll(\"\\\\\", \"/\");\n\n\tif (normalized.split(\"/\").includes(\"..\")) {\n\t\tthrow new CliFsError(\"relativePath must not contain path traversal.\");\n\t}\n\n\tconst resolved = path.resolve(rootDir, normalized);\n\tconst relative = path.relative(rootDir, resolved);\n\n\tif (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n\t\tthrow new CliFsError(\"Resolved path escaped rootDir.\");\n\t}\n\n\treturn resolved;\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { CliFsError } from \"../errors/cli-errors\";\nimport { normalizeRootDir, resolveInsideRoot } from \"./paths\";\n\nexport interface TekMemoFileSystemOptions {\n\trootDir: string;\n\trejectSymlinkedTekMemoDir?: boolean;\n}\n\nexport class TekMemoFileSystem {\n\treadonly rootDir: string;\n\tprivate readonly rejectSymlinkedTekMemoDir: boolean;\n\n\tconstructor(options: TekMemoFileSystemOptions) {\n\t\tthis.rootDir = normalizeRootDir(options.rootDir);\n\t\tthis.rejectSymlinkedTekMemoDir = options.rejectSymlinkedTekMemoDir ?? true;\n\t}\n\n\tresolve(relativePath: string): string {\n\t\treturn resolveInsideRoot(this.rootDir, relativePath);\n\t}\n\n\tasync ensureSafeRoot(): Promise<void> {\n\t\tawait fs.mkdir(this.rootDir, { recursive: true });\n\t\tawait this.rejectUnsafeTekMemoSymlinkIfNeeded();\n\t}\n\n\tasync exists(relativePath: string): Promise<boolean> {\n\t\ttry {\n\t\t\tawait fs.lstat(this.resolve(relativePath));\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (isNodeError(error) && error.code === \"ENOENT\") return false;\n\t\t\tthrow new CliFsError(`Failed checking path \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync readText(relativePath: string): Promise<string> {\n\t\ttry {\n\t\t\treturn await fs.readFile(this.resolve(relativePath), \"utf8\");\n\t\t} catch (error) {\n\t\t\tthrow new CliFsError(`Failed reading \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync readTextIfExists(relativePath: string): Promise<string | undefined> {\n\t\ttry {\n\t\t\treturn await fs.readFile(this.resolve(relativePath), \"utf8\");\n\t\t} catch (error) {\n\t\t\tif (isNodeError(error) && error.code === \"ENOENT\") return undefined;\n\t\t\tthrow new CliFsError(`Failed reading \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync writeText(relativePath: string, content: string): Promise<void> {\n\t\tif (typeof content !== \"string\") {\n\t\t\tthrow new CliFsError(\"content must be a string.\");\n\t\t}\n\n\t\tconst target = this.resolve(relativePath);\n\t\tconst parent = path.dirname(target);\n\t\tawait fs.mkdir(parent, { recursive: true });\n\n\t\tconst tmp = path.join(\n\t\t\tparent,\n\t\t\t`.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`,\n\t\t);\n\n\t\ttry {\n\t\t\tawait fs.writeFile(tmp, content, \"utf8\");\n\t\t\tawait fs.rename(tmp, target);\n\t\t} catch (error) {\n\t\t\tawait fs.rm(tmp, { force: true }).catch(() => undefined);\n\t\t\tthrow new CliFsError(`Failed writing \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync appendText(relativePath: string, content: string): Promise<void> {\n\t\tif (typeof content !== \"string\") {\n\t\t\tthrow new CliFsError(\"content must be a string.\");\n\t\t}\n\n\t\tconst target = this.resolve(relativePath);\n\t\tawait fs.mkdir(path.dirname(target), { recursive: true });\n\n\t\ttry {\n\t\t\tawait fs.appendFile(target, content, \"utf8\");\n\t\t} catch (error) {\n\t\t\tthrow new CliFsError(`Failed appending \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync mkdir(relativePath: string): Promise<void> {\n\t\ttry {\n\t\t\tawait fs.mkdir(this.resolve(relativePath), { recursive: true });\n\t\t} catch (error) {\n\t\t\tthrow new CliFsError(`Failed creating directory \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync stat(relativePath: string): Promise<{\n\t\tisFile: boolean;\n\t\tisDirectory: boolean;\n\t\tisSymbolicLink: boolean;\n\t\tsize: number;\n\t}> {\n\t\ttry {\n\t\t\tconst stats = await fs.lstat(this.resolve(relativePath));\n\t\t\treturn {\n\t\t\t\tisFile: stats.isFile(),\n\t\t\t\tisDirectory: stats.isDirectory(),\n\t\t\t\tisSymbolicLink: stats.isSymbolicLink(),\n\t\t\t\tsize: stats.size,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new CliFsError(`Failed stat for \"${relativePath}\".`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async rejectUnsafeTekMemoSymlinkIfNeeded(): Promise<void> {\n\t\tif (!this.rejectSymlinkedTekMemoDir) return;\n\n\t\ttry {\n\t\t\tconst stats = await fs.lstat(this.resolve(\".tekmemo\"));\n\t\t\tif (stats.isSymbolicLink()) {\n\t\t\t\tthrow new CliFsError(\"Refusing to use symlinked .tekmemo directory.\");\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof CliFsError) throw error;\n\t\t\tif (isNodeError(error) && error.code === \"ENOENT\") return;\n\t\t\tthrow new CliFsError(\"Failed checking .tekmemo directory safety.\", {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error;\n}\n","export interface CliOutput {\n\tstdout: string[];\n\tstderr: string[];\n\twrite(message: string): void;\n\terror(message: string): void;\n\tsuccess(message: string): void;\n\twarn(message: string): void;\n}\n\nexport interface JsonEnvelope<T = unknown> {\n\tok: boolean;\n\tcommand: string;\n\tdata?: T;\n\terror?: {\n\t\tcode: string;\n\t\tmessage: string;\n\t\tdetails?: unknown;\n\t};\n}\n\nconst colors = {\n\treset: \"\\x1b[0m\",\n\tred: \"\\x1b[31m\",\n\tgreen: \"\\x1b[32m\",\n\tyellow: \"\\x1b[33m\",\n\tdim: \"\\x1b[2m\",\n};\n\nfunction shouldDisableColor(noColor?: boolean): boolean {\n\tif (noColor) return true;\n\tif (\"NO_COLOR\" in process.env) return true;\n\tif (process.env.TERM === \"dumb\") return true;\n\treturn false;\n}\n\nexport interface BufferedOutputOptions {\n\tnoColor?: boolean;\n}\n\nexport function createBufferedOutput(\n\toptions?: BufferedOutputOptions,\n): CliOutput {\n\tconst stdout: string[] = [];\n\tconst stderr: string[] = [];\n\tconst disabled = shouldDisableColor(options?.noColor);\n\n\tconst c = disabled\n\t\t? { red: \"\", green: \"\", yellow: \"\", reset: \"\", dim: \"\" }\n\t\t: colors;\n\n\treturn {\n\t\tstdout,\n\t\tstderr,\n\t\twrite(message) {\n\t\t\tstdout.push(message);\n\t\t},\n\t\terror(message) {\n\t\t\tstderr.push(`${c.red}${message}${c.reset}`);\n\t\t},\n\t\tsuccess(message) {\n\t\t\tstdout.push(`${c.green}${message}${c.reset}`);\n\t\t},\n\t\twarn(message) {\n\t\t\tstdout.push(`${c.yellow}${message}${c.reset}`);\n\t\t},\n\t};\n}\n\nexport function printHumanOrJson(\n\toutput: CliOutput,\n\tvalue: unknown,\n\thuman: string,\n\tjson = false,\n): void {\n\tif (json) {\n\t\toutput.write(JSON.stringify(value, null, 2));\n\t\treturn;\n\t}\n\n\toutput.write(human);\n}\n\nexport function printJsonEnvelope<T>(\n\toutput: CliOutput,\n\tcommand: string,\n\tdata: T,\n): void {\n\tconst envelope: JsonEnvelope<T> = { ok: true, command, data };\n\toutput.write(JSON.stringify(envelope, null, 2));\n}\n\nexport function printJsonError(\n\toutput: CliOutput,\n\tcommand: string,\n\tcode: string,\n\tmessage: string,\n\tdetails?: unknown,\n): void {\n\tconst error: JsonEnvelope = {\n\t\tok: false,\n\t\tcommand,\n\t\terror: {\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\t...(details !== undefined ? { details } : {}),\n\t\t},\n\t};\n\toutput.write(JSON.stringify(error, null, 2));\n}\n","import {\n\tCANONICAL_TEKMEMO_FILES,\n\tCHUNKS_INDEX_PATH,\n\tCONVERSATIONS_MEMORY_PATH,\n\tCORE_MEMORY_PATH,\n\tGRAPH_EDGES_PATH,\n\tGRAPH_NODES_PATH,\n\tMANIFEST_PATH,\n\tMEMORY_EVENTS_PATH,\n\tNOTES_MEMORY_PATH,\n\tSNAPSHOTS_INDEX_PATH,\n\tTEKMEMO_DIR,\n} from \"tekmemo\";\n\nexport { TEKMEMO_DIR };\n\n/**\n * Flat CLI path map kept for command ergonomics.\n * The values intentionally come from `tekmemo`, so the CLI cannot drift from\n * the canonical protocol owned by the core package.\n */\nexport const TEKMEMO_PATHS = {\n\tmanifest: MANIFEST_PATH,\n\tcoreMemory: CORE_MEMORY_PATH,\n\tnotesMemory: NOTES_MEMORY_PATH,\n\tmemoryEvents: MEMORY_EVENTS_PATH,\n\tconversations: CONVERSATIONS_MEMORY_PATH,\n\tchunks: CHUNKS_INDEX_PATH,\n\tgraphNodes: GRAPH_NODES_PATH,\n\tgraphEdges: GRAPH_EDGES_PATH,\n\tsnapshots: SNAPSHOTS_INDEX_PATH,\n\tsnapshotsDir: `${TEKMEMO_DIR}/snapshots`,\n\ttmpDir: `${TEKMEMO_DIR}/tmp`,\n} as const;\n\nexport const REQUIRED_FILES = CANONICAL_TEKMEMO_FILES;\n\nexport const REQUIRED_DIRS = [\n\tTEKMEMO_DIR,\n\t`${TEKMEMO_DIR}/memory`,\n\t`${TEKMEMO_DIR}/events`,\n\t`${TEKMEMO_DIR}/indexes`,\n\t`${TEKMEMO_DIR}/graph`,\n\t`${TEKMEMO_DIR}/snapshots`,\n\t`${TEKMEMO_DIR}/tmp`,\n] as const;\n","import { CliJsonlError } from \"../errors/cli-errors\";\n\nexport interface JsonlParseOptions {\n\tstrict?: boolean | undefined;\n}\n\nexport interface JsonlRecord {\n\tline: number;\n\tvalue: Record<string, unknown>;\n}\n\nexport function parseJsonl(\n\tcontent: string,\n\toptions?: JsonlParseOptions,\n): JsonlRecord[] {\n\tconst strict = options?.strict ?? false;\n\tconst records: JsonlRecord[] = [];\n\tconst lines = content.split(/\\r?\\n/);\n\n\tlines.forEach((line, index) => {\n\t\tconst lineNumber = index + 1;\n\t\tconst trimmed = line.trim();\n\n\t\tif (trimmed.length === 0) return;\n\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(trimmed) as unknown;\n\n\t\t\tif (\n\t\t\t\ttypeof parsed !== \"object\" ||\n\t\t\t\tparsed === null ||\n\t\t\t\tArray.isArray(parsed)\n\t\t\t) {\n\t\t\t\tthrow new CliJsonlError(`Line ${lineNumber} is not a JSON object.`);\n\t\t\t}\n\n\t\t\trecords.push({\n\t\t\t\tline: lineNumber,\n\t\t\t\tvalue: parsed as Record<string, unknown>,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (strict) {\n\t\t\t\tif (error instanceof CliJsonlError) throw error;\n\t\t\t\tthrow new CliJsonlError(`Line ${lineNumber} is invalid JSON.`, {\n\t\t\t\t\tcause: error,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\treturn records;\n}\n\nexport function stringifyJsonl(\n\trecords: readonly Record<string, unknown>[],\n): string {\n\treturn (\n\t\trecords.map((record) => JSON.stringify(record)).join(\"\\n\") +\n\t\t(records.length > 0 ? \"\\n\" : \"\")\n\t);\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n\tcreateDefaultTekMemoManifest,\n\tparseManifest as parseCoreManifest,\n\ttype TekMemoManifest,\n\tvalidateTekMemoManifest,\n} from \"tekmemo\";\nimport { CliProtocolError } from \"../errors/cli-errors\";\n\nexport type TekMemoCliManifest = TekMemoManifest;\n\nexport function createDefaultManifest(input?: {\n\tprojectId?: string;\n\tnow?: string;\n}): TekMemoCliManifest {\n\treturn createDefaultTekMemoManifest({\n\t\tprojectId: input?.projectId ?? `proj_${randomUUID()}`,\n\t\t...(input?.now !== undefined ? { now: () => input.now as string } : {}),\n\t});\n}\n\nexport function parseManifest(content: string): TekMemoCliManifest {\n\ttry {\n\t\treturn parseCoreManifest(content);\n\t} catch (error) {\n\t\tthrow new CliProtocolError(\n\t\t\t`manifest.json is invalid: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\nexport function validateManifest(value: unknown): TekMemoCliManifest {\n\ttry {\n\t\treturn validateTekMemoManifest(value);\n\t} catch (error) {\n\t\tthrow new CliProtocolError(\n\t\t\t`manifest.json is invalid: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport { TEKMEMO_PATHS } from \"./constants\";\nimport { parseJsonl } from \"./jsonl\";\nimport { parseManifest, type TekMemoCliManifest } from \"./manifest\";\n\nexport interface TekMemoInspection {\n\trootDir: string;\n\texists: boolean;\n\tmanifest?: TekMemoCliManifest;\n\tfiles: Array<{\n\t\tpath: string;\n\t\texists: boolean;\n\t\tbytes: number;\n\t\tlines?: number;\n\t\trecords?: number;\n\t}>;\n\tsummary: {\n\t\teventCount: number;\n\t\tconversationCount: number;\n\t\tchunkCount: number;\n\t\tgraphNodeCount: number;\n\t\tgraphEdgeCount: number;\n\t\tsnapshotCount: number;\n\t};\n}\n\nexport async function inspectTekMemo(\n\tfs: TekMemoFileSystem,\n): Promise<TekMemoInspection> {\n\tconst exists = await fs.exists(\".tekmemo\");\n\tconst manifestContent = await fs.readTextIfExists(TEKMEMO_PATHS.manifest);\n\tconst manifest =\n\t\tmanifestContent === undefined ? undefined : parseManifest(manifestContent);\n\n\tconst tracked = [\n\t\tTEKMEMO_PATHS.manifest,\n\t\tTEKMEMO_PATHS.coreMemory,\n\t\tTEKMEMO_PATHS.notesMemory,\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t\tTEKMEMO_PATHS.conversations,\n\t\tTEKMEMO_PATHS.chunks,\n\t\tTEKMEMO_PATHS.graphNodes,\n\t\tTEKMEMO_PATHS.graphEdges,\n\t\tTEKMEMO_PATHS.snapshots,\n\t];\n\n\tconst files: TekMemoInspection[\"files\"] = [];\n\tconst recordCounts: Record<string, number> = {};\n\n\tfor (const filePath of tracked) {\n\t\tconst content = await fs.readTextIfExists(filePath);\n\t\tconst isJsonl = filePath.endsWith(\".jsonl\");\n\n\t\tlet records = 0;\n\t\tif (content !== undefined && isJsonl) {\n\t\t\trecords = parseJsonl(content, { strict: false }).length;\n\t\t\trecordCounts[filePath] = records;\n\t\t}\n\n\t\tfiles.push({\n\t\t\tpath: filePath,\n\t\t\texists: content !== undefined,\n\t\t\tbytes: content ? Buffer.byteLength(content) : 0,\n\t\t\t...(content !== undefined\n\t\t\t\t? { lines: content.split(/\\r?\\n/).filter(Boolean).length }\n\t\t\t\t: {}),\n\t\t\t...(content !== undefined && isJsonl ? { records } : {}),\n\t\t});\n\t}\n\n\treturn {\n\t\trootDir: fs.rootDir,\n\t\texists,\n\t\t...(manifest ? { manifest } : {}),\n\t\tfiles,\n\t\tsummary: {\n\t\t\teventCount: recordCounts[TEKMEMO_PATHS.memoryEvents] ?? 0,\n\t\t\tconversationCount: recordCounts[TEKMEMO_PATHS.conversations] ?? 0,\n\t\t\tchunkCount: recordCounts[TEKMEMO_PATHS.chunks] ?? 0,\n\t\t\tgraphNodeCount: recordCounts[TEKMEMO_PATHS.graphNodes] ?? 0,\n\t\t\tgraphEdgeCount: recordCounts[TEKMEMO_PATHS.graphEdges] ?? 0,\n\t\t\tsnapshotCount: recordCounts[TEKMEMO_PATHS.snapshots] ?? 0,\n\t\t},\n\t};\n}\n","import type { AgentfsLikeClient } from \"@tekmemo/agentfs\";\nimport {\n\tcreateTekMemoAgentSession,\n\textractSessionMemory,\n} from \"@tekmemo/agentfs\";\nimport { createNodeFsMemoryStore } from \"@tekmemo/fs\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\n\nconst LATEST_AGENT_SESSION_PATH = `${TEKMEMO_PATHS.tmpDir}/agent-sessions/latest.json`;\n\n/**\n * Shared options for local AgentFS session commands.\n */\ninterface AgentCommandBaseOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n}\n\n/**\n * Options for starting an agent session.\n */\nexport interface AgentStartCommandOptions extends AgentCommandBaseOptions {\n\ttask: string;\n\tprojectId?: string | undefined;\n\tactorId?: string | undefined;\n\tsessionId?: string | undefined;\n}\n\n/**\n * Options for session lookup commands.\n */\nexport interface AgentSessionLookupOptions extends AgentCommandBaseOptions {\n\tsession?: string | undefined;\n}\n\n/**\n * Options for completing an agent session.\n */\nexport interface AgentCompleteCommandOptions extends AgentSessionLookupOptions {\n\textract?: boolean | undefined;\n\tcheckpointLabel?: string | undefined;\n}\n\n/**\n * Starts a local AgentFS-style session workspace.\n *\n * @param options - Command options.\n * @returns CLI exit code.\n */\nexport async function runAgentStartCommand(\n\toptions: AgentStartCommandOptions,\n): Promise<number> {\n\tconst client = createLocalAgentfsClient(options.fs);\n\tconst memory = createNodeFsMemoryStore({\n\t\trootDir: options.fs.rootDir,\n\t\tmissingFileBehavior: \"empty\",\n\t\tcreateRoot: true,\n\t});\n\tconst session = createTekMemoAgentSession({\n\t\tclient,\n\t\tmemory,\n\t\ttask: options.task,\n\t\tprojectId: options.projectId,\n\t\tactorId: options.actorId,\n\t\tsessionId: options.sessionId,\n\t});\n\n\tawait session.prepare();\n\tconst pointer = {\n\t\tsessionId: session.sessionId,\n\t\tprojectId: options.projectId ?? null,\n\t\troot: session.paths.root,\n\t\ttask: options.task,\n\t\tcreatedAt: new Date().toISOString(),\n\t\tpaths: session.paths,\n\t};\n\tawait options.fs.writeText(\n\t\tLATEST_AGENT_SESSION_PATH,\n\t\t`${JSON.stringify(pointer, null, 2)}\\n`,\n\t);\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"agent.start\", pointer);\n\t\treturn 0;\n\t}\n\n\toptions.output.success(`Started TekMemo agent session ${session.sessionId}`);\n\toptions.output.write(formatAgentInstructions(pointer));\n\treturn 0;\n}\n\n/**\n * Prints paths for a known agent session.\n *\n * @param options - Command options.\n * @returns CLI exit code.\n */\nexport async function runAgentPathsCommand(\n\toptions: AgentSessionLookupOptions,\n): Promise<number> {\n\tconst pointer = await readSessionPointer(options.fs, options.session);\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"agent.paths\", pointer);\n\t\treturn 0;\n\t}\n\toptions.output.write(formatAgentInstructions(pointer));\n\treturn 0;\n}\n\n/**\n * Extracts output files from an agent session.\n *\n * @param options - Command options.\n * @returns CLI exit code.\n */\nexport async function runAgentExtractCommand(\n\toptions: AgentSessionLookupOptions,\n): Promise<number> {\n\tconst pointer = await readSessionPointer(options.fs, options.session);\n\tconst extracted = await extractSessionMemory(\n\t\tcreateLocalAgentfsClient(options.fs),\n\t\tpointer.paths,\n\t);\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"agent.extract\", {\n\t\t\tsessionId: pointer.sessionId,\n\t\t\textracted,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`# TekMemo Agent Session ${pointer.sessionId}`,\n\t\t\t\"\",\n\t\t\t\"## Summary\",\n\t\t\textracted.summary || \"No summary written.\",\n\t\t\t\"\",\n\t\t\t\"## Durable Memory\",\n\t\t\textracted.durableMemory || \"No durable memory written.\",\n\t\t\t\"\",\n\t\t\t\"## Follow-ups\",\n\t\t\textracted.followUps || \"No follow-ups written.\",\n\t\t].join(\"\\n\"),\n\t);\n\treturn 0;\n}\n\n/**\n * Completes an agent session and optionally persists durable memory locally.\n *\n * @param options - Command options.\n * @returns CLI exit code.\n */\nexport async function runAgentCompleteCommand(\n\toptions: AgentCompleteCommandOptions,\n): Promise<number> {\n\tconst pointer = await readSessionPointer(options.fs, options.session);\n\tconst client = createLocalAgentfsClient(options.fs);\n\tconst memory = createNodeFsMemoryStore({\n\t\trootDir: options.fs.rootDir,\n\t\tmissingFileBehavior: \"empty\",\n\t\tcreateRoot: true,\n\t});\n\tconst session = createTekMemoAgentSession({\n\t\tclient,\n\t\tmemory,\n\t\ttask: pointer.task,\n\t\tprojectId: pointer.projectId ?? undefined,\n\t\tsessionId: pointer.sessionId,\n\t});\n\tconst result = await session.complete({\n\t\textractDurableMemory: options.extract ?? false,\n\t\tcheckpointLabel: options.checkpointLabel,\n\t});\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"agent.complete\", {\n\t\t\tsessionId: pointer.sessionId,\n\t\t\t...result,\n\t\t});\n\t\treturn 0;\n\t}\n\n\toptions.output.success(\n\t\t`Completed TekMemo agent session ${pointer.sessionId}`,\n\t);\n\tif (result.durableMemoryWritten) {\n\t\toptions.output.success(\"Persisted extracted durable memory to notes.\");\n\t}\n\toptions.output.write(\n\t\t`Summary: ${result.extracted.summary || \"No summary written.\"}`,\n\t);\n\treturn 0;\n}\n\n/**\n * Adapts the CLI filesystem to the AgentFS-like client contract.\n *\n * @param fs - CLI filesystem.\n * @returns AgentFS-like client.\n */\nfunction createLocalAgentfsClient(fs: TekMemoFileSystem): AgentfsLikeClient {\n\treturn {\n\t\treadText(path: string) {\n\t\t\treturn fs.readText(toRelativeAgentPath(path));\n\t\t},\n\t\twriteText(path: string, content: string) {\n\t\t\treturn fs.writeText(toRelativeAgentPath(path), content);\n\t\t},\n\t\tappendText(path: string, content: string) {\n\t\t\treturn fs.appendText(toRelativeAgentPath(path), content);\n\t\t},\n\t\texists(path: string) {\n\t\t\treturn fs.exists(toRelativeAgentPath(path));\n\t\t},\n\t\tsync: {\n\t\t\tpull: async () => {},\n\t\t\tpush: async () => {},\n\t\t\tcheckpoint: async () => {},\n\t\t},\n\t};\n}\n\n/**\n * Converts AgentFS absolute-ish paths into project-relative CLI paths.\n *\n * @param path - AgentFS path.\n * @returns Project-relative path.\n */\nfunction toRelativeAgentPath(path: string): string {\n\treturn path.replace(/^\\/+/, \"\");\n}\n\n/**\n * Reads a session pointer from `.tekmemo/tmp`.\n *\n * @param fs - CLI filesystem.\n * @param session - Session ID or latest.\n * @returns Session pointer.\n */\nasync function readSessionPointer(\n\tfs: TekMemoFileSystem,\n\tsession: string | undefined,\n): Promise<AgentSessionPointer> {\n\tconst latest = await fs.readText(LATEST_AGENT_SESSION_PATH);\n\tconst pointer = JSON.parse(latest) as AgentSessionPointer;\n\tif (!session || session === \"latest\" || session === pointer.sessionId) {\n\t\treturn pointer;\n\t}\n\tthrow new Error(\n\t\t`Unknown session \"${session}\". Only latest session ${pointer.sessionId} is tracked locally.`,\n\t);\n}\n\n/**\n * Formats agent-facing instructions for Codex, Claude Code, or any file-native agent.\n *\n * @param pointer - Session pointer.\n * @returns Markdown instructions.\n */\nfunction formatAgentInstructions(pointer: AgentSessionPointer): string {\n\treturn [\n\t\t\"\",\n\t\t\"## Agent Instructions\",\n\t\t`Session: ${pointer.sessionId}`,\n\t\t`Task: ${pointer.task}`,\n\t\t\"\",\n\t\t\"Read before editing:\",\n\t\t`- ${pointer.paths.context.core}`,\n\t\t`- ${pointer.paths.context.notes}`,\n\t\t\"\",\n\t\t\"Update during work:\",\n\t\t`- ${pointer.paths.working.plan}`,\n\t\t`- ${pointer.paths.working.commands}`,\n\t\t`- ${pointer.paths.working.errors}`,\n\t\t`- ${pointer.paths.working.changes}`,\n\t\t\"\",\n\t\t\"Write before finishing:\",\n\t\t`- ${pointer.paths.output.summary}`,\n\t\t`- ${pointer.paths.output.durableMemory}`,\n\t\t`- ${pointer.paths.output.followUps}`,\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\n/**\n * Stored local pointer for the latest agent session.\n */\ninterface AgentSessionPointer {\n\tsessionId: string;\n\tprojectId: string | null;\n\troot: string;\n\ttask: string;\n\tcreatedAt: string;\n\tpaths: ReturnType<typeof createTekMemoAgentSession>[\"paths\"];\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\n\nexport interface ChunksCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tlimit?: number | undefined;\n\tstrict?: boolean | undefined;\n}\n\nexport async function runChunksCommand(\n\toptions: ChunksCommandOptions,\n): Promise<number> {\n\tconst content = await options.fs.readTextIfExists(TEKMEMO_PATHS.chunks);\n\tconst records = content\n\t\t? parseJsonl(content, { strict: options.strict ?? false })\n\t\t: [];\n\tconst selected =\n\t\toptions.limit && options.limit > 0\n\t\t\t? records.slice(-options.limit)\n\t\t\t: records;\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify(selected, null, 2));\n\t\treturn 0;\n\t}\n\n\tif (selected.length === 0) {\n\t\toptions.output.write(\"No chunk records found.\");\n\t\treturn 0;\n\t}\n\n\toptions.output.write(\n\t\tselected\n\t\t\t.map((record) => {\n\t\t\t\tconst id =\n\t\t\t\t\ttypeof record.value.id === \"string\"\n\t\t\t\t\t\t? record.value.id\n\t\t\t\t\t\t: typeof record.value.chunkId === \"string\"\n\t\t\t\t\t\t\t? record.value.chunkId\n\t\t\t\t\t\t\t: `line ${record.line}`;\n\t\t\t\tconst source =\n\t\t\t\t\ttypeof record.value.sourcePath === \"string\"\n\t\t\t\t\t\t? record.value.sourcePath\n\t\t\t\t\t\t: \"unknown source\";\n\t\t\t\tconst status =\n\t\t\t\t\ttypeof record.value.status === \"string\"\n\t\t\t\t\t\t? record.value.status\n\t\t\t\t\t\t: typeof record.value.indexStatus === \"string\"\n\t\t\t\t\t\t\t? record.value.indexStatus\n\t\t\t\t\t\t\t: \"unknown\";\n\t\t\t\treturn `${id} ${status} ${source}`;\n\t\t\t})\n\t\t\t.join(\"\\n\"),\n\t);\n\n\treturn 0;\n}\n","import fs from \"node:fs/promises\";\nimport { CliUsageError } from \"../errors/cli-errors\";\nimport { resolveInsideRoot } from \"../fs/paths\";\n\nexport interface ResolveContentInput {\n\trootDir: string;\n\tinline?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tstdinContent?: string | undefined;\n}\n\nexport async function resolveCommandContent(\n\tinput: ResolveContentInput,\n): Promise<string> {\n\tconst sources = [\n\t\tinput.inline !== undefined,\n\t\tinput.stdin === true,\n\t\tinput.file !== undefined,\n\t].filter(Boolean).length;\n\n\tif (sources === 0) {\n\t\tthrow new CliUsageError(\n\t\t\t\"Provide content as an argument, --stdin, or --file <path>.\",\n\t\t);\n\t}\n\tif (sources > 1) {\n\t\tthrow new CliUsageError(\n\t\t\t\"Use only one content source: argument, --stdin, or --file.\",\n\t\t);\n\t}\n\n\tlet content: string;\n\tif (input.inline !== undefined) {\n\t\tcontent = input.inline;\n\t} else if (input.file !== undefined) {\n\t\tconst path = resolveInsideRoot(input.rootDir, input.file);\n\t\tcontent = await fs.readFile(path, \"utf8\");\n\t} else {\n\t\tcontent = input.stdinContent ?? (await readStdin());\n\t}\n\n\tif (content.includes(\"\\0\"))\n\t\tthrow new CliUsageError(\"Content must not contain null bytes.\");\n\tif (content.trim().length === 0)\n\t\tthrow new CliUsageError(\"Content must not be empty.\");\n\treturn content.trimEnd();\n}\n\nasync function readStdin(): Promise<string> {\n\tconst chunks: Buffer[] = [];\n\tfor await (const chunk of process.stdin) {\n\t\tchunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n\t}\n\treturn Buffer.concat(chunks).toString(\"utf8\");\n}\n","import { CliUsageError } from \"../errors/cli-errors\";\n\nexport function parseMetadataJson(\n\tvalue?: string,\n): Record<string, unknown> | undefined {\n\tif (value === undefined || value.trim().length === 0) return undefined;\n\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(value);\n\t} catch (error) {\n\t\tthrow new CliUsageError(\n\t\t\t`metadata must be valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\n\tif (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n\t\tthrow new CliUsageError(\"metadata must be a JSON object.\");\n\t}\n\n\tassertJsonSerializable(parsed, \"metadata\");\n\treturn parsed as Record<string, unknown>;\n}\n\nexport function assertJsonSerializable(value: unknown, name = \"value\"): void {\n\ttry {\n\t\tJSON.stringify(value);\n\t} catch (error) {\n\t\tthrow new CliUsageError(`${name} must be JSON serializable.`, {\n\t\t\tcause: error,\n\t\t});\n\t}\n}\n","import { CliUsageError } from \"../errors/cli-errors\";\n\nexport function parseNonNegativeInteger(value: string, name = \"value\"): number {\n\tconst parsed = Number.parseInt(value, 10);\n\tif (\n\t\t!Number.isFinite(parsed) ||\n\t\tparsed < 0 ||\n\t\tString(parsed) !== String(value).trim()\n\t) {\n\t\tthrow new CliUsageError(`${name} must be a non-negative integer.`);\n\t}\n\treturn parsed;\n}\n\nexport function parsePositiveInteger(value: string, name = \"value\"): number {\n\tconst parsed = parseNonNegativeInteger(value, name);\n\tif (parsed === 0) throw new CliUsageError(`${name} must be greater than 0.`);\n\treturn parsed;\n}\n\nexport function parseConfidence(value: string): number {\n\tconst parsed = Number.parseFloat(value);\n\tif (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {\n\t\tthrow new CliUsageError(\"confidence must be a number between 0 and 1.\");\n\t}\n\treturn parsed;\n}\n","export interface SecretScanFinding {\n\tkind: string;\n\tindex: number;\n\tpreview: string;\n}\n\nconst SECRET_PATTERNS: Array<{ kind: string; pattern: RegExp }> = [\n\t{\n\t\tkind: \"env_assignment_secret\",\n\t\tpattern:\n\t\t\t/\\b[A-Z0-9_]*(?:API[_-]?KEY|SECRET|TOKEN|PASSWORD|PRIVATE[_-]?KEY)[A-Z0-9_]*\\s*=\\s*[^\\s]+/gi,\n\t},\n\t{ kind: \"openai_key\", pattern: /\\bsk-[A-Za-z0-9_-]{20,}\\b/g },\n\t{ kind: \"github_token\", pattern: /\\bgh[pousr]_[A-Za-z0-9_]{20,}\\b/g },\n\t{\n\t\tkind: \"jwt\",\n\t\tpattern: /\\beyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\b/g,\n\t},\n\t{ kind: \"pem_private_key\", pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----/g },\n];\n\nexport function scanForSecrets(content: string): SecretScanFinding[] {\n\tconst findings: SecretScanFinding[] = [];\n\tfor (const { kind, pattern } of SECRET_PATTERNS) {\n\t\tpattern.lastIndex = 0;\n\t\tlet match = pattern.exec(content);\n\t\twhile (match !== null) {\n\t\t\tfindings.push({\n\t\t\t\tkind,\n\t\t\t\tindex: match.index,\n\t\t\t\tpreview: redactSecretPreview(match[0]),\n\t\t\t});\n\t\t\tmatch = pattern.exec(content);\n\t\t}\n\t}\n\treturn findings;\n}\n\nexport function redactSecretPreview(value: string): string {\n\tconst trimmed = value.trim();\n\tif (trimmed.length <= 8) return \"[redacted]\";\n\treturn `${trimmed.slice(0, 4)}…${trimmed.slice(-4)}`;\n}\n","import type {\n\tCreateNoteInput,\n\tJsonObject,\n\tMemoryKind,\n\tRecallFallbackMode,\n\tRecallIndexMode,\n\tRecallStrategy,\n\tSyncConflictResolution,\n\tSyncEventInput,\n\tTekMemoCloudClient,\n} from \"@tekmemo/cloud-client\";\nimport { type CloudConnectionOptions, createCliCloudClient } from \"../cloud\";\nimport { CliUsageError } from \"../errors/cli-errors\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { resolveCommandContent } from \"../utils/content\";\nimport { parseMetadataJson } from \"../utils/metadata\";\nimport { parseConfidence } from \"../utils/numbers\";\nimport { scanForSecrets } from \"../utils/secrets\";\n\nexport interface CloudCommandBaseOptions extends CloudConnectionOptions {\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\trootDir?: string | undefined;\n\tstdinContent?: string | undefined;\n}\n\nexport interface CloudHealthCommandOptions extends CloudCommandBaseOptions {}\n\nexport interface CloudContextCommandOptions extends CloudCommandBaseOptions {\n\tquery: string;\n\tlimit?: string | number | undefined;\n\tmaxBytes?: string | number | undefined;\n\tincludeCore?: boolean | undefined;\n\tincludeNotes?: boolean | undefined;\n\tincludeRecent?: boolean | undefined;\n}\n\nexport interface CloudRecallCommandOptions extends CloudCommandBaseOptions {\n\tquery: string;\n\tlimit?: string | number | undefined;\n\tstrategy?: string | undefined;\n\tfallback?: string | undefined;\n\trerank?: boolean | undefined;\n}\n\nexport interface CloudRecallIndexCommandOptions\n\textends CloudCommandBaseOptions {\n\tmode?: string | undefined;\n\tforce?: boolean | undefined;\n}\n\nexport interface CloudRememberCommandOptions extends CloudCommandBaseOptions {\n\tcontent?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tkind?: string | undefined;\n\ttitle?: string | undefined;\n\ttags?: string[] | undefined;\n\tconfidence?: string | number | undefined;\n\tsource?: string | undefined;\n\tmetadata?: string | undefined;\n\tallowSecrets?: boolean | undefined;\n}\n\nexport interface CloudReadCommandOptions extends CloudCommandBaseOptions {\n\ttarget: \"core\" | \"notes\";\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudUpdateCoreCommandOptions extends CloudCommandBaseOptions {\n\tcontent?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tallowSecrets?: boolean | undefined;\n}\n\nexport interface CloudRecentCommandOptions extends CloudCommandBaseOptions {\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudValidateCommandOptions extends CloudCommandBaseOptions {\n\tstrict?: boolean | undefined;\n}\n\nexport interface CloudSnapshotCommandOptions extends CloudCommandBaseOptions {\n\tlabel?: string | undefined;\n\ttype?: string | undefined;\n}\n\nexport interface CloudSyncStatusCommandOptions extends CloudCommandBaseOptions {\n\tclientId?: string | undefined;\n}\n\nexport interface CloudSyncPullCommandOptions extends CloudCommandBaseOptions {\n\tclientId: string;\n\tsinceServerVersion?: string | number | undefined;\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudSyncPushCommandOptions extends CloudCommandBaseOptions {\n\tclientId: string;\n\teventsJson?: string | undefined;\n\tfile?: string | undefined;\n\tstdin?: boolean | undefined;\n\tcheckpointJson?: string | undefined;\n}\n\nexport interface CloudSyncResolveCommandOptions\n\textends CloudCommandBaseOptions {\n\tconflictId: string;\n\tresolution: string;\n\tcontentJson?: string | undefined;\n}\n\nexport interface CloudReadinessCommandOptions extends CloudCommandBaseOptions {}\n\nexport interface CloudContextComposeCommandOptions\n\textends CloudCommandBaseOptions {\n\tquery: string;\n\ttopK?: string | number | undefined;\n\tstrategy?: string | undefined;\n\trerank?: boolean | undefined;\n\tincludeCoreMemory?: boolean | undefined;\n\tincludeRecallResults?: boolean | undefined;\n\tincludeGraphContext?: boolean | undefined;\n}\n\nexport interface CloudGraphListNodesCommandOptions\n\textends CloudCommandBaseOptions {\n\tlimit?: string | number | undefined;\n\tcursor?: string | undefined;\n\tstatus?: string | undefined;\n}\n\nexport interface CloudGraphCreateNodeCommandOptions\n\textends CloudCommandBaseOptions {\n\tnodeId: string;\n\ttype: string;\n\tlabel: string;\n\tsummary?: string | undefined;\n\taliases?: string[] | undefined;\n\tmetadataJson?: string | undefined;\n}\n\nexport interface CloudGraphListEdgesCommandOptions\n\textends CloudCommandBaseOptions {\n\tlimit?: string | number | undefined;\n\tcursor?: string | undefined;\n\tstatus?: string | undefined;\n}\n\nexport interface CloudGraphCreateEdgeCommandOptions\n\textends CloudCommandBaseOptions {\n\tedgeId?: string | undefined;\n\tfromNodeId: string;\n\ttoNodeId: string;\n\ttype: string;\n\tdirected?: boolean | undefined;\n\tweight?: string | number | undefined;\n\tmetadataJson?: string | undefined;\n}\n\nexport interface CloudGraphNeighborsCommandOptions\n\textends CloudCommandBaseOptions {\n\tnodeId: string;\n\tdirection?: string | undefined;\n\tdepth?: string | number | undefined;\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudGraphPathCommandOptions extends CloudCommandBaseOptions {\n\tfromNodeId: string;\n\ttoNodeId: string;\n\tmaxDepth?: string | number | undefined;\n}\n\nexport interface CloudExtractionRunCommandOptions\n\textends CloudCommandBaseOptions {\n\tmode?: string | undefined;\n\tforce?: boolean | undefined;\n}\n\nexport interface CloudExtractionJobsCommandOptions\n\textends CloudCommandBaseOptions {\n\tlimit?: string | number | undefined;\n}\n\nexport interface CloudEvalsRunCommandOptions extends CloudCommandBaseOptions {\n\tfixtureIds?: string | undefined;\n\titerations?: string | number | undefined;\n\tthresholdsJson?: string | undefined;\n}\n\nexport interface CloudBenchmarksRunCommandOptions\n\textends CloudCommandBaseOptions {\n\tfixtureIds?: string | undefined;\n\titerations?: string | number | undefined;\n\tthresholdsJson?: string | undefined;\n}\n\nexport interface CloudExportsCreateCommandOptions\n\textends CloudCommandBaseOptions {\n\tlabel?: string | undefined;\n}\n\nexport interface CloudExportsDownloadCommandOptions\n\textends CloudCommandBaseOptions {\n\texportId: string;\n}\n\nexport interface CloudSnapshotsCreateCommandOptions\n\textends CloudCommandBaseOptions {\n\tlabel?: string | undefined;\n\ttrigger?: string | undefined;\n}\n\nexport interface CloudSnapshotsDownloadCommandOptions\n\textends CloudCommandBaseOptions {\n\tsnapshotId: string;\n}\n\nexport interface CloudProvidersListCommandOptions\n\textends CloudCommandBaseOptions {}\n\nexport interface CloudProvidersCreateCommandOptions\n\textends CloudCommandBaseOptions {\n\tprovider: string;\n\tkeyName: string;\n\tsecret: string;\n\trestUrl?: string | undefined;\n\tembeddingModel?: string | undefined;\n\trerankModel?: string | undefined;\n}\n\nexport interface CloudProvidersTestCommandOptions\n\textends CloudCommandBaseOptions {\n\tcredentialId: string;\n}\n\nconst MEMORY_KINDS = new Set<MemoryKind>([\n\t\"decision\",\n\t\"constraint\",\n\t\"goal\",\n\t\"preference\",\n\t\"reference\",\n\t\"summary\",\n\t\"note\",\n]);\n\nconst RECALL_STRATEGIES = new Set<RecallStrategy>([\n\t\"local\",\n\t\"vector\",\n\t\"hybrid\",\n]);\nconst RECALL_FALLBACKS = new Set<RecallFallbackMode>([\"none\", \"local\"]);\nconst INDEX_MODES = new Set<RecallIndexMode>([\n\t\"all\",\n\t\"changed\",\n\t\"core\",\n\t\"notes\",\n]);\nconst CONFLICT_RESOLUTIONS = new Set<SyncConflictResolution>([\n\t\"keep_cloud\",\n\t\"use_client\",\n\t\"ignore\",\n]);\n\nexport async function runCloudHealthCommand(\n\toptions: CloudHealthCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options, true, true);\n\tconst result = await client.health();\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.health\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t\"TekMemo Cloud\",\n\t\t\t`ok: ${result.ok}`,\n\t\t\t`name: ${result.name ?? \"unknown\"}`,\n\t\t\t`version: ${result.version ?? \"unknown\"}`,\n\t\t\t`capabilities: ${(result.capabilities ?? []).join(\", \") || \"none\"}`,\n\t\t\t...(result.warnings?.length\n\t\t\t\t? result.warnings.map((warning) => `warning: ${warning}`)\n\t\t\t\t: []),\n\t\t].join(\"\\n\"),\n\t);\n\treturn result.ok ? 0 : 1;\n}\n\nexport async function runCloudContextCommand(\n\toptions: CloudContextCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst topK = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst maxBytes = normalizeOptionalPositiveInteger(\n\t\toptions.maxBytes,\n\t\t\"max bytes\",\n\t);\n\tconst includeCore = options.includeCore !== false;\n\tconst includeNotes = options.includeNotes !== false;\n\tconst includeRecent = options.includeRecent !== false;\n\n\tconst sections: string[] = [];\n\tconst data: Record<string, unknown> = {\n\t\tquery: options.query,\n\t\tsections: [] as unknown[],\n\t};\n\n\tif (includeCore) {\n\t\tconst core = await client.memory.readCore();\n\t\tsections.push(`# Core Memory\\n\\n${core.content.trim()}`);\n\t\t(data.sections as unknown[]).push({ type: \"core\", content: core.content });\n\t}\n\n\tif (includeNotes || includeRecent) {\n\t\tconst notes = await client.memory.listNotes({ limit: topK ?? 10 });\n\t\tconst renderedNotes = notes.items.map(renderNote).join(\"\\n\\n\");\n\t\tsections.push(`# Notes\\n\\n${renderedNotes || \"No cloud notes found.\"}`);\n\t\t(data.sections as unknown[]).push({\n\t\t\ttype: \"notes\",\n\t\t\titems: notes.items,\n\t\t\tnextCursor: notes.nextCursor,\n\t\t});\n\t}\n\n\tconst recall = await client.recall.query({\n\t\tquery: options.query,\n\t\t...(topK !== undefined ? { topK } : {}),\n\t\tstrategy: \"hybrid\",\n\t\tfallback: \"local\",\n\t\trerank: true,\n\t});\n\tsections.push(`# Recall\\n\\n${renderRecallHits(recall.items)}`);\n\t(data.sections as unknown[]).push({ type: \"recall\", result: recall });\n\n\tconst text = truncateText(\n\t\tsections.filter(Boolean).join(\"\\n\\n---\\n\\n\"),\n\t\tmaxBytes,\n\t);\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.context\", {\n\t\t\t...data,\n\t\t\ttext,\n\t\t\ttruncated: maxBytes !== undefined && text.length >= maxBytes,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.write(text.trimEnd());\n\treturn 0;\n}\n\nexport async function runCloudRecallCommand(\n\toptions: CloudRecallCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst topK = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst strategy = normalizeRecallStrategy(options.strategy);\n\tconst fallback = normalizeRecallFallback(options.fallback);\n\tconst result = await client.recall.query({\n\t\tquery: options.query,\n\t\t...(topK !== undefined ? { topK } : {}),\n\t\t...(strategy !== undefined ? { strategy } : {}),\n\t\t...(fallback !== undefined ? { fallback } : {}),\n\t\t...(options.rerank !== undefined ? { rerank: options.rerank } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.recall\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(renderRecallHits(result.items));\n\treturn 0;\n}\n\nexport async function runCloudRecallIndexCommand(\n\toptions: CloudRecallIndexCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst mode = normalizeIndexMode(options.mode);\n\tconst result = await client.recall.index({\n\t\t...(mode !== undefined ? { mode } : {}),\n\t\t...(options.force !== undefined ? { force: options.force } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.recall.index\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(\n\t\t`Recall indexing ${result.status}${result.jobId ? ` job=${result.jobId}` : \"\"}`,\n\t);\n\tif (result.indexed !== undefined)\n\t\toptions.output.write(`indexed: ${result.indexed}`);\n\tfor (const warning of result.warnings ?? [])\n\t\toptions.output.warn(`warning: ${warning}`);\n\treturn 0;\n}\n\nexport async function runCloudRememberCommand(\n\toptions: CloudRememberCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst content = await resolveCommandContent({\n\t\trootDir: options.rootDir ?? process.cwd(),\n\t\tinline: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t});\n\tconst findings = scanForSecrets(content);\n\tif (findings.length > 0 && !options.allowSecrets) {\n\t\tconst data = { stored: false, secretFindings: findings };\n\t\tif (options.json) printJsonEnvelope(options.output, \"cloud.remember\", data);\n\t\telse\n\t\t\toptions.output.error(\n\t\t\t\t`Refusing to store possible secret (${findings[0]?.kind}). Use --allow-secrets only after review.`,\n\t\t\t);\n\t\treturn 1;\n\t}\n\n\tconst metadata = parseMetadataJson(options.metadata);\n\tconst kind = normalizeMemoryKind(options.kind);\n\tconst note: CreateNoteInput = {\n\t\tcontent,\n\t\tkind,\n\t\t...(options.title ? { title: options.title } : {}),\n\t\t...(options.tags?.length\n\t\t\t? { tags: options.tags.map((tag) => tag.trim()).filter(Boolean) }\n\t\t\t: {}),\n\t\t...(options.source ? { source: options.source } : {}),\n\t\t...(options.confidence !== undefined\n\t\t\t? { confidence: normalizeConfidence(options.confidence) }\n\t\t\t: {}),\n\t\t...(metadata ? { metadata: metadata as JsonObject } : {}),\n\t};\n\tconst result = await client.memory.createNote(note);\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.remember\", {\n\t\t\t...result,\n\t\t\tsecretFindings: findings,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.success(`Stored cloud memory ${result.id}`);\n\treturn 0;\n}\n\nexport async function runCloudReadCommand(\n\toptions: CloudReadCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tif (options.target === \"core\") {\n\t\tconst result = await client.memory.readCore();\n\t\tif (options.json)\n\t\t\tprintJsonEnvelope(options.output, \"cloud.read\", {\n\t\t\t\ttarget: \"core\",\n\t\t\t\t...result,\n\t\t\t});\n\t\telse options.output.write(result.content.trimEnd());\n\t\treturn 0;\n\t}\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.memory.listNotes({\n\t\t...(limit !== undefined ? { limit } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.read\", {\n\t\t\ttarget: \"notes\",\n\t\t\t...result,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult.items.map(renderNote).join(\"\\n\\n\") || \"No cloud notes found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudUpdateCoreCommand(\n\toptions: CloudUpdateCoreCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst content = await resolveCommandContent({\n\t\trootDir: options.rootDir ?? process.cwd(),\n\t\tinline: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t});\n\tconst findings = scanForSecrets(content);\n\tif (findings.length > 0 && !options.allowSecrets) {\n\t\tconst data = { updated: false, secretFindings: findings };\n\t\tif (options.json)\n\t\t\tprintJsonEnvelope(options.output, \"cloud.update-core\", data);\n\t\telse\n\t\t\toptions.output.error(\n\t\t\t\t`Refusing to store possible secret (${findings[0]?.kind}). Use --allow-secrets only after review.`,\n\t\t\t);\n\t\treturn 1;\n\t}\n\tconst result = await client.memory.updateCore({ content });\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.update-core\", {\n\t\t\t...result,\n\t\t\tsecretFindings: findings,\n\t\t});\n\t\treturn 0;\n\t}\n\toptions.output.success(\"Updated cloud core memory.\");\n\treturn 0;\n}\n\nexport async function runCloudRecentCommand(\n\toptions: CloudRecentCommandOptions,\n): Promise<number> {\n\treturn runCloudReadCommand({ ...options, target: \"notes\" });\n}\n\nexport async function runCloudValidateCommand(\n\toptions: CloudValidateCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst errors: string[] = [];\n\tconst warnings: string[] = [];\n\tlet healthOk = false;\n\ttry {\n\t\tconst health = await client.health();\n\t\thealthOk = health.ok;\n\t\tfor (const warning of health.warnings ?? []) warnings.push(warning);\n\t\tif (!health.ok) errors.push(\"Cloud health check returned ok=false.\");\n\t} catch (error) {\n\t\terrors.push(\n\t\t\t`health: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\ttry {\n\t\tawait client.memory.readCore();\n\t} catch (error) {\n\t\terrors.push(\n\t\t\t`memory/core: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\tif (options.strict) {\n\t\ttry {\n\t\t\tawait client.memory.listNotes({ limit: 1 });\n\t\t} catch (error) {\n\t\t\terrors.push(\n\t\t\t\t`memory/notes: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t}\n\tconst result = { ok: healthOk && errors.length === 0, warnings, errors };\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.validate\", result);\n\t\treturn result.ok ? 0 : 1;\n\t}\n\tif (result.ok) options.output.success(\"Cloud memory is valid.\");\n\telse options.output.error(\"Cloud memory validation failed.\");\n\tfor (const warning of warnings) options.output.warn(`warning: ${warning}`);\n\tfor (const error of errors) options.output.error(`error: ${error}`);\n\treturn result.ok ? 0 : 1;\n}\n\nexport async function runCloudSnapshotCommand(\n\toptions: CloudSnapshotCommandOptions,\n): Promise<number> {\n\tconst data = {\n\t\tcreated: false,\n\t\treason: \"cloud_snapshots_not_available\",\n\t\tmessage:\n\t\t\t\"Cloud snapshots/exports are planned for the R2 milestone and are not exposed by the current project-scoped Cloud API.\",\n\t\tlabel: options.label ?? \"manual\",\n\t\ttype: options.type ?? \"manual\",\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"cloud.snapshot\", data);\n\telse options.output.error(data.message);\n\treturn 2;\n}\n\nexport async function runCloudSyncStatusCommand(\n\toptions: CloudSyncStatusCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.sync.status({\n\t\t...(options.clientId ? { clientId: options.clientId } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.sync.status\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`serverVersion: ${result.serverVersion}`,\n\t\t\t`openConflicts: ${result.openConflicts}`,\n\t\t\t`clients: ${result.clients.length}`,\n\t\t\t...(result.recentEvents !== undefined\n\t\t\t\t? [`recentEvents: ${result.recentEvents}`]\n\t\t\t\t: []),\n\t\t].join(\"\\n\"),\n\t);\n\treturn 0;\n}\n\nexport async function runCloudSyncPullCommand(\n\toptions: CloudSyncPullCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst sinceServerVersion = normalizeOptionalNonNegativeInteger(\n\t\toptions.sinceServerVersion,\n\t\t\"since server version\",\n\t);\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.sync.pull({\n\t\tclientId: options.clientId,\n\t\t...(sinceServerVersion !== undefined ? { sinceServerVersion } : {}),\n\t\t...(limit !== undefined ? { limit } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.sync.pull\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t`Pulled ${result.events.length} event(s). serverVersion=${result.serverVersion}`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudSyncPushCommand(\n\toptions: CloudSyncPushCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst payload = await resolveJsonPayload({\n\t\trootDir: options.rootDir ?? process.cwd(),\n\t\tinline: options.eventsJson,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t\tfieldName: \"events JSON\",\n\t});\n\tconst events = extractSyncEvents(payload);\n\tconst checkpoint = options.checkpointJson\n\t\t? parseJsonObject(options.checkpointJson, \"checkpoint JSON\")\n\t\t: extractCheckpoint(payload);\n\tconst result = await client.sync.push({\n\t\tclientId: options.clientId,\n\t\tevents,\n\t\t...(checkpoint !== undefined ? { checkpoint } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.sync.push\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`accepted: ${result.accepted.length}`,\n\t\t\t`duplicates: ${result.duplicates.length}`,\n\t\t\t`rejected: ${result.rejected.length}`,\n\t\t\t`conflicts: ${result.conflicts.length}`,\n\t\t\t`serverVersion: ${result.serverVersion}`,\n\t\t].join(\"\\n\"),\n\t);\n\treturn result.rejected.length === 0 && result.conflicts.length === 0 ? 0 : 1;\n}\n\nexport async function runCloudSyncResolveCommand(\n\toptions: CloudSyncResolveCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst resolution = normalizeConflictResolution(options.resolution);\n\tconst content = options.contentJson\n\t\t? parseJsonObject(options.contentJson, \"content JSON\")\n\t\t: undefined;\n\tconst result = await client.sync.resolveConflict({\n\t\tconflictId: options.conflictId,\n\t\tresolution,\n\t\t...(content !== undefined ? { content } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.sync.resolve\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Resolved conflict ${result.conflictId}`);\n\tif (result.serverVersion !== undefined)\n\t\toptions.output.write(`serverVersion: ${result.serverVersion}`);\n\treturn result.resolved ? 0 : 1;\n}\n\nexport async function runCloudReadinessCommand(\n\toptions: CloudReadinessCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options, true, true);\n\tconst result = await client.readiness();\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.readiness\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`ok: ${result.ok}`,\n\t\t\t`name: ${result.name ?? \"unknown\"}`,\n\t\t\t`version: ${result.version ?? \"unknown\"}`,\n\t\t\t`capabilities: ${(result.capabilities ?? []).join(\", \") || \"none\"}`,\n\t\t\t...(result.warnings?.length\n\t\t\t\t? result.warnings.map((warning) => `warning: ${warning}`)\n\t\t\t\t: []),\n\t\t].join(\"\\n\"),\n\t);\n\treturn result.ok ? 0 : 1;\n}\n\nexport async function runCloudContextComposeCommand(\n\toptions: CloudContextComposeCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst topK = normalizeOptionalPositiveInteger(options.topK, \"topK\");\n\tconst result = await client.context.compose({\n\t\tquery: options.query,\n\t\t...(topK !== undefined ? { topK } : {}),\n\t\t...(options.strategy !== undefined\n\t\t\t? { strategy: options.strategy as \"auto\" | \"vector\" | \"local\" }\n\t\t\t: {}),\n\t\t...(options.rerank !== undefined ? { rerank: options.rerank } : {}),\n\t\t...(options.includeCoreMemory !== undefined\n\t\t\t? { includeCoreMemory: options.includeCoreMemory }\n\t\t\t: {}),\n\t\t...(options.includeRecallResults !== undefined\n\t\t\t? { includeRecallResults: options.includeRecallResults }\n\t\t\t: {}),\n\t\t...(options.includeGraphContext !== undefined\n\t\t\t? { includeGraphContext: options.includeGraphContext }\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.context.compose\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(result.context);\n\treturn 0;\n}\n\nexport async function runCloudGraphListNodesCommand(\n\toptions: CloudGraphListNodesCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.graph.listNodes({\n\t\t...(limit !== undefined ? { limit } : {}),\n\t\t...(options.cursor ? { cursor: options.cursor } : {}),\n\t\t...(options.status\n\t\t\t? {\n\t\t\t\t\tstatus: options.status as\n\t\t\t\t\t\t| \"active\"\n\t\t\t\t\t\t| \"deprecated\"\n\t\t\t\t\t\t| \"conflicted\"\n\t\t\t\t\t\t| \"deleted\",\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.list-nodes\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult.items\n\t\t\t.map((node) => `Node: ${node.nodeId} - ${node.label}`)\n\t\t\t.join(\"\\n\") || \"No nodes found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudGraphCreateNodeCommand(\n\toptions: CloudGraphCreateNodeCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst metadata = options.metadataJson\n\t\t? parseJsonObject(options.metadataJson, \"metadata JSON\")\n\t\t: undefined;\n\tconst result = await client.graph.createNode({\n\t\tnodeId: options.nodeId,\n\t\ttype: options.type,\n\t\tlabel: options.label,\n\t\t...(options.summary ? { summary: options.summary } : {}),\n\t\t...(options.aliases ? { aliases: options.aliases } : {}),\n\t\t...(metadata ? { metadata } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.create-node\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created node ${result.nodeId}`);\n\treturn 0;\n}\n\nexport async function runCloudGraphListEdgesCommand(\n\toptions: CloudGraphListEdgesCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.graph.listEdges({\n\t\t...(limit !== undefined ? { limit } : {}),\n\t\t...(options.cursor ? { cursor: options.cursor } : {}),\n\t\t...(options.status\n\t\t\t? {\n\t\t\t\t\tstatus: options.status as\n\t\t\t\t\t\t| \"active\"\n\t\t\t\t\t\t| \"deprecated\"\n\t\t\t\t\t\t| \"conflicted\"\n\t\t\t\t\t\t| \"deleted\",\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.list-edges\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult.items\n\t\t\t.map(\n\t\t\t\t(edge) =>\n\t\t\t\t\t`Edge: ${edge.edgeId ?? \"(new)\"} - ${edge.fromNodeId} -> ${edge.toNodeId}`,\n\t\t\t)\n\t\t\t.join(\"\\n\") || \"No edges found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudGraphCreateEdgeCommand(\n\toptions: CloudGraphCreateEdgeCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst metadata = options.metadataJson\n\t\t? parseJsonObject(options.metadataJson, \"metadata JSON\")\n\t\t: undefined;\n\tconst weight =\n\t\toptions.weight !== undefined\n\t\t\t? parseFloat(String(options.weight))\n\t\t\t: undefined;\n\tconst result = await client.graph.createEdge({\n\t\t...(options.edgeId ? { edgeId: options.edgeId } : {}),\n\t\tfromNodeId: options.fromNodeId,\n\t\ttoNodeId: options.toNodeId,\n\t\ttype: options.type,\n\t\t...(options.directed !== undefined ? { directed: options.directed } : {}),\n\t\t...(weight !== undefined ? { weight } : {}),\n\t\t...(metadata ? { metadata } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.create-edge\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created edge ${result.edgeId ?? \"(new)\"}`);\n\treturn 0;\n}\n\nexport async function runCloudGraphNeighborsCommand(\n\toptions: CloudGraphNeighborsCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst depth =\n\t\toptions.depth !== undefined\n\t\t\t? parseInt(String(options.depth), 10)\n\t\t\t: undefined;\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.graph.neighbors({\n\t\tnodeId: options.nodeId,\n\t\t...(options.direction\n\t\t\t? { direction: options.direction as \"in\" | \"out\" | \"both\" }\n\t\t\t: {}),\n\t\t...(depth !== undefined ? { depth } : {}),\n\t\t...(limit !== undefined ? { limit } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.neighbors\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t`Nodes: ${result.nodes.length}, Edges: ${result.edges.length}`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudGraphPathCommand(\n\toptions: CloudGraphPathCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst maxDepth =\n\t\toptions.maxDepth !== undefined\n\t\t\t? parseInt(String(options.maxDepth), 10)\n\t\t\t: undefined;\n\tconst result = await client.graph.path({\n\t\tfromNodeId: options.fromNodeId,\n\t\ttoNodeId: options.toNodeId,\n\t\t...(maxDepth !== undefined ? { maxDepth } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.graph.path\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t`Nodes: ${result.nodes.length}, Edges: ${result.edges.length}`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudExtractionRunCommand(\n\toptions: CloudExtractionRunCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.extraction.run({\n\t\t...(options.mode\n\t\t\t? {\n\t\t\t\t\tmode: options.mode as\n\t\t\t\t\t\t| \"full\"\n\t\t\t\t\t\t| \"core\"\n\t\t\t\t\t\t| \"notes\"\n\t\t\t\t\t\t| \"sync\"\n\t\t\t\t\t\t| \"connectors\",\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(options.force !== undefined ? { force: options.force } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.extraction.run\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(\n\t\t`Extraction ${result.status}${result.jobId ? ` job=${result.jobId}` : \"\"}`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudExtractionJobsCommand(\n\toptions: CloudExtractionJobsCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst limit = normalizeOptionalPositiveInteger(options.limit, \"limit\");\n\tconst result = await client.extraction.jobs({\n\t\t...(limit !== undefined ? { limit } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.extraction.jobs\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult.items.map((job) => `Job: ${job.jobId} - ${job.status}`).join(\"\\n\") ||\n\t\t\t\"No jobs found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudEvalsRunCommand(\n\toptions: CloudEvalsRunCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.evals.run({\n\t\t...(options.fixtureIds\n\t\t\t? { fixtureIds: options.fixtureIds.split(\",\").map((s) => s.trim()) }\n\t\t\t: {}),\n\t\t...(options.iterations !== undefined\n\t\t\t? { iterations: parseInt(String(options.iterations), 10) }\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.evals.run\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Eval pass rate: ${result.passRate}`);\n\treturn 0;\n}\n\nexport async function runCloudBenchmarksRunCommand(\n\toptions: CloudBenchmarksRunCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.benchmarks.run({\n\t\t...(options.fixtureIds\n\t\t\t? { fixtureIds: options.fixtureIds.split(\",\").map((s) => s.trim()) }\n\t\t\t: {}),\n\t\t...(options.iterations !== undefined\n\t\t\t? { iterations: parseInt(String(options.iterations), 10) }\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.benchmarks.run\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(\n\t\t`Benchmark pass rate: ${result.passRate}, avg latency: ${result.avgLatencyMs ?? \"N/A\"}ms`,\n\t);\n\treturn 0;\n}\n\nexport async function runCloudExportsCreateCommand(\n\toptions: CloudExportsCreateCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.exports.create({\n\t\t...(options.label ? { label: options.label } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.exports.create\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created export ${result.exportId}`);\n\treturn 0;\n}\n\nexport async function runCloudExportsDownloadCommand(\n\toptions: CloudExportsDownloadCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.exports.downloadUrl({\n\t\texportId: options.exportId,\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.exports.download\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(`Download URL: ${result.downloadUrl}`);\n\treturn 0;\n}\n\nexport async function runCloudSnapshotsCreateCommand(\n\toptions: CloudSnapshotsCreateCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.snapshots.create({\n\t\t...(options.label ? { label: options.label } : {}),\n\t\t...(options.trigger\n\t\t\t? { trigger: options.trigger as \"manual\" | \"sync\" | \"system\" }\n\t\t\t: {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.snapshots.create\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created snapshot ${result.snapshotId}`);\n\treturn 0;\n}\n\nexport async function runCloudSnapshotsDownloadCommand(\n\toptions: CloudSnapshotsDownloadCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.snapshots.downloadUrl({\n\t\tsnapshotId: options.snapshotId,\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.snapshots.download\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(`Download URL: ${result.downloadUrl}`);\n\treturn 0;\n}\n\nexport async function runCloudProvidersListCommand(\n\toptions: CloudProvidersListCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.providers.list();\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.providers.list\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\tresult\n\t\t\t.map((cred) => `Provider: ${cred.provider} - ${cred.keyName}`)\n\t\t\t.join(\"\\n\") || \"No providers found.\",\n\t);\n\treturn 0;\n}\n\nexport async function runCloudProvidersCreateCommand(\n\toptions: CloudProvidersCreateCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.providers.create({\n\t\tprovider: options.provider as \"voyageai\" | \"openai\" | \"upstash-vector\",\n\t\tkeyName: options.keyName,\n\t\tsecret: options.secret,\n\t\t...(options.restUrl ? { restUrl: options.restUrl } : {}),\n\t\t...(options.embeddingModel\n\t\t\t? { embeddingModel: options.embeddingModel }\n\t\t\t: {}),\n\t\t...(options.rerankModel ? { rerankModel: options.rerankModel } : {}),\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.providers.create\", result);\n\t\treturn 0;\n\t}\n\toptions.output.success(`Created provider credential ${result.credentialId}`);\n\treturn 0;\n}\n\nexport async function runCloudProvidersTestCommand(\n\toptions: CloudProvidersTestCommandOptions,\n): Promise<number> {\n\tconst client = createCloudClient(options);\n\tconst result = await client.providers.test({\n\t\tcredentialId: options.credentialId,\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"cloud.providers.test\", result);\n\t\treturn 0;\n\t}\n\toptions.output.write(\n\t\t`Test result: ${result.ok ? \"OK\" : \"Failed\"}${result.message ? ` - ${result.message}` : \"\"}`,\n\t);\n\treturn result.ok ? 0 : 1;\n}\n\nfunction createCloudClient(\n\toptions: CloudCommandBaseOptions,\n\tallowMissingApiKey = false,\n\tallowMissingProjectId = false,\n): TekMemoCloudClient {\n\treturn createCliCloudClient({\n\t\tcloudUrl: options.cloudUrl,\n\t\tapiKey: options.apiKey,\n\t\tworkspaceId: options.workspaceId,\n\t\tprojectId: options.projectId,\n\t\ttimeoutMs: options.timeoutMs,\n\t\tallowMissingApiKey,\n\t\tallowMissingProjectId,\n\t});\n}\n\nfunction normalizeMemoryKind(value: string | undefined): MemoryKind {\n\tconst candidate = value ?? \"note\";\n\tif (!MEMORY_KINDS.has(candidate as MemoryKind)) {\n\t\tthrow new CliUsageError(\n\t\t\t`kind must be one of: ${[...MEMORY_KINDS].join(\", \")}.`,\n\t\t);\n\t}\n\treturn candidate as MemoryKind;\n}\n\nfunction normalizeRecallStrategy(\n\tvalue: string | undefined,\n): RecallStrategy | undefined {\n\tif (value === undefined) return undefined;\n\tif (RECALL_STRATEGIES.has(value as RecallStrategy))\n\t\treturn value as RecallStrategy;\n\tthrow new CliUsageError(\"recall strategy must be local, vector, or hybrid.\");\n}\n\nfunction normalizeRecallFallback(\n\tvalue: string | undefined,\n): RecallFallbackMode | undefined {\n\tif (value === undefined) return undefined;\n\tif (RECALL_FALLBACKS.has(value as RecallFallbackMode))\n\t\treturn value as RecallFallbackMode;\n\tthrow new CliUsageError(\"recall fallback must be none or local.\");\n}\n\nfunction normalizeIndexMode(\n\tvalue: string | undefined,\n): RecallIndexMode | undefined {\n\tif (value === undefined) return undefined;\n\tif (INDEX_MODES.has(value as RecallIndexMode))\n\t\treturn value as RecallIndexMode;\n\tthrow new CliUsageError(\"index mode must be all, changed, core, or notes.\");\n}\n\nfunction normalizeConflictResolution(value: string): SyncConflictResolution {\n\tif (CONFLICT_RESOLUTIONS.has(value as SyncConflictResolution))\n\t\treturn value as SyncConflictResolution;\n\tthrow new CliUsageError(\n\t\t\"conflict resolution must be keep_cloud, use_client, or ignore.\",\n\t);\n}\n\nfunction normalizeConfidence(value: string | number): number {\n\treturn parseConfidence(String(value));\n}\n\nfunction normalizeOptionalPositiveInteger(\n\tvalue: string | number | undefined,\n\tname: string,\n): number | undefined {\n\tif (value === undefined) return undefined;\n\tconst parsed = typeof value === \"number\" ? value : Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 1) {\n\t\tthrow new CliUsageError(`${name} must be a positive integer.`);\n\t}\n\treturn parsed;\n}\n\nfunction normalizeOptionalNonNegativeInteger(\n\tvalue: string | number | undefined,\n\tname: string,\n): number | undefined {\n\tif (value === undefined) return undefined;\n\tconst parsed = typeof value === \"number\" ? value : Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 0) {\n\t\tthrow new CliUsageError(`${name} must be a non-negative integer.`);\n\t}\n\treturn parsed;\n}\n\nfunction renderNote(note: {\n\tid: string;\n\tkind: string;\n\ttitle?: string;\n\tcontent: string;\n\ttags?: string[];\n\tcreatedAt?: string;\n}): string {\n\tconst heading = note.title ? `${note.title} (${note.id})` : note.id;\n\tconst tags = note.tags?.length ? `\\n- tags: ${note.tags.join(\", \")}` : \"\";\n\tconst created = note.createdAt ? `\\n- createdAt: ${note.createdAt}` : \"\";\n\treturn `## ${heading}\\n- kind: ${note.kind}${created}${tags}\\n\\n${note.content.trim()}`;\n}\n\nfunction renderRecallHits(\n\titems: Array<{ text: string; score?: number }>,\n): string {\n\tif (items.length === 0) return \"No matching cloud memories found.\";\n\treturn items\n\t\t.map((item, index) => {\n\t\t\tconst score = item.score === undefined ? \"\" : ` score=${item.score}`;\n\t\t\treturn `${index + 1}. ${item.text}${score}`;\n\t\t})\n\t\t.join(\"\\n\\n\");\n}\n\nfunction truncateText(text: string, maxBytes: number | undefined): string {\n\tif (maxBytes === undefined || text.length <= maxBytes) return text;\n\treturn `${text.slice(0, Math.max(0, maxBytes - 40)).trimEnd()}\\n\\n[truncated by --max-bytes]`;\n}\n\nasync function resolveJsonPayload(input: {\n\trootDir: string;\n\tinline?: string;\n\tstdin?: boolean;\n\tfile?: string;\n\tstdinContent?: string;\n\tfieldName: string;\n}): Promise<unknown> {\n\tconst raw = await resolveCommandContent({\n\t\trootDir: input.rootDir,\n\t\tinline: input.inline,\n\t\tstdin: input.stdin,\n\t\tfile: input.file,\n\t\tstdinContent: input.stdinContent,\n\t});\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tthrow new CliUsageError(\n\t\t\t`${input.fieldName} must be valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\nfunction parseJsonObject(raw: string, fieldName: string): JsonObject {\n\ttry {\n\t\tconst parsed = JSON.parse(raw) as unknown;\n\t\tif (!isJsonObject(parsed)) throw new Error(\"value must be an object\");\n\t\treturn parsed;\n\t} catch (error) {\n\t\tthrow new CliUsageError(\n\t\t\t`${fieldName} must be a JSON object: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\nfunction extractSyncEvents(payload: unknown): SyncEventInput[] {\n\tconst events = Array.isArray(payload)\n\t\t? payload\n\t\t: isJsonObject(payload)\n\t\t\t? payload.events\n\t\t\t: undefined;\n\tif (!Array.isArray(events))\n\t\tthrow new CliUsageError(\n\t\t\t\"sync push payload must be an event array or an object with an events array.\",\n\t\t);\n\treturn events.map((event, index) => {\n\t\tif (!isJsonObject(event))\n\t\t\tthrow new CliUsageError(\n\t\t\t\t`sync event at index ${index} must be an object.`,\n\t\t\t);\n\t\treturn event as unknown as SyncEventInput;\n\t});\n}\n\nfunction extractCheckpoint(\n\tpayload: unknown,\n):\n\t| { localVersion?: number; serverVersion?: number; hash?: string }\n\t| undefined {\n\tif (!isJsonObject(payload) || payload.checkpoint === undefined)\n\t\treturn undefined;\n\tif (!isJsonObject(payload.checkpoint))\n\t\tthrow new CliUsageError(\"sync checkpoint must be an object.\");\n\treturn payload.checkpoint as {\n\t\tlocalVersion?: number;\n\t\tserverVersion?: number;\n\t\thash?: string;\n\t};\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\nimport { parsePositiveInteger } from \"../utils/numbers\";\n\nexport interface ContextCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tquery?: string | undefined;\n\tmaxChars?: number | string | undefined;\n\tincludeEvents?: boolean | undefined;\n\tincludeChunks?: boolean | undefined;\n}\n\ninterface ContextSearchMatch {\n\tfile: string;\n\tline: number;\n\tcontent: string;\n}\n\nfunction truncate(value: string, maxChars: number): string {\n\tif (value.length <= maxChars) return value;\n\treturn `${value.slice(0, Math.max(0, maxChars - 20)).trimEnd()}\\n\\n[truncated]`;\n}\n\nfunction searchText(\n\tfile: string,\n\tcontent: string,\n\tquery: string,\n): ContextSearchMatch[] {\n\tconst lower = query.toLowerCase();\n\treturn content\n\t\t.split(/\\r?\\n/)\n\t\t.map((line, index) => ({ file, line: index + 1, content: line.trim() }))\n\t\t.filter((entry) => entry.content.toLowerCase().includes(lower));\n}\n\nexport async function runContextCommand(\n\toptions: ContextCommandOptions,\n): Promise<number> {\n\tconst maxChars =\n\t\ttypeof options.maxChars === \"number\"\n\t\t\t? options.maxChars\n\t\t\t: options.maxChars\n\t\t\t\t? parsePositiveInteger(options.maxChars, \"max chars\")\n\t\t\t\t: 12000;\n\tconst core =\n\t\t(await options.fs.readTextIfExists(TEKMEMO_PATHS.coreMemory)) ?? \"\";\n\tconst notes =\n\t\t(await options.fs.readTextIfExists(TEKMEMO_PATHS.notesMemory)) ?? \"\";\n\tconst eventContent =\n\t\t(await options.fs.readTextIfExists(TEKMEMO_PATHS.memoryEvents)) ?? \"\";\n\tconst chunkContent =\n\t\t(await options.fs.readTextIfExists(TEKMEMO_PATHS.chunks)) ?? \"\";\n\tconst events = eventContent\n\t\t? parseJsonl(eventContent)\n\t\t\t\t.slice(-10)\n\t\t\t\t.map((record) => record.value)\n\t\t: [];\n\tconst chunks = chunkContent\n\t\t? parseJsonl(chunkContent)\n\t\t\t\t.slice(-10)\n\t\t\t\t.map((record) => record.value)\n\t\t: [];\n\tconst matches = options.query\n\t\t? [\n\t\t\t\t...searchText(TEKMEMO_PATHS.coreMemory, core, options.query),\n\t\t\t\t...searchText(TEKMEMO_PATHS.notesMemory, notes, options.query),\n\t\t\t]\n\t\t: [];\n\n\tconst data = {\n\t\trootDir: options.fs.rootDir,\n\t\tquery: options.query ?? null,\n\t\tcore: truncate(core.trim(), Math.floor(maxChars * 0.45)),\n\t\tnotes: truncate(notes.trim(), Math.floor(maxChars * 0.35)),\n\t\tmatches,\n\t\t...(options.includeEvents ? { recentEvents: events } : {}),\n\t\t...(options.includeChunks ? { recentChunks: chunks } : {}),\n\t};\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"context\", data);\n\t\treturn 0;\n\t}\n\n\tconst sections = [\n\t\t\"# TekMemo Context\",\n\t\t`Root: ${options.fs.rootDir}`,\n\t\toptions.query ? `Query: ${options.query}` : undefined,\n\t\t\"\",\n\t\t\"## Core Memory\",\n\t\tdata.core || \"No core memory found.\",\n\t\t\"\",\n\t\t\"## Notes Memory\",\n\t\tdata.notes || \"No notes memory found.\",\n\t];\n\tif (matches.length > 0) {\n\t\tsections.push(\n\t\t\t\"\",\n\t\t\t\"## Text Matches\",\n\t\t\t...matches\n\t\t\t\t.slice(0, 20)\n\t\t\t\t.map((m) => `- ${m.file}:${m.line} — ${m.content}`),\n\t\t);\n\t}\n\tif (options.includeEvents && events.length > 0) {\n\t\tsections.push(\n\t\t\t\"\",\n\t\t\t\"## Recent Memory Events\",\n\t\t\t...events.map((event) =>\n\t\t\t\t`- ${String(event.timestamp ?? \"unknown\")} ${String(event.type ?? \"unknown\")} ${String(event.summary ?? \"\")}`.trim(),\n\t\t\t),\n\t\t);\n\t}\n\toptions.output.write(\n\t\ttruncate(\n\t\t\tsections\n\t\t\t\t.filter((section): section is string => section !== undefined)\n\t\t\t\t.join(\"\\n\"),\n\t\t\tmaxChars,\n\t\t),\n\t);\n\treturn 0;\n}\n","import { createHash } from \"node:crypto\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\n\nexport interface DiffCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tlabelA: string;\n\tlabelB: string;\n}\n\ninterface SnapshotBundle {\n\tid: string;\n\tlabel?: string;\n\ttimestamp?: string;\n\tcreatedAt?: string;\n\tfiles: Record<string, string>;\n\tchecksum: string;\n}\n\ninterface FileDiff {\n\tpath: string;\n\tstatus: \"added\" | \"removed\" | \"changed\" | \"unchanged\";\n\tbytesA?: number;\n\tbytesB?: number;\n\trecordsA?: number;\n\trecordsB?: number;\n}\n\nfunction lineCount(content: string): number {\n\treturn content.split(/\\r?\\n/).filter(Boolean).length;\n}\n\nfunction contentHash(content: string): string {\n\treturn createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nasync function loadBundle(\n\tfs: TekMemoFileSystem,\n\tpath: string,\n): Promise<SnapshotBundle> {\n\tconst raw = await fs.readText(path);\n\tconst parsed = JSON.parse(raw) as SnapshotBundle;\n\tif (\n\t\ttypeof parsed !== \"object\" ||\n\t\tparsed === null ||\n\t\ttypeof parsed.files !== \"object\"\n\t) {\n\t\tthrow new Error(\"Snapshot bundle is malformed.\");\n\t}\n\treturn parsed;\n}\n\nfunction snapshotMatches(\n\trecord: Record<string, unknown>,\n\tkey: string,\n): boolean {\n\tif (record.id === key) return true;\n\tif (record.label === key) return true;\n\tconst metadata = record.metadata;\n\tif (\n\t\ttypeof metadata === \"object\" &&\n\t\tmetadata !== null &&\n\t\t!Array.isArray(metadata)\n\t) {\n\t\treturn (metadata as Record<string, unknown>).label === key;\n\t}\n\treturn false;\n}\n\nexport async function runDiffCommand(\n\toptions: DiffCommandOptions,\n): Promise<number> {\n\tconst snapshotContent = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.snapshots,\n\t);\n\tif (!snapshotContent) {\n\t\toptions.output.error(\"No snapshots found.\");\n\t\treturn 1;\n\t}\n\n\tconst snapshots = parseJsonl(snapshotContent);\n\tconst snapA = snapshots.find((s) => snapshotMatches(s.value, options.labelA));\n\tconst snapB = snapshots.find((s) => snapshotMatches(s.value, options.labelB));\n\n\tif (!snapA) {\n\t\toptions.output.error(`Snapshot \"${options.labelA}\" not found.`);\n\t\treturn 1;\n\t}\n\tif (!snapB) {\n\t\toptions.output.error(`Snapshot \"${options.labelB}\" not found.`);\n\t\treturn 1;\n\t}\n\n\tconst pathA = snapA.value.path;\n\tconst pathB = snapB.value.path;\n\tif (typeof pathA !== \"string\" || typeof pathB !== \"string\") {\n\t\toptions.output.error(\"Snapshot index contains a malformed path.\");\n\t\treturn 1;\n\t}\n\n\tlet bundleA: SnapshotBundle;\n\tlet bundleB: SnapshotBundle;\n\ttry {\n\t\tbundleA = await loadBundle(options.fs, pathA);\n\t} catch {\n\t\toptions.output.error(`Failed to load snapshot bundle: ${pathA}`);\n\t\treturn 1;\n\t}\n\ttry {\n\t\tbundleB = await loadBundle(options.fs, pathB);\n\t} catch {\n\t\toptions.output.error(`Failed to load snapshot bundle: ${pathB}`);\n\t\treturn 1;\n\t}\n\n\tconst allPaths = new Set([\n\t\t...Object.keys(bundleA.files),\n\t\t...Object.keys(bundleB.files),\n\t]);\n\tconst diffs: FileDiff[] = [];\n\n\tfor (const filePath of allPaths) {\n\t\tconst contentA = bundleA.files[filePath];\n\t\tconst contentB = bundleB.files[filePath];\n\t\tif (contentA === undefined && contentB !== undefined) {\n\t\t\tdiffs.push({\n\t\t\t\tpath: filePath,\n\t\t\t\tstatus: \"added\",\n\t\t\t\tbytesB: Buffer.byteLength(contentB),\n\t\t\t});\n\t\t} else if (contentA !== undefined && contentB === undefined) {\n\t\t\tdiffs.push({\n\t\t\t\tpath: filePath,\n\t\t\t\tstatus: \"removed\",\n\t\t\t\tbytesA: Buffer.byteLength(contentA),\n\t\t\t});\n\t\t} else if (contentA !== undefined && contentB !== undefined) {\n\t\t\tif (contentHash(contentA) === contentHash(contentB)) {\n\t\t\t\tdiffs.push({\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tstatus: \"unchanged\",\n\t\t\t\t\tbytesA: Buffer.byteLength(contentA),\n\t\t\t\t\tbytesB: Buffer.byteLength(contentB),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst isJsonl = filePath.endsWith(\".jsonl\");\n\t\t\t\tdiffs.push({\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tstatus: \"changed\",\n\t\t\t\t\tbytesA: Buffer.byteLength(contentA),\n\t\t\t\t\tbytesB: Buffer.byteLength(contentB),\n\t\t\t\t\t...(isJsonl\n\t\t\t\t\t\t? { recordsA: lineCount(contentA), recordsB: lineCount(contentB) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst changed = diffs.filter((d) => d.status !== \"unchanged\");\n\tconst data = {\n\t\tlabelA: options.labelA,\n\t\tlabelB: options.labelB,\n\t\tsnapshotA: {\n\t\t\tid: bundleA.id,\n\t\t\tcreatedAt: bundleA.createdAt ?? bundleA.timestamp,\n\t\t\tpath: pathA,\n\t\t},\n\t\tsnapshotB: {\n\t\t\tid: bundleB.id,\n\t\t\tcreatedAt: bundleB.createdAt ?? bundleB.timestamp,\n\t\t\tpath: pathB,\n\t\t},\n\t\ttotalFiles: allPaths.size,\n\t\tchangedFiles: changed.length,\n\t\tdiffs: changed,\n\t};\n\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"diff\", data);\n\t\treturn 0;\n\t}\n\n\toptions.output.write(`Comparing \"${options.labelA}\" vs \"${options.labelB}\"`);\n\toptions.output.write(\n\t\t` [A] ${data.snapshotA.createdAt ?? \"unknown\"} [B] ${data.snapshotB.createdAt ?? \"unknown\"}`,\n\t);\n\toptions.output.write(\"\");\n\tif (changed.length === 0) {\n\t\toptions.output.success(\"No differences found. Snapshots are identical.\");\n\t\treturn 0;\n\t}\n\n\tconst statusLabel: Record<string, string> = {\n\t\tadded: \"+\",\n\t\tremoved: \"-\",\n\t\tchanged: \"~\",\n\t};\n\tfor (const diff of changed) {\n\t\tconst icon = statusLabel[diff.status] ?? \"?\";\n\t\tlet line = ` ${icon} ${diff.path}`;\n\t\tif (diff.status === \"changed\") {\n\t\t\tconst sizeInfo = `${diff.bytesA}B → ${diff.bytesB}B`;\n\t\t\tconst recordInfo =\n\t\t\t\tdiff.recordsA !== undefined && diff.recordsB !== undefined\n\t\t\t\t\t? ` (${diff.recordsA} → ${diff.recordsB} records)`\n\t\t\t\t\t: \"\";\n\t\t\tline += ` ${sizeInfo}${recordInfo}`;\n\t\t} else if (diff.status === \"added\" && diff.bytesB !== undefined)\n\t\t\tline += ` (${diff.bytesB}B)`;\n\t\telse if (diff.status === \"removed\" && diff.bytesA !== undefined)\n\t\t\tline += ` (${diff.bytesA}B)`;\n\t\toptions.output.write(line);\n\t}\n\toptions.output.write(\n\t\t`\\n${changed.length} file(s) changed out of ${allPaths.size} total.`,\n\t);\n\treturn 0;\n}\n","import { z } from \"zod\";\n\nconst JsonRecordSchema = z.record(z.string(), z.unknown());\nconst IsoDateSchema = z.string().datetime();\nconst NonEmptyStringSchema = z.string().min(1);\n\nexport const ManifestSchema = z.object({\n\tversion: NonEmptyStringSchema,\n\tprojectId: NonEmptyStringSchema.optional(),\n\tcreatedAt: IsoDateSchema,\n\tupdatedAt: IsoDateSchema,\n\tmemory: z.object({\n\t\tcore: NonEmptyStringSchema,\n\t\tnotes: NonEmptyStringSchema,\n\t}),\n\tevents: z.object({\n\t\tmemoryEvents: NonEmptyStringSchema,\n\t\tconversations: NonEmptyStringSchema,\n\t}),\n\tindexes: z.object({\n\t\tchunks: NonEmptyStringSchema,\n\t}),\n\tgraph: z.object({\n\t\tnodes: NonEmptyStringSchema,\n\t\tedges: NonEmptyStringSchema,\n\t}),\n\tsnapshots: z.object({\n\t\tindex: NonEmptyStringSchema,\n\t}),\n});\n\nexport const ConversationEntrySchema = z.object({\n\ttimestamp: IsoDateSchema,\n\trole: z.enum([\"user\", \"assistant\", \"system\", \"tool\"]),\n\tcontent: z.string(),\n\tsummary: z.string().optional(),\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const MemoryEventSchema = z.object({\n\tid: NonEmptyStringSchema,\n\ttype: z.enum([\n\t\t\"memory.created\",\n\t\t\"memory.updated\",\n\t\t\"memory.merged\",\n\t\t\"memory.conflicted\",\n\t\t\"memory.decayed\",\n\t\t\"memory.forgotten\",\n\t\t\"memory.restored\",\n\t\t\"memory.indexed\",\n\t\t\"memory.reindexed\",\n\t\t\"snapshot.created\",\n\t\t\"sync.started\",\n\t\t\"sync.completed\",\n\t\t\"sync.failed\",\n\t]),\n\ttimestamp: IsoDateSchema,\n\tprojectId: NonEmptyStringSchema.optional(),\n\tsourcePath: NonEmptyStringSchema.optional(),\n\tactor: z\n\t\t.object({\n\t\t\ttype: z.enum([\"user\", \"agent\", \"system\", \"api\"]),\n\t\t\tid: NonEmptyStringSchema.optional(),\n\t\t})\n\t\t.optional(),\n\tsummary: NonEmptyStringSchema.optional(),\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const ChunkRecordSchema = z.object({\n\tchunkId: NonEmptyStringSchema,\n\tsourcePath: NonEmptyStringSchema,\n\tsourceType: z.enum([\n\t\t\"document\",\n\t\t\"note\",\n\t\t\"conversation\",\n\t\t\"event\",\n\t\t\"import\",\n\t\t\"graph\",\n\t]),\n\tsourceId: NonEmptyStringSchema,\n\tsourceHash: NonEmptyStringSchema,\n\ttextHash: NonEmptyStringSchema,\n\tmemoryType: z.enum([\n\t\t\"core\",\n\t\t\"notes\",\n\t\t\"conversation\",\n\t\t\"event\",\n\t\t\"chunk\",\n\t\t\"graph\",\n\t]),\n\tindex: z.number().int().nonnegative(),\n\tstartOffset: z.number().int().nonnegative(),\n\tendOffset: z.number().int().nonnegative(),\n\tstatus: z.enum([\"active\", \"stale\", \"deleted\"]),\n\tcreatedAt: IsoDateSchema,\n\tupdatedAt: IsoDateSchema.optional(),\n\tsectionName: z.string().optional(),\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const SnapshotEntrySchema = z.object({\n\tid: NonEmptyStringSchema,\n\tpath: NonEmptyStringSchema,\n\ttype: z.enum([\"manual\", \"automatic\", \"pre-sync\", \"pre-restore\"]),\n\tstatus: z.enum([\"available\", \"expired\", \"deleted\"]),\n\tcreatedAt: IsoDateSchema,\n\texpiresAt: IsoDateSchema.optional(),\n\tchecksum: NonEmptyStringSchema.optional(),\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const LegacySnapshotEntrySchema = z.object({\n\tid: NonEmptyStringSchema,\n\ttimestamp: IsoDateSchema,\n\tlabel: NonEmptyStringSchema,\n\tpath: NonEmptyStringSchema,\n\tmetadata: JsonRecordSchema.optional(),\n});\n\nexport const MemoryChunkSchema = ChunkRecordSchema;\n","import type { z } from \"zod\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport {\n\tREQUIRED_DIRS,\n\tREQUIRED_FILES,\n\tTEKMEMO_PATHS,\n} from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\nimport {\n\tConversationEntrySchema,\n\tManifestSchema,\n\tMemoryChunkSchema,\n\tMemoryEventSchema,\n\tSnapshotEntrySchema,\n} from \"../protocol/schemas\";\n\nexport interface DoctorIssue {\n\tlevel: \"error\" | \"warning\";\n\tcode: string;\n\tmessage: string;\n}\n\nexport interface DoctorCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tstrict?: boolean | undefined;\n}\n\nexport async function runDoctorCommand(\n\toptions: DoctorCommandOptions,\n): Promise<number> {\n\tconst issues: DoctorIssue[] = [];\n\n\tfor (const dir of REQUIRED_DIRS) {\n\t\tconst exists = await options.fs.exists(dir);\n\t\tif (!exists) {\n\t\t\tissues.push({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tcode: \"missing_dir\",\n\t\t\t\tmessage: `Missing directory: ${dir}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const file of REQUIRED_FILES) {\n\t\tconst exists = await options.fs.exists(file);\n\t\tif (!exists) {\n\t\t\tissues.push({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tcode: \"missing_file\",\n\t\t\t\tmessage: `Missing file: ${file}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst manifestContent = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.manifest,\n\t);\n\tif (manifestContent) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(manifestContent);\n\t\t\tManifestSchema.parse(parsed);\n\t\t} catch (error) {\n\t\t\tissues.push({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tcode: \"invalid_manifest\",\n\t\t\t\tmessage: `manifest.json: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst validationMap: Record<string, z.ZodSchema> = {\n\t\t[TEKMEMO_PATHS.memoryEvents]: MemoryEventSchema,\n\t\t[TEKMEMO_PATHS.conversations]: ConversationEntrySchema,\n\t\t[TEKMEMO_PATHS.chunks]: MemoryChunkSchema,\n\t\t[TEKMEMO_PATHS.snapshots]: SnapshotEntrySchema,\n\t};\n\n\tconst conversationIds = new Set<string>();\n\n\tfor (const [file, schema] of Object.entries(validationMap)) {\n\t\tconst content = await options.fs.readTextIfExists(file);\n\t\tif (content === undefined) continue;\n\n\t\tconst records = parseJsonl(content, { strict: options.strict ?? false });\n\t\tfor (const record of records) {\n\t\t\ttry {\n\t\t\t\tconst validated = schema.parse(record.value) as Record<string, unknown>;\n\n\t\t\t\tif (\n\t\t\t\t\tfile === TEKMEMO_PATHS.conversations &&\n\t\t\t\t\ttypeof validated.id === \"string\"\n\t\t\t\t) {\n\t\t\t\t\tconversationIds.add(validated.id);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tissues.push({\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tcode: \"invalid_line\",\n\t\t\t\t\tmessage: `${file}:${record.line}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst eventContent = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t);\n\tif (eventContent) {\n\t\tconst events = parseJsonl(eventContent);\n\t\tfor (const event of events) {\n\t\t\tconst docId = event.value.documentId;\n\t\t\tif (typeof docId !== \"string\") continue;\n\t\t\tif (docId === \"core\" || docId === \"notes\") continue;\n\n\t\t\tif (conversationIds.size > 0 && !conversationIds.has(docId)) {\n\t\t\t\tissues.push({\n\t\t\t\t\tlevel: \"warning\",\n\t\t\t\t\tcode: \"orphaned_event\",\n\t\t\t\t\tmessage: `${TEKMEMO_PATHS.memoryEvents}:${event.line}: Event references unknown document/conversation \"${docId}\"`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst result = {\n\t\tok: issues.filter((issue) => issue.level === \"error\").length === 0,\n\t\tissues,\n\t};\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify(result, null, 2));\n\t} else if (result.ok) {\n\t\tif (issues.length > 0) {\n\t\t\toptions.output.warn(\n\t\t\t\t[\n\t\t\t\t\t\"TekMemo doctor passed with warnings:\",\n\t\t\t\t\t...issues.map((issue) => `- [${issue.level}] ${issue.message}`),\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t} else {\n\t\t\toptions.output.success(\"TekMemo doctor passed.\");\n\t\t}\n\t} else {\n\t\toptions.output.error(\n\t\t\t[\n\t\t\t\t\"TekMemo doctor found errors:\",\n\t\t\t\t...issues.map((issue) => `- [${issue.level}] ${issue.message}`),\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\treturn result.ok ? 0 : 1;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { stringifyJsonl } from \"../protocol/jsonl\";\nimport { scanForSecrets } from \"../utils/secrets\";\n\nexport interface EditCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\ttype: \"note\" | \"core\";\n\tmessage: string;\n\tallowSecrets?: boolean | undefined;\n}\n\nexport async function runEditCommand(\n\toptions: EditCommandOptions,\n): Promise<number> {\n\tconst findings = scanForSecrets(options.message);\n\tif (findings.length > 0 && !options.allowSecrets) {\n\t\tif (options.json)\n\t\t\tprintJsonEnvelope(options.output, \"edit\", {\n\t\t\t\tupdated: false,\n\t\t\t\tsecretFindings: findings,\n\t\t\t});\n\t\telse\n\t\t\toptions.output.error(\n\t\t\t\t`Refusing to store possible secret (${findings[0]?.kind}). Use --allow-secrets only after review.`,\n\t\t\t);\n\t\treturn 1;\n\t}\n\n\tconst file =\n\t\toptions.type === \"core\"\n\t\t\t? TEKMEMO_PATHS.coreMemory\n\t\t\t: TEKMEMO_PATHS.notesMemory;\n\tconst timestamp = new Date().toISOString();\n\tconst entry =\n\t\toptions.type === \"note\"\n\t\t\t? `\\n## ${timestamp}\\n- kind: note\\n- tags: none\\n- confidence: 1\\n\\n${options.message.trim()}\\n`\n\t\t\t: `\\n${options.message.trim()}\\n`;\n\tawait options.fs.appendText(file, entry);\n\n\tconst event = {\n\t\tid: `evt_${Date.now()}_${Math.random().toString(16).slice(2)}`,\n\t\ttype: \"memory.updated\",\n\t\ttimestamp,\n\t\tsourcePath: file,\n\t\tactor: { type: \"user\" },\n\t\tsummary: `${options.type} memory updated by CLI`,\n\t\tmetadata: {\n\t\t\tdocument: options.type,\n\t\t\tcommand: \"edit\",\n\t\t\tcreatedBy: \"@tekmemo/cli\",\n\t\t},\n\t};\n\tawait options.fs.appendText(\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t\tstringifyJsonl([event]),\n\t);\n\n\tconst data = {\n\t\tupdated: true,\n\t\tpath: file,\n\t\teventId: event.id,\n\t\tsecretFindings: findings,\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"edit\", data);\n\telse options.output.success(`Updated ${file}`);\n\treturn 0;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { parseJsonl } from \"../protocol/jsonl\";\n\nexport interface EventsCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tlimit?: number | undefined;\n\tstrict?: boolean | undefined;\n}\n\nexport async function runEventsCommand(\n\toptions: EventsCommandOptions,\n): Promise<number> {\n\tconst content = await options.fs.readTextIfExists(TEKMEMO_PATHS.memoryEvents);\n\tconst records = content\n\t\t? parseJsonl(content, { strict: options.strict ?? false })\n\t\t: [];\n\tconst selected =\n\t\toptions.limit && options.limit > 0\n\t\t\t? records.slice(-options.limit)\n\t\t\t: records;\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify(selected, null, 2));\n\t\treturn 0;\n\t}\n\n\tif (selected.length === 0) {\n\t\toptions.output.write(\"No memory events found.\");\n\t\treturn 0;\n\t}\n\n\toptions.output.write(\n\t\tselected\n\t\t\t.map((record) => {\n\t\t\t\tconst type =\n\t\t\t\t\ttypeof record.value.type === \"string\" ? record.value.type : \"unknown\";\n\t\t\t\tconst at =\n\t\t\t\t\ttypeof record.value.timestamp === \"string\"\n\t\t\t\t\t\t? record.value.timestamp\n\t\t\t\t\t\t: `line ${record.line}`;\n\t\t\t\tconst summary =\n\t\t\t\t\ttypeof record.value.summary === \"string\"\n\t\t\t\t\t\t? ` — ${record.value.summary}`\n\t\t\t\t\t\t: \"\";\n\t\t\t\treturn `${at} ${type}${summary}`;\n\t\t\t})\n\t\t\t.join(\"\\n\"),\n\t);\n\n\treturn 0;\n}\n","import readline from \"node:readline/promises\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport {\n\tREQUIRED_DIRS,\n\tREQUIRED_FILES,\n\tTEKMEMO_PATHS,\n} from \"../protocol/constants\";\nimport { createDefaultManifest } from \"../protocol/manifest\";\n\nexport interface InitCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tforce?: boolean | undefined;\n\tprojectId?: string | undefined;\n\tnoInput?: boolean | undefined;\n}\n\nexport async function runInitCommand(\n\toptions: InitCommandOptions,\n): Promise<number> {\n\tawait options.fs.ensureSafeRoot();\n\n\tlet projectId: string | undefined = options.projectId?.trim();\n\tif (projectId !== undefined && projectId.length === 0) projectId = undefined;\n\n\tif (!projectId && !options.json && !options.noInput && process.stdout.isTTY) {\n\t\toptions.output.write(\"Initializing TekMemo...\");\n\t\tconst rl = readline.createInterface({\n\t\t\tinput: process.stdin,\n\t\t\toutput: process.stdout,\n\t\t});\n\t\ttry {\n\t\t\tconst answer = await rl.question(\n\t\t\t\t\"Enter project ID (leave empty for random): \",\n\t\t\t);\n\t\t\tif (answer.trim()) projectId = answer.trim();\n\t\t} finally {\n\t\t\trl.close();\n\t\t}\n\t}\n\n\tfor (const dir of REQUIRED_DIRS) await options.fs.mkdir(dir);\n\n\tconst existingManifest = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.manifest,\n\t);\n\tif (existingManifest && !options.force) {\n\t\tconst data = {\n\t\t\tcreated: false,\n\t\t\trootDir: options.fs.rootDir,\n\t\t\tmessage: \".tekmemo already exists. Use --force to overwrite seed files.\",\n\t\t};\n\t\tif (options.json) printJsonEnvelope(options.output, \"init\", data);\n\t\telse options.output.write(data.message);\n\t\treturn 0;\n\t}\n\n\tconst manifest = createDefaultManifest(projectId ? { projectId } : undefined);\n\tconst seedFiles: Record<string, string> = {\n\t\t[TEKMEMO_PATHS.manifest]: `${JSON.stringify(manifest, null, 2)}\\n`,\n\t\t[TEKMEMO_PATHS.coreMemory]: \"# Core Memory\\n\\n\",\n\t\t[TEKMEMO_PATHS.notesMemory]: \"# Notes\\n\\n\",\n\t\t[TEKMEMO_PATHS.memoryEvents]: \"\",\n\t\t[TEKMEMO_PATHS.conversations]: \"\",\n\t\t[TEKMEMO_PATHS.chunks]: \"\",\n\t\t[TEKMEMO_PATHS.graphNodes]: \"\",\n\t\t[TEKMEMO_PATHS.graphEdges]: \"\",\n\t\t[TEKMEMO_PATHS.snapshots]: \"\",\n\t};\n\n\tconst created: string[] = [];\n\tconst overwritten: string[] = [];\n\tconst skipped: string[] = [];\n\n\tfor (const file of REQUIRED_FILES) {\n\t\tconst exists = await options.fs.exists(file);\n\t\tif (!exists || options.force) {\n\t\t\tawait options.fs.writeText(file, seedFiles[file] ?? \"\");\n\t\t\tif (exists) overwritten.push(file);\n\t\t\telse created.push(file);\n\t\t} else {\n\t\t\tskipped.push(file);\n\t\t}\n\t}\n\n\tconst data = {\n\t\tcreated: true,\n\t\trootDir: options.fs.rootDir,\n\t\tmanifest,\n\t\tfiles: { created, overwritten, skipped },\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"init\", data);\n\telse\n\t\toptions.output.success(\n\t\t\t`Initialized .tekmemo at ${options.fs.rootDir} (Project ID: ${manifest.projectId ?? \"none\"})`,\n\t\t);\n\treturn 0;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { inspectTekMemo } from \"../protocol/summary\";\n\nexport interface InspectCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean;\n}\n\nexport async function runInspectCommand(\n\toptions: InspectCommandOptions,\n): Promise<number> {\n\tconst inspection = await inspectTekMemo(options.fs);\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify(inspection, null, 2));\n\t\treturn 0;\n\t}\n\n\tconst lines = [\n\t\t`TekMemo root: ${inspection.rootDir}`,\n\t\t`.tekmemo exists: ${inspection.exists ? \"yes\" : \"no\"}`,\n\t\tinspection.manifest\n\t\t\t? `Project: ${inspection.manifest.projectId}`\n\t\t\t: \"Project: missing manifest\",\n\t\t\"\",\n\t\t\"Files:\",\n\t];\n\n\tfor (const file of inspection.files) {\n\t\tlines.push(\n\t\t\t`- ${file.path}: ${file.exists ? `${file.bytes} bytes` : \"missing\"}${file.records !== undefined ? `, ${file.records} records` : \"\"}`,\n\t\t);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\"Summary:\");\n\tlines.push(`- events: ${inspection.summary.eventCount}`);\n\tlines.push(`- conversations: ${inspection.summary.conversationCount}`);\n\tlines.push(`- chunks: ${inspection.summary.chunkCount}`);\n\tlines.push(`- graph nodes: ${inspection.summary.graphNodeCount}`);\n\tlines.push(`- graph edges: ${inspection.summary.graphEdgeCount}`);\n\tlines.push(`- snapshots: ${inspection.summary.snapshotCount}`);\n\n\toptions.output.write(lines.join(\"\\n\"));\n\treturn 0;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\n\nexport interface ReadCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\ttarget: \"core\" | \"notes\" | \"manifest\";\n}\n\nconst TARGET_PATHS = {\n\tcore: TEKMEMO_PATHS.coreMemory,\n\tnotes: TEKMEMO_PATHS.notesMemory,\n\tmanifest: TEKMEMO_PATHS.manifest,\n} as const;\n\nexport async function runReadCommand(\n\toptions: ReadCommandOptions,\n): Promise<number> {\n\tconst path = TARGET_PATHS[options.target];\n\tconst content = await options.fs.readTextIfExists(path);\n\tif (content === undefined) {\n\t\toptions.output.error(`${path} does not exist. Run tekmemo init first.`);\n\t\treturn 1;\n\t}\n\tif (options.json)\n\t\tprintJsonEnvelope(options.output, \"read\", {\n\t\t\ttarget: options.target,\n\t\t\tpath,\n\t\t\tcontent,\n\t\t});\n\telse options.output.write(content.trimEnd());\n\treturn 0;\n}\n","import { CliUsageError } from \"../errors/cli-errors\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { stringifyJsonl } from \"../protocol/jsonl\";\nimport { resolveCommandContent } from \"../utils/content\";\nimport { parseMetadataJson } from \"../utils/metadata\";\nimport { parseConfidence } from \"../utils/numbers\";\nimport { scanForSecrets } from \"../utils/secrets\";\n\nexport interface RememberCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tcontent?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tstdinContent?: string | undefined;\n\tkind?: string | undefined;\n\ttitle?: string | undefined;\n\ttags?: string[] | undefined;\n\tconfidence?: string | number | undefined;\n\tsource?: string | undefined;\n\tactor?: string | undefined;\n\tmetadata?: string | undefined;\n\tallowSecrets?: boolean | undefined;\n}\n\nconst NOTE_KINDS = new Set([\n\t\"decision\",\n\t\"constraint\",\n\t\"goal\",\n\t\"preference\",\n\t\"reference\",\n\t\"summary\",\n\t\"note\",\n]);\n\nfunction normalizeKind(kind?: string): string {\n\tconst normalized = (kind ?? \"note\").trim();\n\tif (!NOTE_KINDS.has(normalized)) {\n\t\tthrow new CliUsageError(\n\t\t\t`Invalid memory kind \"${normalized}\". Allowed: ${[...NOTE_KINDS].join(\", \")}`,\n\t\t);\n\t}\n\treturn normalized;\n}\n\nfunction parseActor(actor?: string): {\n\ttype: \"user\" | \"agent\" | \"system\" | \"api\";\n\tid?: string;\n} {\n\tif (!actor) return { type: \"user\" };\n\tconst [type, id] = actor.split(\":\", 2);\n\tif (\n\t\ttype !== \"user\" &&\n\t\ttype !== \"agent\" &&\n\t\ttype !== \"system\" &&\n\t\ttype !== \"api\"\n\t) {\n\t\tthrow new CliUsageError(\n\t\t\t\"actor must be one of user, agent, system, or api, optionally followed by :id.\",\n\t\t);\n\t}\n\treturn { type, ...(id ? { id } : {}) };\n}\n\nfunction formatTimestampedNote(input: {\n\ttimestamp: string;\n\tkind: string;\n\tcontent: string;\n\ttitle?: string;\n\ttags?: string[];\n\tconfidence: number;\n\tsource?: string;\n\tmetadata?: Record<string, unknown>;\n}): string {\n\tconst heading = input.title\n\t\t? `${input.timestamp} — ${input.title.replace(/\\s+/g, \" \").trim()}`\n\t\t: input.timestamp;\n\tconst tags = input.tags?.length ? input.tags.join(\", \") : \"none\";\n\tconst lines = [\n\t\t`## ${heading}`,\n\t\t`- kind: ${input.kind}`,\n\t\t`- tags: ${tags}`,\n\t\t`- confidence: ${input.confidence}`,\n\t\tinput.source ? `- source: ${input.source}` : undefined,\n\t\tinput.metadata\n\t\t\t? `- metadata: ${JSON.stringify(input.metadata)}`\n\t\t\t: undefined,\n\t\t\"\",\n\t\tinput.content.trim(),\n\t\t\"\",\n\t];\n\treturn lines.filter((line): line is string => line !== undefined).join(\"\\n\");\n}\n\nexport async function runRememberCommand(\n\toptions: RememberCommandOptions,\n): Promise<number> {\n\tconst content = await resolveCommandContent({\n\t\trootDir: options.fs.rootDir,\n\t\tinline: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t});\n\n\tconst findings = scanForSecrets(content);\n\tif (findings.length > 0 && !options.allowSecrets) {\n\t\tconst data = { secretFindings: findings };\n\t\tif (options.json)\n\t\t\tprintJsonEnvelope(options.output, \"remember\", { stored: false, ...data });\n\t\telse\n\t\t\toptions.output.error(\n\t\t\t\t`Refusing to store possible secret (${findings[0]?.kind}). Use --allow-secrets only after review.`,\n\t\t\t);\n\t\treturn 1;\n\t}\n\n\tconst timestamp = new Date().toISOString();\n\tconst kind = normalizeKind(options.kind);\n\tconst tags = (options.tags ?? []).map((tag) => tag.trim()).filter(Boolean);\n\tconst confidence =\n\t\ttypeof options.confidence === \"number\"\n\t\t\t? options.confidence\n\t\t\t: options.confidence\n\t\t\t\t? parseConfidence(options.confidence)\n\t\t\t\t: 1;\n\tconst metadata = parseMetadataJson(options.metadata);\n\tconst actor = parseActor(options.actor);\n\n\tconst note = formatTimestampedNote({\n\t\ttimestamp,\n\t\tkind,\n\t\tcontent,\n\t\t...(options.title ? { title: options.title } : {}),\n\t\t...(tags.length ? { tags } : {}),\n\t\tconfidence,\n\t\t...(options.source ? { source: options.source } : {}),\n\t\t...(metadata ? { metadata } : {}),\n\t});\n\n\tconst currentNotes = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.notesMemory,\n\t);\n\tconst nextNotes =\n\t\t`${(currentNotes ?? \"# Notes\\n\").trimEnd()}\\n\\n${note}`.trimStart();\n\tawait options.fs.writeText(\n\t\tTEKMEMO_PATHS.notesMemory,\n\t\t`${nextNotes.trimEnd()}\\n`,\n\t);\n\n\tconst eventId = `evt_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n\tconst event = {\n\t\tid: eventId,\n\t\ttype: \"memory.created\",\n\t\ttimestamp,\n\t\tsourcePath: TEKMEMO_PATHS.notesMemory,\n\t\tactor,\n\t\tsummary:\n\t\t\toptions.title ??\n\t\t\tcontent.split(/\\r?\\n/)[0]?.slice(0, 140) ??\n\t\t\t\"Stored memory note\",\n\t\tmetadata: {\n\t\t\tkind,\n\t\t\ttags,\n\t\t\tconfidence,\n\t\t\t...(options.source ? { source: options.source } : {}),\n\t\t\t...(metadata ? { userMetadata: metadata } : {}),\n\t\t\tcreatedBy: \"@tekmemo/cli\",\n\t\t},\n\t};\n\tawait options.fs.appendText(\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t\tstringifyJsonl([event]),\n\t);\n\n\tconst data = {\n\t\tstored: true,\n\t\teventId,\n\t\tpath: TEKMEMO_PATHS.notesMemory,\n\t\tkind,\n\t\ttags,\n\t\tconfidence,\n\t\tsecretFindings: findings,\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"remember\", data);\n\telse\n\t\toptions.output.success(\n\t\t\t`Stored ${kind} memory in ${TEKMEMO_PATHS.notesMemory}`,\n\t\t);\n\treturn 0;\n}\n","import { CliUsageError } from \"../errors/cli-errors\";\n\nexport function validateSnapshotLabel(label: string): string {\n\tif (typeof label !== \"string\" || label.trim().length === 0) {\n\t\tthrow new CliUsageError(\"Snapshot label must be a non-empty string.\");\n\t}\n\n\tconst normalized = label.trim();\n\tif (normalized.length > 80) {\n\t\tthrow new CliUsageError(\"Snapshot label must be 80 characters or fewer.\");\n\t}\n\n\tif (normalized.includes(\"\\0\")) {\n\t\tthrow new CliUsageError(\"Snapshot label must not contain null bytes.\");\n\t}\n\n\tif (!/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/.test(normalized)) {\n\t\tthrow new CliUsageError(\n\t\t\t\"Snapshot label may only contain letters, numbers, dots, underscores, and hyphens, and must start with a letter or number.\",\n\t\t);\n\t}\n\n\treturn normalized;\n}\n\nexport function createSafeIdFromLabel(\n\tlabel: string,\n\ttimestamp = new Date().toISOString(),\n): string {\n\tconst safeLabel = validateSnapshotLabel(label);\n\tconst safeTimestamp = timestamp.replace(/[:.]/g, \"-\");\n\treturn `${safeLabel}-${safeTimestamp}`.slice(0, 120);\n}\n","import { createHash } from \"node:crypto\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { printJsonEnvelope } from \"../output/output\";\nimport { REQUIRED_FILES, TEKMEMO_PATHS } from \"../protocol/constants\";\nimport { stringifyJsonl } from \"../protocol/jsonl\";\nimport { createSafeIdFromLabel, validateSnapshotLabel } from \"../utils/labels\";\n\nexport interface SnapshotCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tlabel: string;\n}\n\ninterface SnapshotBundle {\n\tid: string;\n\tlabel: string;\n\tcreatedAt: string;\n\tprotocolVersion: string;\n\tfiles: Record<string, string>;\n\tchecksum: string;\n}\n\nfunction checksum(value: unknown): string {\n\treturn createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\");\n}\n\nexport async function runSnapshotCommand(\n\toptions: SnapshotCommandOptions,\n): Promise<number> {\n\tconst label = validateSnapshotLabel(options.label);\n\tconst createdAt = new Date().toISOString();\n\tconst id = createSafeIdFromLabel(label, createdAt);\n\tconst path = `${TEKMEMO_PATHS.snapshotsDir}/${id}.json`;\n\tconst files: Record<string, string> = {};\n\n\tfor (const filePath of REQUIRED_FILES) {\n\t\tconst content = await options.fs.readTextIfExists(filePath);\n\t\tif (content !== undefined) files[filePath] = content;\n\t}\n\n\tconst bundleWithoutChecksum = {\n\t\tid,\n\t\tlabel,\n\t\tcreatedAt,\n\t\tprotocolVersion: \"1\",\n\t\tfiles,\n\t};\n\tconst bundle: SnapshotBundle = {\n\t\t...bundleWithoutChecksum,\n\t\tchecksum: checksum(bundleWithoutChecksum),\n\t};\n\n\tawait options.fs.writeText(path, `${JSON.stringify(bundle, null, 2)}\\n`);\n\n\tconst record = {\n\t\tid,\n\t\tpath,\n\t\ttype: \"manual\",\n\t\tstatus: \"available\",\n\t\tcreatedAt,\n\t\tchecksum: bundle.checksum,\n\t\tmetadata: {\n\t\t\tlabel,\n\t\t\tfileCount: Object.keys(files).length,\n\t\t\tcreatedBy: \"@tekmemo/cli\",\n\t\t},\n\t};\n\n\tawait options.fs.appendText(\n\t\tTEKMEMO_PATHS.snapshots,\n\t\tstringifyJsonl([record]),\n\t);\n\tawait options.fs.appendText(\n\t\tTEKMEMO_PATHS.memoryEvents,\n\t\tstringifyJsonl([\n\t\t\t{\n\t\t\t\tid: `evt_${id}`,\n\t\t\t\ttype: \"snapshot.created\",\n\t\t\t\ttimestamp: createdAt,\n\t\t\t\tsourcePath: path,\n\t\t\t\tactor: { type: \"system\", id: \"@tekmemo/cli\" },\n\t\t\t\tsummary: `Created snapshot ${label}`,\n\t\t\t\tmetadata: { snapshotId: id, label, checksum: bundle.checksum },\n\t\t\t},\n\t\t]),\n\t);\n\n\tconst data = {\n\t\tid,\n\t\tlabel,\n\t\tpath,\n\t\tcreatedAt,\n\t\tchecksum: bundle.checksum,\n\t\tfileCount: Object.keys(files).length,\n\t};\n\tif (options.json) printJsonEnvelope(options.output, \"snapshot\", data);\n\telse options.output.success(`Created snapshot \"${label}\" at ${path}`);\n\treturn 0;\n}\n","import type { z } from \"zod\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport {\n\tREQUIRED_DIRS,\n\tREQUIRED_FILES,\n\tTEKMEMO_PATHS,\n} from \"../protocol/constants\";\nimport { parseManifest } from \"../protocol/manifest\";\nimport {\n\tConversationEntrySchema,\n\tMemoryChunkSchema,\n\tMemoryEventSchema,\n\tSnapshotEntrySchema,\n} from \"../protocol/schemas\";\n\nexport interface ValidateCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n}\n\ninterface ValidateIssue {\n\tcode: string;\n\tmessage: string;\n}\n\nexport async function runValidateCommand(\n\toptions: ValidateCommandOptions,\n): Promise<number> {\n\tconst issues: ValidateIssue[] = [];\n\n\tfor (const dir of REQUIRED_DIRS) {\n\t\tconst exists = await options.fs.exists(dir);\n\t\tif (!exists) {\n\t\t\tissues.push({\n\t\t\t\tcode: \"missing_dir\",\n\t\t\t\tmessage: `Missing required directory: ${dir}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const file of REQUIRED_FILES) {\n\t\tconst exists = await options.fs.exists(file);\n\t\tif (!exists) {\n\t\t\tissues.push({\n\t\t\t\tcode: \"missing_file\",\n\t\t\t\tmessage: `Missing required file: ${file}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst manifestContent = await options.fs.readTextIfExists(\n\t\tTEKMEMO_PATHS.manifest,\n\t);\n\tif (manifestContent === undefined) {\n\t\tissues.push({\n\t\t\tcode: \"missing_manifest\",\n\t\t\tmessage: \"manifest.json is missing\",\n\t\t});\n\t} else {\n\t\ttry {\n\t\t\tconst manifest = parseManifest(manifestContent);\n\t\t\tfor (const key of [\"core\", \"notes\"] as const) {\n\t\t\t\tconst filePath = manifest.memory[key];\n\t\t\t\tconst exists = await options.fs.exists(filePath);\n\t\t\t\tif (!exists) {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tcode: \"manifest_ref_missing\",\n\t\t\t\t\t\tmessage: `Manifest references ${filePath} but file is missing`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tissues.push({\n\t\t\t\tcode: \"invalid_manifest\",\n\t\t\t\tmessage: `manifest.json: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst strictSchemas: Record<string, z.ZodSchema> = {\n\t\t[TEKMEMO_PATHS.memoryEvents]: MemoryEventSchema,\n\t\t[TEKMEMO_PATHS.conversations]: ConversationEntrySchema,\n\t\t[TEKMEMO_PATHS.chunks]: MemoryChunkSchema,\n\t\t[TEKMEMO_PATHS.snapshots]: SnapshotEntrySchema,\n\t};\n\n\tfor (const [file, schema] of Object.entries(strictSchemas)) {\n\t\tconst content = await options.fs.readTextIfExists(file);\n\t\tif (content === undefined) continue;\n\n\t\tconst lines = content.split(/\\r?\\n/);\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i]?.trim();\n\t\t\tif (!line) continue;\n\n\t\t\tconst lineNumber = i + 1;\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(line);\n\t\t\t} catch {\n\t\t\t\tissues.push({\n\t\t\t\t\tcode: \"invalid_json\",\n\t\t\t\t\tmessage: `${file}:${lineNumber}: Invalid JSON`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst result = schema.safeParse(parsed);\n\t\t\tif (!result.success) {\n\t\t\t\tconst firstIssue = result.error.issues[0];\n\t\t\t\tconst path = firstIssue?.path.join(\".\") ?? \"unknown\";\n\t\t\t\tconst msg = firstIssue?.message ?? \"validation failed\";\n\t\t\t\tissues.push({\n\t\t\t\t\tcode: \"schema_violation\",\n\t\t\t\t\tmessage: `${file}:${lineNumber}: ${path} — ${msg}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst ok = issues.length === 0;\n\n\tif (options.json) {\n\t\toptions.output.write(JSON.stringify({ ok, issues }, null, 2));\n\t} else if (ok) {\n\t\toptions.output.success(\"Validation passed. All protocol files are valid.\");\n\t} else {\n\t\toptions.output.error(\n\t\t\t[\n\t\t\t\t\"Validation failed:\",\n\t\t\t\t...issues.map((issue) => `- [${issue.code}] ${issue.message}`),\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\treturn ok ? 0 : 1;\n}\n","import type {\n\tResolvedCliRuntimeConfig,\n\tTekMemoReadPolicy,\n\tTekMemoWritePolicy,\n} from \"../config\";\nimport type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport {\n\ttype CliOutput,\n\tcreateBufferedOutput,\n\tprintJsonEnvelope,\n} from \"../output/output\";\nimport {\n\trunCloudContextCommand,\n\trunCloudReadCommand,\n\trunCloudRememberCommand,\n\trunCloudSnapshotCommand,\n\trunCloudValidateCommand,\n} from \"./cloud\";\nimport { runContextCommand } from \"./context\";\nimport { runReadCommand } from \"./read\";\nimport { runRememberCommand } from \"./remember\";\nimport { runSnapshotCommand } from \"./snapshot\";\nimport { runValidateCommand } from \"./validate\";\n\nexport interface RuntimeCommandBaseOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tstdinContent?: string | undefined;\n\tconfig: ResolvedCliRuntimeConfig;\n}\n\nexport interface RuntimeContextCommandOptions\n\textends RuntimeCommandBaseOptions {\n\tquery?: string | undefined;\n\tmaxChars?: number | string | undefined;\n\tincludeEvents?: boolean | undefined;\n\tincludeChunks?: boolean | undefined;\n}\n\nexport interface RuntimeRememberCommandOptions\n\textends RuntimeCommandBaseOptions {\n\tcontent?: string | undefined;\n\tstdin?: boolean | undefined;\n\tfile?: string | undefined;\n\tkind?: string | undefined;\n\ttitle?: string | undefined;\n\ttags?: string[] | undefined;\n\tconfidence?: string | number | undefined;\n\tsource?: string | undefined;\n\tactor?: string | undefined;\n\tmetadata?: string | undefined;\n\tallowSecrets?: boolean | undefined;\n}\n\nexport interface RuntimeReadCommandOptions extends RuntimeCommandBaseOptions {\n\ttarget: \"core\" | \"notes\" | \"manifest\";\n}\n\nexport interface RuntimeValidateCommandOptions\n\textends RuntimeCommandBaseOptions {}\n\nexport interface RuntimeSnapshotCommandOptions\n\textends RuntimeCommandBaseOptions {\n\tlabel?: string | undefined;\n}\n\nexport async function runRuntimeContextCommand(\n\toptions: RuntimeContextCommandOptions,\n): Promise<number> {\n\tif (options.config.runtime === \"cloud\") {\n\t\treturn runCloudContextCommand({\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\t...options.config.cloud,\n\t\t\tquery: options.query ?? \"project context\",\n\t\t\tmaxBytes: options.maxChars,\n\t\t});\n\t}\n\n\tif (options.config.runtime === \"local\") {\n\t\treturn runContextCommand({\n\t\t\tfs: options.fs,\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\tquery: options.query,\n\t\t\tmaxChars: options.maxChars,\n\t\t\tincludeEvents: options.includeEvents,\n\t\t\tincludeChunks: options.includeChunks,\n\t\t});\n\t}\n\n\treturn runHybridContextCommand(options);\n}\n\nexport async function runRuntimeRememberCommand(\n\toptions: RuntimeRememberCommandOptions,\n): Promise<number> {\n\tif (options.config.runtime === \"cloud\")\n\t\treturn runCloudRememberFromRuntime(options);\n\tif (options.config.runtime === \"local\")\n\t\treturn runLocalRememberFromRuntime(options);\n\treturn runWritePolicy(\n\t\toptions.config.hybrid.writePolicy,\n\t\t() => runLocalRememberFromRuntime(options),\n\t\t() => runCloudRememberFromRuntime(options),\n\t);\n}\n\nexport async function runRuntimeReadCommand(\n\toptions: RuntimeReadCommandOptions,\n): Promise<number> {\n\tif (options.target === \"manifest\") return runLocalReadFromRuntime(options);\n\tif (options.config.runtime === \"cloud\")\n\t\treturn runCloudReadFromRuntime(options);\n\tif (options.config.runtime === \"local\")\n\t\treturn runLocalReadFromRuntime(options);\n\treturn runReadPolicy(\n\t\toptions.config.hybrid.readPolicy,\n\t\t() => runLocalReadFromRuntime(options),\n\t\t() => runCloudReadFromRuntime(options),\n\t);\n}\n\nexport async function runRuntimeValidateCommand(\n\toptions: RuntimeValidateCommandOptions,\n): Promise<number> {\n\tif (options.config.runtime === \"cloud\")\n\t\treturn runCloudValidateCommand({\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\t...options.config.cloud,\n\t\t});\n\tif (options.config.runtime === \"local\")\n\t\treturn runValidateCommand({\n\t\t\tfs: options.fs,\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t});\n\n\tconst local = createBufferedOutput({ noColor: true });\n\tconst cloud = createBufferedOutput({ noColor: true });\n\tconst localExit = await runValidateCommand({\n\t\tfs: options.fs,\n\t\toutput: local,\n\t\tjson: options.json,\n\t});\n\tconst cloudExit = await runCloudValidateCommand({\n\t\toutput: cloud,\n\t\tjson: options.json,\n\t\t...options.config.cloud,\n\t}).catch((error: unknown) => {\n\t\tcloud.error(error instanceof Error ? error.message : String(error));\n\t\treturn 1;\n\t});\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"validate\", {\n\t\t\truntime: \"hybrid\",\n\t\t\tlocal: {\n\t\t\t\texitCode: localExit,\n\t\t\t\tstdout: local.stdout,\n\t\t\t\tstderr: local.stderr,\n\t\t\t},\n\t\t\tcloud: {\n\t\t\t\texitCode: cloudExit,\n\t\t\t\tstdout: cloud.stdout,\n\t\t\t\tstderr: cloud.stderr,\n\t\t\t},\n\t\t});\n\t\treturn localExit === 0 && cloudExit === 0 ? 0 : 1;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t\"# Local validation\",\n\t\t\t...local.stdout,\n\t\t\t\"\",\n\t\t\t\"# Cloud validation\",\n\t\t\t...cloud.stdout,\n\t\t].join(\"\\n\"),\n\t);\n\tfor (const line of [...local.stderr, ...cloud.stderr])\n\t\toptions.output.error(line);\n\treturn localExit === 0 && cloudExit === 0 ? 0 : 1;\n}\n\nexport async function runRuntimeSnapshotCommand(\n\toptions: RuntimeSnapshotCommandOptions,\n): Promise<number> {\n\tif (options.config.runtime === \"cloud\")\n\t\treturn runCloudSnapshotCommand({\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\t...options.config.cloud,\n\t\t\tlabel: options.label,\n\t\t});\n\tif (options.config.runtime === \"local\")\n\t\treturn runSnapshotCommand({\n\t\t\tfs: options.fs,\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\tlabel: options.label ?? \"manual\",\n\t\t});\n\treturn runWritePolicy(\n\t\toptions.config.hybrid.writePolicy,\n\t\t() =>\n\t\t\trunSnapshotCommand({\n\t\t\t\tfs: options.fs,\n\t\t\t\toutput: options.output,\n\t\t\t\tjson: options.json,\n\t\t\t\tlabel: options.label ?? \"manual\",\n\t\t\t}),\n\t\t() =>\n\t\t\trunCloudSnapshotCommand({\n\t\t\t\toutput: options.output,\n\t\t\t\tjson: options.json,\n\t\t\t\t...options.config.cloud,\n\t\t\t\tlabel: options.label,\n\t\t\t}),\n\t);\n}\n\nasync function runHybridContextCommand(\n\toptions: RuntimeContextCommandOptions,\n): Promise<number> {\n\tconst readPolicy = options.config.hybrid.readPolicy;\n\tif (readPolicy === \"local-only\") {\n\t\treturn runContextCommand({\n\t\t\tfs: options.fs,\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\tquery: options.query,\n\t\t\tmaxChars: options.maxChars,\n\t\t\tincludeEvents: options.includeEvents,\n\t\t\tincludeChunks: options.includeChunks,\n\t\t});\n\t}\n\tif (readPolicy === \"cloud-only\") {\n\t\treturn runCloudContextCommand({\n\t\t\toutput: options.output,\n\t\t\tjson: options.json,\n\t\t\t...options.config.cloud,\n\t\t\tquery: options.query ?? \"project context\",\n\t\t\tmaxBytes: options.maxChars,\n\t\t});\n\t}\n\n\tconst local = createBufferedOutput({ noColor: true });\n\tconst cloud = createBufferedOutput({ noColor: true });\n\tconst localExit = await runContextCommand({\n\t\tfs: options.fs,\n\t\toutput: local,\n\t\tjson: false,\n\t\tquery: options.query,\n\t\tmaxChars: options.maxChars,\n\t\tincludeEvents: options.includeEvents,\n\t\tincludeChunks: options.includeChunks,\n\t});\n\tconst cloudExit = await runCloudContextCommand({\n\t\toutput: cloud,\n\t\tjson: false,\n\t\t...options.config.cloud,\n\t\tquery: options.query ?? \"project context\",\n\t\tmaxBytes: options.maxChars,\n\t}).catch((error: unknown) => {\n\t\tcloud.error(error instanceof Error ? error.message : String(error));\n\t\treturn 1;\n\t});\n\tconst first =\n\t\treadPolicy === \"cloud-first\"\n\t\t\t? { label: \"Cloud\", out: cloud, code: cloudExit }\n\t\t\t: { label: \"Local\", out: local, code: localExit };\n\tconst second =\n\t\treadPolicy === \"cloud-first\"\n\t\t\t? { label: \"Local\", out: local, code: localExit }\n\t\t\t: { label: \"Cloud\", out: cloud, code: cloudExit };\n\tif (options.json) {\n\t\tprintJsonEnvelope(options.output, \"context\", {\n\t\t\truntime: \"hybrid\",\n\t\t\treadPolicy,\n\t\t\t[first.label.toLowerCase()]: {\n\t\t\t\texitCode: first.code,\n\t\t\t\tstdout: first.out.stdout,\n\t\t\t\tstderr: first.out.stderr,\n\t\t\t},\n\t\t\t[second.label.toLowerCase()]: {\n\t\t\t\texitCode: second.code,\n\t\t\t\tstdout: second.out.stdout,\n\t\t\t\tstderr: second.out.stderr,\n\t\t\t},\n\t\t});\n\t\treturn first.code === 0 || second.code === 0 ? 0 : 1;\n\t}\n\toptions.output.write(\n\t\t[\n\t\t\t`# TekMemo Hybrid Context`,\n\t\t\t`Read policy: ${readPolicy}`,\n\t\t\t\"\",\n\t\t\t`## ${first.label} Context`,\n\t\t\t...first.out.stdout,\n\t\t\t\"\",\n\t\t\t`## ${second.label} Context`,\n\t\t\t...second.out.stdout,\n\t\t].join(\"\\n\"),\n\t);\n\tfor (const line of [...first.out.stderr, ...second.out.stderr])\n\t\toptions.output.error(line);\n\treturn first.code === 0 || second.code === 0 ? 0 : 1;\n}\n\nasync function runLocalRememberFromRuntime(\n\toptions: RuntimeRememberCommandOptions,\n): Promise<number> {\n\treturn runRememberCommand({\n\t\tfs: options.fs,\n\t\toutput: options.output,\n\t\tjson: options.json,\n\t\tcontent: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tstdinContent: options.stdinContent,\n\t\tkind: options.kind,\n\t\ttitle: options.title,\n\t\ttags: options.tags,\n\t\tconfidence: options.confidence,\n\t\tsource: options.source,\n\t\tactor: options.actor,\n\t\tmetadata: options.metadata,\n\t\tallowSecrets: options.allowSecrets,\n\t});\n}\n\nasync function runCloudRememberFromRuntime(\n\toptions: RuntimeRememberCommandOptions,\n): Promise<number> {\n\treturn runCloudRememberCommand({\n\t\toutput: options.output,\n\t\tjson: options.json,\n\t\trootDir: options.config.root,\n\t\tstdinContent: options.stdinContent,\n\t\t...options.config.cloud,\n\t\tcontent: options.content,\n\t\tstdin: options.stdin,\n\t\tfile: options.file,\n\t\tkind: options.kind,\n\t\ttitle: options.title,\n\t\ttags: options.tags,\n\t\tconfidence: options.confidence,\n\t\tsource: options.source,\n\t\tmetadata: options.metadata,\n\t\tallowSecrets: options.allowSecrets,\n\t});\n}\n\nasync function runLocalReadFromRuntime(\n\toptions: RuntimeReadCommandOptions,\n): Promise<number> {\n\treturn runReadCommand({\n\t\tfs: options.fs,\n\t\toutput: options.output,\n\t\tjson: options.json,\n\t\ttarget: options.target,\n\t});\n}\n\nasync function runCloudReadFromRuntime(\n\toptions: RuntimeReadCommandOptions,\n): Promise<number> {\n\tif (options.target === \"manifest\") {\n\t\tthrow new Error(\n\t\t\t\"Cloud runtime cannot read local manifest. Use --runtime local or read core/notes.\",\n\t\t);\n\t}\n\treturn runCloudReadCommand({\n\t\toutput: options.output,\n\t\tjson: options.json,\n\t\t...options.config.cloud,\n\t\ttarget: options.target,\n\t});\n}\n\nasync function runReadPolicy(\n\tpolicy: TekMemoReadPolicy,\n\tlocal: () => Promise<number>,\n\tcloud: () => Promise<number>,\n): Promise<number> {\n\tif (policy === \"local-only\") return local();\n\tif (policy === \"cloud-only\") return cloud();\n\tif (policy === \"cloud-first\") {\n\t\tconst cloudCode = await cloud();\n\t\treturn cloudCode === 0 ? cloudCode : local();\n\t}\n\tconst localCode = await local();\n\treturn localCode === 0 ? localCode : cloud();\n}\n\nasync function runWritePolicy(\n\tpolicy: TekMemoWritePolicy,\n\tlocal: () => Promise<number>,\n\tcloud: () => Promise<number>,\n): Promise<number> {\n\tif (policy === \"local-only\") return local();\n\tif (policy === \"cloud-only\") return cloud();\n\tif (policy === \"cloud-first\") {\n\t\tconst cloudCode = await cloud();\n\t\tconst localCode = await local();\n\t\treturn cloudCode === 0 && localCode === 0 ? 0 : 1;\n\t}\n\tconst localCode = await local();\n\tconst cloudCode = await cloud();\n\treturn localCode === 0 && cloudCode === 0 ? 0 : 1;\n}\n","import type { TekMemoFileSystem } from \"../fs/tekmemo-fs\";\nimport type { CliOutput } from \"../output/output\";\nimport { TEKMEMO_PATHS } from \"../protocol/constants\";\n\nexport interface SearchCommandOptions {\n\tfs: TekMemoFileSystem;\n\toutput: CliOutput;\n\tjson?: boolean | undefined;\n\tquery: string;\n\tregex?: boolean | undefined;\n}\n\ninterface SearchMatch {\n\tfile: string;\n\tline: number;\n\tcontent: string;\n}\n\nexport async function runSearchCommand(\n\toptions: SearchCommandOptions,\n): Promise<number> {\n\tconst matches: SearchMatch[] = [];\n\n\tconst filesToSearch = [\n\t\tTEKMEMO_PATHS.coreMemory,\n\t\tTEKMEMO_PATHS.notesMemory,\n\t\tTEKMEMO_PATHS.conversations,\n\t];\n\n\tlet matcher: (line: string) => boolean;\n\n\tif (options.regex) {\n\t\tlet pattern: RegExp;\n\t\ttry {\n\t\t\tpattern = new RegExp(options.query, \"i\");\n\t\t} catch {\n\t\t\toptions.output.error(`Invalid regular expression: ${options.query}`);\n\t\t\treturn 1;\n\t\t}\n\t\tmatcher = (line) => pattern.test(line);\n\t} else {\n\t\tconst query = options.query.toLowerCase();\n\t\tmatcher = (line) => line.toLowerCase().includes(query);\n\t}\n\n\tfor (const file of filesToSearch) {\n\t\tconst content = await options.fs.readTextIfExists(file);\n\t\tif (!content) continue;\n\n\t\tconst lines = content.split(/\\r?\\n/);\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i];\n\t\t\tif (line !== undefined && matcher(line)) {\n\t\t\t\tmatches.push({\n\t\t\t\t\tfile,\n\t\t\t\t\tline: i + 1,\n\t\t\t\t\tcontent: line.trim(),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tif (options.json) {\n\t\toptions.output.write(\n\t\t\tJSON.stringify({ query: options.query, matches }, null, 2),\n\t\t);\n\t\treturn 0;\n\t}\n\n\tif (matches.length === 0) {\n\t\toptions.output.write(`No matches found for \"${options.query}\".`);\n\t\treturn 0;\n\t}\n\n\tfor (const match of matches) {\n\t\toptions.output.write(`${match.file}:${match.line}: ${match.content}`);\n\t}\n\toptions.output.success(`Found ${matches.length} match(es).`);\n\n\treturn 0;\n}\n","import { createRequire } from \"node:module\";\nimport { Command, CommanderError } from \"commander\";\nimport {\n\trunAgentCompleteCommand,\n\trunAgentExtractCommand,\n\trunAgentPathsCommand,\n\trunAgentStartCommand,\n\trunChunksCommand,\n\trunCloudBenchmarksRunCommand,\n\trunCloudContextCommand,\n\trunCloudContextComposeCommand,\n\trunCloudEvalsRunCommand,\n\trunCloudExportsCreateCommand,\n\trunCloudExportsDownloadCommand,\n\trunCloudExtractionJobsCommand,\n\trunCloudExtractionRunCommand,\n\trunCloudGraphCreateEdgeCommand,\n\trunCloudGraphCreateNodeCommand,\n\trunCloudGraphListEdgesCommand,\n\trunCloudGraphListNodesCommand,\n\trunCloudGraphNeighborsCommand,\n\trunCloudGraphPathCommand,\n\trunCloudHealthCommand,\n\trunCloudProvidersCreateCommand,\n\trunCloudProvidersListCommand,\n\trunCloudProvidersTestCommand,\n\trunCloudReadCommand,\n\trunCloudReadinessCommand,\n\trunCloudRecallCommand,\n\trunCloudRecallIndexCommand,\n\trunCloudRecentCommand,\n\trunCloudRememberCommand,\n\trunCloudSnapshotCommand,\n\trunCloudSnapshotsCreateCommand,\n\trunCloudSnapshotsDownloadCommand,\n\trunCloudSyncPullCommand,\n\trunCloudSyncPushCommand,\n\trunCloudSyncResolveCommand,\n\trunCloudSyncStatusCommand,\n\trunCloudUpdateCoreCommand,\n\trunCloudValidateCommand,\n\trunDiffCommand,\n\trunDoctorCommand,\n\trunEditCommand,\n\trunEventsCommand,\n\trunInitCommand,\n\trunInspectCommand,\n\trunRuntimeContextCommand,\n\trunRuntimeReadCommand,\n\trunRuntimeRememberCommand,\n\trunRuntimeSnapshotCommand,\n\trunRuntimeValidateCommand,\n\trunSearchCommand,\n} from \"./commands\";\nimport {\n\ttype ResolvedCliRuntimeConfig,\n\tresolveCliRuntimeConfig,\n\ttype TekMemoConfigFile,\n\twriteDefaultCliConfig,\n} from \"./config\";\nimport { CliError } from \"./errors/cli-errors\";\nimport { TekMemoFileSystem } from \"./fs/tekmemo-fs\";\nimport {\n\ttype CliOutput,\n\tcreateBufferedOutput,\n\tprintJsonEnvelope,\n\tprintJsonError,\n} from \"./output/output\";\nimport { parseNonNegativeInteger, parsePositiveInteger } from \"./utils/numbers\";\n\nconst require = createRequire(import.meta.url);\nconst pkg = require(\"../package.json\") as { version: string };\nconst parsePositiveOption = parsePositiveInteger as unknown as (\n\tvalue: string,\n\tprevious: string | undefined,\n) => string;\nconst parseNonNegativeOption = parseNonNegativeInteger as unknown as (\n\tvalue: string,\n\tprevious: string | undefined,\n) => string;\n\nexport interface RunTekMemoCliInput {\n\targv: string[];\n\tcwd?: string;\n\toutput?: CliOutput;\n\tverbose?: boolean;\n\tquiet?: boolean;\n\tnoColor?: boolean;\n\tstdinContent?: string;\n}\n\nexport interface RunTekMemoCliResult {\n\texitCode: number;\n\tstdout: string[];\n\tstderr: string[];\n}\n\nfunction createFs(root: string): TekMemoFileSystem {\n\treturn new TekMemoFileSystem({ rootDir: root });\n}\n\nexport async function runTekMemoCli(\n\tinput: RunTekMemoCliInput,\n): Promise<RunTekMemoCliResult> {\n\tconst output =\n\t\tinput.output ??\n\t\tcreateBufferedOutput(\n\t\t\tinput.noColor === undefined ? undefined : { noColor: input.noColor },\n\t\t);\n\tlet exitCode = 0;\n\tlet currentCommand = \"tekmemo\";\n\tlet wantsJson = input.argv.includes(\"--json\") || input.argv.includes(\"-j\");\n\n\tconst program = new Command();\n\tprogram\n\t\t.name(\"tekmemo\")\n\t\t.description(\n\t\t\t\"CLI for TekMemo .tekmemo/ memory, context, validation, snapshots, and agent tools.\",\n\t\t)\n\t\t.version(pkg.version)\n\t\t.option(\n\t\t\t\"-r, --root <path>\",\n\t\t\t\"project root containing .tekmemo/\",\n\t\t\tinput.cwd ?? process.cwd(),\n\t\t)\n\t\t.option(\"--runtime <mode>\", \"runtime mode: local, cloud, or hybrid\")\n\t\t.option(\n\t\t\t\"--cloud-url <url>\",\n\t\t\t\"TekMemo Cloud API URL; defaults to config or TEKMEMO_CLOUD_URL\",\n\t\t)\n\t\t.option(\n\t\t\t\"--api-key <key>\",\n\t\t\t\"TekMemo Cloud API key; defaults to TEKMEMO_API_KEY\",\n\t\t)\n\t\t.option(\"--workspace-id <id>\", \"default cloud workspace ID\")\n\t\t.option(\"--project-id <id>\", \"default cloud project ID\")\n\t\t.option(\n\t\t\t\"--timeout-ms <n>\",\n\t\t\t\"cloud request timeout in milliseconds\",\n\t\t\tparsePositiveOption,\n\t\t)\n\t\t.option(\n\t\t\t\"--read-policy <policy>\",\n\t\t\t\"hybrid read policy: local-first, cloud-first, local-only, cloud-only\",\n\t\t)\n\t\t.option(\n\t\t\t\"--write-policy <policy>\",\n\t\t\t\"hybrid write policy: local-first, cloud-first, local-only, cloud-only\",\n\t\t)\n\t\t.option(\"-j, --json\", \"output machine-readable JSON\", false)\n\t\t.option(\"-v, --verbose\", \"show detailed output\", input.verbose ?? false)\n\t\t.option(\n\t\t\t\"-q, --quiet\",\n\t\t\t\"suppress all output except errors\",\n\t\t\tinput.quiet ?? false,\n\t\t)\n\t\t.option(\"--no-color\", \"disable colored output\", input.noColor ?? false)\n\t\t.exitOverride()\n\t\t.showHelpAfterError()\n\t\t.configureOutput({\n\t\t\twriteOut: (str) => {\n\t\t\t\tif (!program.opts().quiet) output.write(str.trim());\n\t\t\t},\n\t\t\twriteErr: (str) => output.error(str.trim()),\n\t\t\tgetOutHelpWidth: () => 100,\n\t\t\tgetErrHelpWidth: () => 100,\n\t\t});\n\n\tasync function globals(): Promise<{\n\t\troot: string;\n\t\tjson: boolean;\n\t\tverbose: boolean;\n\t\tquiet: boolean;\n\t\tconfig: ResolvedCliRuntimeConfig;\n\t}> {\n\t\tconst opts = program.opts() as {\n\t\t\troot?: string;\n\t\t\tjson?: boolean;\n\t\t\tverbose?: boolean;\n\t\t\tquiet?: boolean;\n\t\t\truntime?: string;\n\t\t\tcloudUrl?: string;\n\t\t\tapiKey?: string;\n\t\t\tworkspaceId?: string;\n\t\t\tprojectId?: string;\n\t\t\ttimeoutMs?: number;\n\t\t\treadPolicy?: string;\n\t\t\twritePolicy?: string;\n\t\t};\n\t\twantsJson = Boolean(opts.json);\n\t\tconst config = await resolveCliRuntimeConfig({\n\t\t\tcwd: input.cwd ?? process.cwd(),\n\t\t\tflags: {\n\t\t\t\troot: opts.root,\n\t\t\t\truntime: opts.runtime,\n\t\t\t\tcloudUrl: opts.cloudUrl,\n\t\t\t\tapiKey: opts.apiKey,\n\t\t\t\tworkspaceId: opts.workspaceId,\n\t\t\t\tprojectId: opts.projectId,\n\t\t\t\ttimeoutMs: opts.timeoutMs,\n\t\t\t\treadPolicy: opts.readPolicy,\n\t\t\t\twritePolicy: opts.writePolicy,\n\t\t\t},\n\t\t});\n\t\treturn {\n\t\t\troot: config.root,\n\t\t\tjson: Boolean(opts.json),\n\t\t\tverbose: Boolean(opts.verbose),\n\t\t\tquiet: Boolean(opts.quiet),\n\t\t\tconfig,\n\t\t};\n\t}\n\n\tprogram\n\t\t.command(\"init\")\n\t\t.description(\"initialize canonical .tekmemo/ files\")\n\t\t.option(\"-f, --force\", \"overwrite existing seed files\", false)\n\t\t.option(\"-p, --project-id <id>\", \"explicit project ID\")\n\t\t.option(\"--no-input\", \"skip interactive prompts\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"init\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runInitCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tforce: options.force,\n\t\t\t\tprojectId: options.projectId,\n\t\t\t\tnoInput: options.noInput ?? !process.stdout.isTTY,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"inspect\")\n\t\t.description(\"summarize local TekMemo memory state\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"inspect\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runInspectCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"context\")\n\t\t.description(\"pack project memory into an agent-friendly context block\")\n\t\t.option(\"-q, --query <query>\", \"prioritize lines matching a task/query\")\n\t\t.option(\n\t\t\t\"--max-chars <n>\",\n\t\t\t\"maximum output characters\",\n\t\t\tparsePositiveOption,\n\t\t\t12000 as unknown as string,\n\t\t)\n\t\t.option(\"--include-events\", \"include recent memory events\", false)\n\t\t.option(\"--include-chunks\", \"include recent chunk records\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"context\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runRuntimeContextCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t\tquery: options.query,\n\t\t\t\tmaxChars: options.maxChars,\n\t\t\t\tincludeEvents: options.includeEvents,\n\t\t\t\tincludeChunks: options.includeChunks,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"remember\")\n\t\t.description(\"store a durable note for humans or coding agents\")\n\t\t.argument(\"[content]\", \"memory content\")\n\t\t.option(\"--stdin\", \"read memory content from stdin\", false)\n\t\t.option(\n\t\t\t\"--file <path>\",\n\t\t\t\"read memory content from a file inside the selected root\",\n\t\t)\n\t\t.option(\n\t\t\t\"-k, --kind <kind>\",\n\t\t\t\"decision | constraint | goal | preference | reference | summary | note\",\n\t\t\t\"note\",\n\t\t)\n\t\t.option(\"--title <title>\", \"optional note title\")\n\t\t.option(\"-t, --tag <tag>\", \"tag to attach; repeatable\", collect, [])\n\t\t.option(\"--confidence <n>\", \"confidence from 0 to 1\")\n\t\t.option(\"--source <source>\", \"source identifier, file, URL, or agent name\")\n\t\t.option(\n\t\t\t\"--actor <actor>\",\n\t\t\t\"actor type or type:id, e.g. agent:claude-code\",\n\t\t\t\"user\",\n\t\t)\n\t\t.option(\"--metadata-json <json>\", \"metadata JSON object\")\n\t\t.option(\n\t\t\t\"--allow-secrets\",\n\t\t\t\"allow content that looks like a secret after manual review\",\n\t\t\tfalse,\n\t\t)\n\t\t.action(async (content, options) => {\n\t\t\tcurrentCommand = \"remember\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runRuntimeRememberCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t\tcontent,\n\t\t\t\tstdin: options.stdin,\n\t\t\t\tfile: options.file,\n\t\t\t\tstdinContent: input.stdinContent,\n\t\t\t\tkind: options.kind,\n\t\t\t\ttitle: options.title,\n\t\t\t\ttags: options.tag,\n\t\t\t\tconfidence: options.confidence,\n\t\t\t\tsource: options.source,\n\t\t\t\tactor: options.actor,\n\t\t\t\tmetadata: options.metadataJson,\n\t\t\t\tallowSecrets: options.allowSecrets,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"read\")\n\t\t.description(\"read a canonical memory document\")\n\t\t.argument(\"<target>\", \"core | notes | manifest\")\n\t\t.action(async (target) => {\n\t\t\tcurrentCommand = \"read\";\n\t\t\tconst g = await globals();\n\t\t\tif (target !== \"core\" && target !== \"notes\" && target !== \"manifest\") {\n\t\t\t\toutput.error(\"read target must be core, notes, or manifest\");\n\t\t\t\texitCode = 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\texitCode = await runRuntimeReadCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t\ttarget,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"events\")\n\t\t.description(\"read memory event log\")\n\t\t.option(\n\t\t\t\"-l, --limit <n>\",\n\t\t\t\"limit number of events\",\n\t\t\tparseNonNegativeOption,\n\t\t\t0 as unknown as string,\n\t\t)\n\t\t.option(\"-s, --strict\", \"strict protocol validation\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"events\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runEventsCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"chunks\")\n\t\t.description(\"read local chunk index\")\n\t\t.option(\n\t\t\t\"-l, --limit <n>\",\n\t\t\t\"limit number of chunks\",\n\t\t\tparseNonNegativeOption,\n\t\t\t0 as unknown as string,\n\t\t)\n\t\t.option(\"-s, --strict\", \"strict protocol validation\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"chunks\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runChunksCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"snapshot\")\n\t\t.description(\"create local memory snapshot bundle\")\n\t\t.option(\"-l, --label <name>\", \"snapshot label\", \"manual\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"snapshot\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runRuntimeSnapshotCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t\tlabel: options.label,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"doctor\")\n\t\t.description(\"find missing or corrupt memory files\")\n\t\t.option(\"-s, --strict\", \"strict protocol validation\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"doctor\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runDoctorCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"validate\")\n\t\t.description(\"strict protocol validation for CI\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"validate\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runRuntimeValidateCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tconfig: g.config,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"search\")\n\t\t.description(\"search memory files for a query\")\n\t\t.argument(\"<query>\", \"text to search for\")\n\t\t.option(\"-e, --regex\", \"treat query as a regular expression\", false)\n\t\t.action(async (query, options) => {\n\t\t\tcurrentCommand = \"search\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runSearchCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tquery,\n\t\t\t\tregex: options.regex,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"edit\")\n\t\t.description(\"legacy alias: append a note or core memory text\")\n\t\t.argument(\"<type>\", \"note or core\")\n\t\t.argument(\"<message>\", \"content to append\")\n\t\t.option(\n\t\t\t\"--allow-secrets\",\n\t\t\t\"allow content that looks like a secret after manual review\",\n\t\t\tfalse,\n\t\t)\n\t\t.action(async (type, message, options) => {\n\t\t\tcurrentCommand = \"edit\";\n\t\t\tconst g = await globals();\n\t\t\tif (type !== \"note\" && type !== \"core\") {\n\t\t\t\toutput.error(\"Edit type must be 'note' or 'core'\");\n\t\t\t\texitCode = 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\texitCode = await runEditCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\ttype,\n\t\t\t\tmessage,\n\t\t\t\tallowSecrets: options.allowSecrets,\n\t\t\t});\n\t\t});\n\n\tprogram\n\t\t.command(\"diff\")\n\t\t.description(\"compare two memory snapshots by ID or label\")\n\t\t.argument(\"<labelA>\", \"first snapshot ID or label\")\n\t\t.argument(\"<labelB>\", \"second snapshot ID or label\")\n\t\t.action(async (labelA, labelB) => {\n\t\t\tcurrentCommand = \"diff\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runDiffCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tlabelA,\n\t\t\t\tlabelB,\n\t\t\t});\n\t\t});\n\n\tconst agent = program\n\t\t.command(\"agent\")\n\t\t.description(\"manage AgentFS-backed TekMemo coding sessions\");\n\n\tagent\n\t\t.command(\"start\")\n\t\t.description(\n\t\t\t\"start an AgentFS-style workspace for Codex, Claude Code, or another coding agent\",\n\t\t)\n\t\t.requiredOption(\"--task <task>\", \"agent task or brief\")\n\t\t.option(\"--project <id>\", \"project ID\")\n\t\t.option(\"--actor <id>\", \"actor ID, e.g. assistant:codex\")\n\t\t.option(\"--session <id>\", \"explicit safe session ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"agent.start\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runAgentStartCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\ttask: options.task,\n\t\t\t\tprojectId: options.project ?? g.config.cloud.projectId,\n\t\t\t\tactorId: options.actor,\n\t\t\t\tsessionId: options.session,\n\t\t\t});\n\t\t});\n\n\tagent\n\t\t.command(\"paths\")\n\t\t.description(\"print paths for the latest or selected agent session\")\n\t\t.option(\"--session <id>\", \"session ID or latest\", \"latest\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"agent.paths\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runAgentPathsCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tsession: options.session,\n\t\t\t});\n\t\t});\n\n\tagent\n\t\t.command(\"extract\")\n\t\t.description(\n\t\t\t\"extract summary, durable memory, and follow-ups from an agent session\",\n\t\t)\n\t\t.option(\"--session <id>\", \"session ID or latest\", \"latest\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"agent.extract\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runAgentExtractCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tsession: options.session,\n\t\t\t});\n\t\t});\n\n\tagent\n\t\t.command(\"complete\")\n\t\t.description(\n\t\t\t\"complete an agent session and optionally persist durable memory\",\n\t\t)\n\t\t.option(\"--session <id>\", \"session ID or latest\", \"latest\")\n\t\t.option(\n\t\t\t\"--extract\",\n\t\t\t\"append output/durable-memory.md to TekMemo notes\",\n\t\t\tfalse,\n\t\t)\n\t\t.option(\"--checkpoint-label <label>\", \"checkpoint label\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"agent.complete\";\n\t\t\tconst g = await globals();\n\t\t\texitCode = await runAgentCompleteCommand({\n\t\t\t\tfs: createFs(g.root),\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tsession: options.session,\n\t\t\t\textract: options.extract,\n\t\t\t\tcheckpointLabel: options.checkpointLabel,\n\t\t\t});\n\t\t});\n\n\tconst cloud = program\n\t\t.command(\"cloud\")\n\t\t.description(\"use TekMemo Cloud through @tekmemo/cloud-client\")\n\t\t.option(\n\t\t\t\"--cloud-url <url>\",\n\t\t\t\"TekMemo Cloud API URL; defaults to TEKMEMO_CLOUD_URL or TEKMEMO_API_URL\",\n\t\t)\n\t\t.option(\n\t\t\t\"--api-key <key>\",\n\t\t\t\"TekMemo Cloud API key; defaults to TEKMEMO_API_KEY\",\n\t\t)\n\t\t.option(\n\t\t\t\"--workspace-id <id>\",\n\t\t\t\"default cloud workspace ID; defaults to TEKMEMO_WORKSPACE_ID\",\n\t\t)\n\t\t.option(\n\t\t\t\"--project-id <id>\",\n\t\t\t\"default cloud project ID; defaults to TEKMEMO_PROJECT_ID\",\n\t\t)\n\t\t.option(\n\t\t\t\"--timeout-ms <n>\",\n\t\t\t\"cloud request timeout in milliseconds\",\n\t\t\tparsePositiveOption,\n\t\t);\n\n\tasync function cloudGlobals() {\n\t\tconst g = await globals();\n\t\tconst opts = cloud.opts() as {\n\t\t\tcloudUrl?: string;\n\t\t\tapiKey?: string;\n\t\t\tworkspaceId?: string;\n\t\t\tprojectId?: string;\n\t\t\ttimeoutMs?: number;\n\t\t};\n\t\treturn {\n\t\t\t...g,\n\t\t\tcloudUrl: opts.cloudUrl ?? g.config.cloud.cloudUrl,\n\t\t\tapiKey: opts.apiKey ?? g.config.cloud.apiKey,\n\t\t\tworkspaceId: opts.workspaceId ?? g.config.cloud.workspaceId,\n\t\t\tprojectId: opts.projectId ?? g.config.cloud.projectId,\n\t\t\ttimeoutMs: opts.timeoutMs ?? g.config.cloud.timeoutMs,\n\t\t};\n\t}\n\n\tcloud\n\t\t.command(\"health\")\n\t\t.description(\"check TekMemo Cloud health\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"cloud.health\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudHealthCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"context\")\n\t\t.description(\"pack cloud memory into an agent-friendly context block\")\n\t\t.requiredOption(\"-q, --query <query>\", \"task/query used to build context\")\n\t\t.option(\"-l, --limit <n>\", \"maximum recall items\", parsePositiveOption)\n\t\t.option(\"--max-bytes <n>\", \"maximum response bytes\", parsePositiveOption)\n\t\t.option(\"--include-core\", \"include core memory\", true)\n\t\t.option(\"--include-notes\", \"include notes memory\", true)\n\t\t.option(\"--include-recent\", \"include recent memory\", true)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.context\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudContextCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tquery: options.query,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tmaxBytes: options.maxBytes,\n\t\t\t\tincludeCore: options.includeCore,\n\t\t\t\tincludeNotes: options.includeNotes,\n\t\t\t\tincludeRecent: options.includeRecent,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"recall\")\n\t\t.description(\"search TekMemo Cloud memory\")\n\t\t.argument(\"<query>\", \"text to search for\")\n\t\t.option(\"-l, --limit <n>\", \"maximum recall items\", parsePositiveOption)\n\t\t.option(\"--strategy <strategy>\", \"local | vector | hybrid\")\n\t\t.option(\"--fallback <mode>\", \"none | local\")\n\t\t.option(\"--rerank\", \"request reranking\", false)\n\t\t.action(async (query, options) => {\n\t\t\tcurrentCommand = \"cloud.recall\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudRecallCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tquery,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tstrategy: options.strategy,\n\t\t\t\tfallback: options.fallback,\n\t\t\t\trerank: options.rerank,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"index\")\n\t\t.description(\"request TekMemo Cloud recall indexing for the project\")\n\t\t.option(\"--mode <mode>\", \"all | changed | core | notes\", \"changed\")\n\t\t.option(\"--force\", \"force re-indexing\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.index\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudRecallIndexCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tmode: options.mode,\n\t\t\t\tforce: options.force,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"remember\")\n\t\t.description(\"store durable memory in TekMemo Cloud\")\n\t\t.argument(\"[content]\", \"memory content\")\n\t\t.option(\"--stdin\", \"read memory content from stdin\", false)\n\t\t.option(\n\t\t\t\"--file <path>\",\n\t\t\t\"read memory content from a file inside the selected root\",\n\t\t)\n\t\t.option(\n\t\t\t\"-k, --kind <kind>\",\n\t\t\t\"decision | constraint | goal | preference | reference | summary | note\",\n\t\t\t\"note\",\n\t\t)\n\t\t.option(\"--title <title>\", \"optional note title\")\n\t\t.option(\"-t, --tag <tag>\", \"tag to attach; repeatable\", collect, [])\n\t\t.option(\"--confidence <n>\", \"confidence from 0 to 1\")\n\t\t.option(\"--source <source>\", \"source identifier, file, URL, or agent name\")\n\t\t.option(\"--metadata-json <json>\", \"metadata JSON object\")\n\t\t.option(\n\t\t\t\"--allow-secrets\",\n\t\t\t\"allow content that looks like a secret after manual review\",\n\t\t\tfalse,\n\t\t)\n\t\t.action(async (content, options) => {\n\t\t\tcurrentCommand = \"cloud.remember\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudRememberCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\trootDir: g.root,\n\t\t\t\tstdinContent: input.stdinContent,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tcontent,\n\t\t\t\tstdin: options.stdin,\n\t\t\t\tfile: options.file,\n\t\t\t\tkind: options.kind,\n\t\t\t\ttitle: options.title,\n\t\t\t\ttags: options.tag,\n\t\t\t\tconfidence: options.confidence,\n\t\t\t\tsource: options.source,\n\t\t\t\tmetadata: options.metadataJson,\n\t\t\t\tallowSecrets: options.allowSecrets,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"read\")\n\t\t.description(\"read a TekMemo Cloud memory document\")\n\t\t.argument(\"<target>\", \"core | notes\")\n\t\t.option(\n\t\t\t\"-l, --limit <n>\",\n\t\t\t\"maximum notes when target is notes\",\n\t\t\tparsePositiveOption,\n\t\t)\n\t\t.action(async (target, options) => {\n\t\t\tcurrentCommand = \"cloud.read\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\tif (target !== \"core\" && target !== \"notes\") {\n\t\t\t\toutput.error(\"cloud read target must be core or notes\");\n\t\t\t\texitCode = 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\texitCode = await runCloudReadCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\ttarget,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"update-core\")\n\t\t.description(\"replace TekMemo Cloud core memory\")\n\t\t.argument(\"[content]\", \"new core memory content\")\n\t\t.option(\"--stdin\", \"read core memory from stdin\", false)\n\t\t.option(\n\t\t\t\"--file <path>\",\n\t\t\t\"read core memory from a file inside the selected root\",\n\t\t)\n\t\t.option(\n\t\t\t\"--allow-secrets\",\n\t\t\t\"allow content that looks like a secret after manual review\",\n\t\t\tfalse,\n\t\t)\n\t\t.action(async (content, options) => {\n\t\t\tcurrentCommand = \"cloud.update-core\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudUpdateCoreCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\trootDir: g.root,\n\t\t\t\tstdinContent: input.stdinContent,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tcontent,\n\t\t\t\tstdin: options.stdin,\n\t\t\t\tfile: options.file,\n\t\t\t\tallowSecrets: options.allowSecrets,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"recent\")\n\t\t.description(\"list recent TekMemo Cloud memory events\")\n\t\t.option(\"-l, --limit <n>\", \"maximum recent items\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.recent\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudRecentCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"validate\")\n\t\t.description(\"validate TekMemo Cloud memory\")\n\t\t.option(\"-s, --strict\", \"strict protocol validation\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.validate\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudValidateCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"snapshot\")\n\t\t.description(\"explain TekMemo Cloud snapshot availability\")\n\t\t.option(\"-l, --label <name>\", \"snapshot label\", \"manual\")\n\t\t.option(\n\t\t\t\"--type <type>\",\n\t\t\t\"manual | automatic | pre-sync | pre-restore\",\n\t\t\t\"manual\",\n\t\t)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.snapshot\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSnapshotCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlabel: options.label,\n\t\t\t\ttype: options.type,\n\t\t\t});\n\t\t});\n\n\tconst sync = cloud\n\t\t.command(\"sync\")\n\t\t.description(\"use TekMemo Cloud memory sync APIs\");\n\n\tsync\n\t\t.command(\"status\")\n\t\t.description(\"read cloud sync status\")\n\t\t.option(\"--client-id <id>\", \"optional sync client ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.sync.status\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSyncStatusCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tclientId: options.clientId,\n\t\t\t});\n\t\t});\n\n\tsync\n\t\t.command(\"pull\")\n\t\t.description(\"pull cloud sync events\")\n\t\t.requiredOption(\"--client-id <id>\", \"sync client ID\")\n\t\t.option(\n\t\t\t\"--since-server-version <n>\",\n\t\t\t\"pull events after this server version\",\n\t\t\tparseNonNegativeOption,\n\t\t)\n\t\t.option(\"-l, --limit <n>\", \"maximum events to return\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.sync.pull\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSyncPullCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tclientId: options.clientId,\n\t\t\t\tsinceServerVersion: options.sinceServerVersion,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tsync\n\t\t.command(\"push\")\n\t\t.description(\"push local sync events to TekMemo Cloud\")\n\t\t.requiredOption(\"--client-id <id>\", \"sync client ID\")\n\t\t.option(\"--events-json <json>\", \"event array or object with events array\")\n\t\t.option(\"--checkpoint-json <json>\", \"optional checkpoint JSON object\")\n\t\t.option(\"--stdin\", \"read events JSON from stdin\", false)\n\t\t.option(\n\t\t\t\"--file <path>\",\n\t\t\t\"read events JSON from a file inside the selected root\",\n\t\t)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.sync.push\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSyncPushCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\trootDir: g.root,\n\t\t\t\tstdinContent: input.stdinContent,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tclientId: options.clientId,\n\t\t\t\teventsJson: options.eventsJson,\n\t\t\t\tcheckpointJson: options.checkpointJson,\n\t\t\t\tstdin: options.stdin,\n\t\t\t\tfile: options.file,\n\t\t\t});\n\t\t});\n\n\tsync\n\t\t.command(\"resolve\")\n\t\t.description(\"resolve a cloud sync conflict\")\n\t\t.argument(\"<conflictId>\", \"conflict ID\")\n\t\t.requiredOption(\n\t\t\t\"--resolution <resolution>\",\n\t\t\t\"keep_cloud | use_client | ignore\",\n\t\t)\n\t\t.option(\"--content-json <json>\", \"optional resolution content JSON object\")\n\t\t.action(async (conflictId, options) => {\n\t\t\tcurrentCommand = \"cloud.sync.resolve\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSyncResolveCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tconflictId,\n\t\t\t\tresolution: options.resolution,\n\t\t\t\tcontentJson: options.contentJson,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"readiness\")\n\t\t.description(\"check TekMemo Cloud readiness\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"cloud.readiness\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudReadinessCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"context-compose\")\n\t\t.description(\"compose full context package from cloud\")\n\t\t.requiredOption(\"-q, --query <query>\", \"task/query used to build context\")\n\t\t.option(\"-l, --limit <n>\", \"maximum recall items\", parsePositiveOption)\n\t\t.option(\"--strategy <strategy>\", \"auto | vector | local\")\n\t\t.option(\"--rerank\", \"request reranking\", false)\n\t\t.option(\"--include-core-memory\", \"include core memory\", true)\n\t\t.option(\"--include-recall-results\", \"include recall results\", true)\n\t\t.option(\"--include-graph-context\", \"include graph context\", true)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.context-compose\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudContextComposeCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tquery: options.query,\n\t\t\t\ttopK: options.limit,\n\t\t\t\tstrategy: options.strategy,\n\t\t\t\trerank: options.rerank,\n\t\t\t\tincludeCoreMemory: options.includeCoreMemory,\n\t\t\t\tincludeRecallResults: options.includeRecallResults,\n\t\t\t\tincludeGraphContext: options.includeGraphContext,\n\t\t\t});\n\t\t});\n\n\tconst graph = cloud.command(\"graph\").description(\"graph memory operations\");\n\n\tgraph\n\t\t.command(\"list-nodes\")\n\t\t.description(\"list graph nodes\")\n\t\t.option(\"-l, --limit <n>\", \"maximum nodes to return\", parsePositiveOption)\n\t\t.option(\"--cursor <string>\", \"pagination cursor\")\n\t\t.option(\"--status <status>\", \"active | deprecated | conflicted | deleted\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.list-nodes\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphListNodesCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tcursor: options.cursor,\n\t\t\t\tstatus: options.status,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"create-node\")\n\t\t.description(\"create a graph node\")\n\t\t.requiredOption(\"--node-id <id>\", \"node ID\")\n\t\t.requiredOption(\"--type <type>\", \"node type\")\n\t\t.requiredOption(\"--label <label>\", \"node label\")\n\t\t.option(\"--summary <summary>\", \"node summary\")\n\t\t.option(\"--aliases <aliases>\", \"comma-separated aliases\")\n\t\t.option(\"--metadata-json <json>\", \"metadata JSON object\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.create-node\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\tconst aliases = options.aliases\n\t\t\t\t? options.aliases.split(\",\").map((s: string) => s.trim())\n\t\t\t\t: undefined;\n\t\t\texitCode = await runCloudGraphCreateNodeCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tnodeId: options.nodeId,\n\t\t\t\ttype: options.type,\n\t\t\t\tlabel: options.label,\n\t\t\t\tsummary: options.summary,\n\t\t\t\taliases,\n\t\t\t\tmetadataJson: options.metadataJson,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"list-edges\")\n\t\t.description(\"list graph edges\")\n\t\t.option(\"-l, --limit <n>\", \"maximum edges to return\", parsePositiveOption)\n\t\t.option(\"--cursor <string>\", \"pagination cursor\")\n\t\t.option(\"--status <status>\", \"active | deprecated | conflicted | deleted\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.list-edges\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphListEdgesCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlimit: options.limit,\n\t\t\t\tcursor: options.cursor,\n\t\t\t\tstatus: options.status,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"create-edge\")\n\t\t.description(\"create a graph edge\")\n\t\t.option(\"--edge-id <id>\", \"edge ID\")\n\t\t.requiredOption(\"--from <id>\", \"from node ID\")\n\t\t.requiredOption(\"--to <id>\", \"to node ID\")\n\t\t.requiredOption(\"--type <type>\", \"edge type\")\n\t\t.option(\"--directed\", \"directed edge\", true)\n\t\t.option(\"--weight <n>\", \"edge weight (0-1)\", parsePositiveOption)\n\t\t.option(\"--metadata-json <json>\", \"metadata JSON object\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.create-edge\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphCreateEdgeCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tedgeId: options.edgeId,\n\t\t\t\tfromNodeId: options.from,\n\t\t\t\ttoNodeId: options.to,\n\t\t\t\ttype: options.type,\n\t\t\t\tdirected: options.directed,\n\t\t\t\tweight: options.weight,\n\t\t\t\tmetadataJson: options.metadataJson,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"neighbors\")\n\t\t.description(\"find graph neighbors\")\n\t\t.requiredOption(\"--node-id <id>\", \"seed node ID\")\n\t\t.option(\"--direction <dir>\", \"in | out | both\")\n\t\t.option(\"--depth <n>\", \"search depth\", parsePositiveOption)\n\t\t.option(\"-l, --limit <n>\", \"maximum results\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.neighbors\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphNeighborsCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tnodeId: options.nodeId,\n\t\t\t\tdirection: options.direction,\n\t\t\t\tdepth: options.depth,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tgraph\n\t\t.command(\"path\")\n\t\t.description(\"find graph path between nodes\")\n\t\t.requiredOption(\"--from <id>\", \"start node ID\")\n\t\t.requiredOption(\"--to <id>\", \"target node ID\")\n\t\t.option(\"--max-depth <n>\", \"maximum search depth\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.graph.path\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudGraphPathCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tfromNodeId: options.from,\n\t\t\t\ttoNodeId: options.to,\n\t\t\t\tmaxDepth: options.maxDepth,\n\t\t\t});\n\t\t});\n\n\tconst extraction = cloud\n\t\t.command(\"extraction\")\n\t\t.description(\"extraction operations\");\n\n\textraction\n\t\t.command(\"run\")\n\t\t.description(\"run graph extraction\")\n\t\t.option(\"--mode <mode>\", \"full | core | notes | sync | connectors\")\n\t\t.option(\"--force\", \"force re-extraction\", false)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.extraction.run\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudExtractionRunCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tmode: options.mode,\n\t\t\t\tforce: options.force,\n\t\t\t});\n\t\t});\n\n\textraction\n\t\t.command(\"jobs\")\n\t\t.description(\"list extraction jobs\")\n\t\t.option(\"-l, --limit <n>\", \"maximum jobs to return\", parsePositiveOption)\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.extraction.jobs\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudExtractionJobsCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlimit: options.limit,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"evals\")\n\t\t.description(\"run context quality evals\")\n\t\t.option(\"--fixture-ids <ids>\", \"comma-separated fixture IDs\")\n\t\t.option(\"--iterations <n>\", \"number of iterations\", parsePositiveOption)\n\t\t.option(\"--thresholds-json <json>\", \"thresholds JSON object\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.evals.run\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudEvalsRunCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tfixtureIds: options.fixtureIds,\n\t\t\t\titerations: options.iterations,\n\t\t\t\tthresholdsJson: options.thresholdsJson,\n\t\t\t});\n\t\t});\n\n\tcloud\n\t\t.command(\"benchmarks\")\n\t\t.description(\"run context benchmarks\")\n\t\t.option(\"--fixture-ids <ids>\", \"comma-separated fixture IDs\")\n\t\t.option(\"--iterations <n>\", \"number of iterations\", parsePositiveOption)\n\t\t.option(\"--thresholds-json <json>\", \"thresholds JSON object\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.benchmarks.run\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudBenchmarksRunCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tfixtureIds: options.fixtureIds,\n\t\t\t\titerations: options.iterations,\n\t\t\t\tthresholdsJson: options.thresholdsJson,\n\t\t\t});\n\t\t});\n\n\tconst exports = cloud.command(\"exports\").description(\"export operations\");\n\n\texports\n\t\t.command(\"create\")\n\t\t.description(\"create memory export\")\n\t\t.option(\"--label <name>\", \"export label\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.exports.create\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudExportsCreateCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlabel: options.label,\n\t\t\t});\n\t\t});\n\n\texports\n\t\t.command(\"download\")\n\t\t.description(\"download export archive\")\n\t\t.requiredOption(\"--export-id <id>\", \"export ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.exports.download\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudExportsDownloadCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\texportId: options.exportId,\n\t\t\t});\n\t\t});\n\n\tconst snapshots = cloud\n\t\t.command(\"snapshots\")\n\t\t.description(\"snapshot operations\");\n\n\tsnapshots\n\t\t.command(\"create\")\n\t\t.description(\"create memory snapshot\")\n\t\t.option(\"--label <name>\", \"snapshot label\")\n\t\t.option(\"--trigger <trigger>\", \"manual | sync | system\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.snapshots.create\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSnapshotsCreateCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tlabel: options.label,\n\t\t\t\ttrigger: options.trigger,\n\t\t\t});\n\t\t});\n\n\tsnapshots\n\t\t.command(\"download\")\n\t\t.description(\"download snapshot archive\")\n\t\t.requiredOption(\"--snapshot-id <id>\", \"snapshot ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.snapshots.download\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudSnapshotsDownloadCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tsnapshotId: options.snapshotId,\n\t\t\t});\n\t\t});\n\n\tconst providers = cloud\n\t\t.command(\"providers\")\n\t\t.description(\"provider operations\");\n\n\tproviders\n\t\t.command(\"list\")\n\t\t.description(\"list provider credentials\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"cloud.providers.list\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudProvidersListCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t});\n\t\t});\n\n\tproviders\n\t\t.command(\"create\")\n\t\t.description(\"create provider credential\")\n\t\t.requiredOption(\n\t\t\t\"--provider <provider>\",\n\t\t\t\"voyageai | openai | upstash-vector\",\n\t\t)\n\t\t.requiredOption(\"--key-name <name>\", \"key name\")\n\t\t.requiredOption(\"--secret <secret>\", \"provider secret\")\n\t\t.option(\"--rest-url <url>\", \"REST URL (required for upstash-vector)\")\n\t\t.option(\"--embedding-model <model>\", \"embedding model\")\n\t\t.option(\"--rerank-model <model>\", \"rerank model\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.providers.create\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudProvidersCreateCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tprovider: options.provider,\n\t\t\t\tkeyName: options.keyName,\n\t\t\t\tsecret: options.secret,\n\t\t\t\trestUrl: options.restUrl,\n\t\t\t\tembeddingModel: options.embeddingModel,\n\t\t\t\trerankModel: options.rerankModel,\n\t\t\t});\n\t\t});\n\n\tproviders\n\t\t.command(\"test\")\n\t\t.description(\"test provider credential\")\n\t\t.requiredOption(\"--credential-id <id>\", \"credential ID\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"cloud.providers.test\";\n\t\t\tconst g = await cloudGlobals();\n\t\t\texitCode = await runCloudProvidersTestCommand({\n\t\t\t\toutput,\n\t\t\t\tjson: g.json,\n\t\t\t\tcloudUrl: g.cloudUrl,\n\t\t\t\tapiKey: g.apiKey,\n\t\t\t\tworkspaceId: g.workspaceId,\n\t\t\t\tprojectId: g.projectId,\n\t\t\t\ttimeoutMs: g.timeoutMs,\n\t\t\t\tcredentialId: options.credentialId,\n\t\t\t});\n\t\t});\n\n\tconst config = program\n\t\t.command(\"config\")\n\t\t.description(\"inspect or create .tekmemo/config.json\");\n\n\tconfig\n\t\t.command(\"get\")\n\t\t.description(\"print resolved CLI configuration\")\n\t\t.action(async () => {\n\t\t\tcurrentCommand = \"config.get\";\n\t\t\tconst g = await globals();\n\t\t\tconst safeConfig = {\n\t\t\t\t...g.config,\n\t\t\t\tcloud: {\n\t\t\t\t\t...g.config.cloud,\n\t\t\t\t\tapiKey: g.config.cloud.apiKey ? \"<redacted>\" : undefined,\n\t\t\t\t},\n\t\t\t};\n\t\t\tif (g.json) printJsonEnvelope(output, \"config.get\", safeConfig);\n\t\t\telse output.write(JSON.stringify(safeConfig, null, 2));\n\t\t});\n\n\tconfig\n\t\t.command(\"init\")\n\t\t.description(\"create .tekmemo/config.json without storing secrets\")\n\t\t.option(\"-f, --force\", \"overwrite existing config\", false)\n\t\t.option(\n\t\t\t\"--runtime <mode>\",\n\t\t\t\"runtime mode: local, cloud, or hybrid\",\n\t\t\t\"local\",\n\t\t)\n\t\t.option(\"--cloud-url <url>\", \"TekMemo Cloud API URL\")\n\t\t.option(\"--workspace-id <id>\", \"cloud workspace ID\")\n\t\t.option(\"--project-id <id>\", \"cloud project ID\")\n\t\t.option(\"--read-policy <policy>\", \"hybrid read policy\", \"local-first\")\n\t\t.option(\"--write-policy <policy>\", \"hybrid write policy\", \"local-first\")\n\t\t.action(async (options) => {\n\t\t\tcurrentCommand = \"config.init\";\n\t\t\tconst g = await globals();\n\t\t\tconst result = await writeDefaultCliConfig({\n\t\t\t\tcwd: input.cwd ?? process.cwd(),\n\t\t\t\troot: g.root,\n\t\t\t\tforce: options.force,\n\t\t\t\tconfig: {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\truntime: options.runtime,\n\t\t\t\t\troot: \".\",\n\t\t\t\t\tcloud: {\n\t\t\t\t\t\t...(options.cloudUrl ? { baseUrl: options.cloudUrl } : {}),\n\t\t\t\t\t\t...(options.workspaceId\n\t\t\t\t\t\t\t? { workspaceId: options.workspaceId }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(options.projectId ? { projectId: options.projectId } : {}),\n\t\t\t\t\t},\n\t\t\t\t\thybrid: {\n\t\t\t\t\t\treadPolicy: options.readPolicy,\n\t\t\t\t\t\twritePolicy: options.writePolicy,\n\t\t\t\t\t},\n\t\t\t\t} satisfies TekMemoConfigFile,\n\t\t\t});\n\t\t\tif (g.json) printJsonEnvelope(output, \"config.init\", result);\n\t\t\telse if (result.created) output.success(`Created ${result.path}`);\n\t\t\telse if (result.overwritten) output.success(`Overwrote ${result.path}`);\n\t\t\telse\n\t\t\t\toutput.warn(`${result.path} already exists. Use --force to overwrite.`);\n\t\t});\n\n\ttry {\n\t\tconst args = normalizeArgv(input.argv);\n\t\tawait program.parseAsync(args);\n\t\treturn { exitCode, stdout: output.stdout, stderr: output.stderr };\n\t} catch (error) {\n\t\tif (error instanceof CliError) {\n\t\t\texitCode = error.exitCode;\n\t\t\tif (wantsJson)\n\t\t\t\tprintJsonError(output, currentCommand, error.code, error.message);\n\t\t\telse output.error(error.message);\n\t\t} else if (isCommanderError(error)) {\n\t\t\texitCode = typeof error.exitCode === \"number\" ? error.exitCode : 1;\n\t\t} else {\n\t\t\texitCode = 1;\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (wantsJson)\n\t\t\t\tprintJsonError(output, currentCommand, \"CLI_UNEXPECTED_ERROR\", message);\n\t\t\telse output.error(message);\n\t\t}\n\t\treturn { exitCode, stdout: output.stdout, stderr: output.stderr };\n\t}\n}\n\nfunction collect(value: string, previous: string[]): string[] {\n\tprevious.push(value);\n\treturn previous;\n}\n\nfunction normalizeArgv(argv: string[]): string[] {\n\tif (\n\t\targv.length > 0 &&\n\t\t!argv[0]?.endsWith(\"node\") &&\n\t\t!argv[0]?.includes(\"/\") &&\n\t\targv[0] !== \"tekmemo\"\n\t) {\n\t\treturn [\"node\", \"tekmemo\", ...argv];\n\t}\n\tif (argv[0] === \"tekmemo\") return [\"node\", ...argv];\n\treturn [...argv];\n}\n\nfunction isCommanderError(error: unknown): error is CommanderError {\n\treturn error instanceof CommanderError;\n}\n"],"mappings":"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"}
|