starcite 0.0.8 → 0.0.9

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/dist/index.js CHANGED
@@ -643,7 +643,6 @@ async function emitTailEvents({
643
643
  }
644
644
 
645
645
  // src/cli.ts
646
- var HELP_CODE = "commander.helpDisplayed";
647
646
  var HELP_TEXT = `Usage: starcite [options] <command>
648
647
 
649
648
  Commands:
@@ -659,7 +658,22 @@ Options:
659
658
  --config-dir <path>
660
659
  --json
661
660
  -h, --help
661
+ -v, --version
662
662
  `;
663
+ var COMMANDS = {
664
+ config: runConfigCommand,
665
+ create: runCreateCommand,
666
+ append: runAppendCommand,
667
+ tail: runTailCommand,
668
+ sessions: runSessionsCommand
669
+ };
670
+ var EarlyExit = class extends Error {
671
+ code;
672
+ constructor(code, message) {
673
+ super(message);
674
+ this.code = code;
675
+ }
676
+ };
663
677
  function normalizeArgv(argv, context) {
664
678
  const args = context?.from === "user" ? [...argv] : argv.slice(2);
665
679
  if (args[0] === "node" && typeof args[1] === "string" && args[1].includes("starcite")) {
@@ -677,13 +691,16 @@ function parseGlobalArgs(args) {
677
691
  "--config-dir": String,
678
692
  "--json": Boolean,
679
693
  "--help": Boolean,
680
- "-h": "--help"
694
+ "-h": "--help",
695
+ "--version": Boolean,
696
+ "-v": "--version"
681
697
  },
682
698
  args,
683
699
  true
684
700
  );
685
701
  return {
686
702
  help: parsed["--help"] === true,
703
+ version: parsed["--version"] === true,
687
704
  options: {
688
705
  baseUrl: parsed["--base-url"],
689
706
  configDir: parsed["--config-dir"],
@@ -693,13 +710,9 @@ function parseGlobalArgs(args) {
693
710
  rest: parsed._.map((value) => `${value}`)
694
711
  };
695
712
  }
696
- function helpOutputText() {
697
- return `${HELP_TEXT}
698
- `;
699
- }
700
713
  function buildProgram(deps = {}) {
701
714
  const runtime = new CliRuntime(deps);
702
- let shouldThrowOnHelp = false;
715
+ let throwOnEarlyExit = false;
703
716
  let output = {
704
717
  writeOut(text) {
705
718
  process.stdout.write(text);
@@ -710,7 +723,7 @@ function buildProgram(deps = {}) {
710
723
  };
711
724
  return {
712
725
  exitOverride() {
713
- shouldThrowOnHelp = true;
726
+ throwOnEarlyExit = true;
714
727
  },
715
728
  configureOutput(next) {
716
729
  output = {
@@ -721,37 +734,27 @@ function buildProgram(deps = {}) {
721
734
  async parseAsync(argv, context) {
722
735
  const parsed = parseGlobalArgs(normalizeArgv(argv, context));
723
736
  const command = parsed.rest[0];
724
- if (parsed.help || !command) {
725
- output.writeOut(helpOutputText());
726
- if (shouldThrowOnHelp) {
727
- const error = new Error("Help displayed");
728
- error.code = HELP_CODE;
729
- throw error;
737
+ if (parsed.version) {
738
+ output.writeOut(`${"0.0.9"}
739
+ `);
740
+ if (throwOnEarlyExit) {
741
+ throw new EarlyExit("cli.versionDisplayed", "Version displayed");
730
742
  }
731
743
  return;
732
744
  }
733
- const commandArgs = parsed.rest.slice(1);
734
- if (command === "config") {
735
- await runConfigCommand(commandArgs, parsed.options, runtime);
736
- return;
737
- }
738
- if (command === "create") {
739
- await runCreateCommand(commandArgs, parsed.options, runtime);
740
- return;
741
- }
742
- if (command === "append") {
743
- await runAppendCommand(commandArgs, parsed.options, runtime);
744
- return;
745
- }
746
- if (command === "tail") {
747
- await runTailCommand(commandArgs, parsed.options, runtime);
745
+ if (parsed.help || !command) {
746
+ output.writeOut(`${HELP_TEXT}
747
+ `);
748
+ if (throwOnEarlyExit) {
749
+ throw new EarlyExit("cli.helpDisplayed", "Help displayed");
750
+ }
748
751
  return;
749
752
  }
750
- if (command === "sessions") {
751
- await runSessionsCommand(commandArgs, parsed.options, runtime);
752
- return;
753
+ const handler = COMMANDS[command];
754
+ if (!handler) {
755
+ throw new CliUsageError(`Unknown command: ${command}`);
753
756
  }
754
- throw new CliUsageError(`Unknown command: ${command}`);
757
+ await handler(parsed.rest.slice(1), parsed.options, runtime);
755
758
  }
756
759
  };
757
760
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../src/runtime.ts","../src/config.ts","../src/store.ts","../src/commands/append.ts","../src/commands/config.ts","../src/commands/create.ts","../src/commands/sessions.ts","../src/commands/tail.ts","../src/index.ts"],"sourcesContent":["import { StarciteApiError } from \"@starcite/sdk\";\nimport { runAppendCommand } from \"./commands/append\";\nimport { runConfigCommand } from \"./commands/config\";\nimport { runCreateCommand } from \"./commands/create\";\nimport { runSessionsCommand } from \"./commands/sessions\";\nimport { runTailCommand } from \"./commands/tail\";\nimport {\n type CliDependencies,\n CliRuntime,\n CliUsageError,\n parseArgs,\n} from \"./runtime\";\n\nconst HELP_CODE = \"commander.helpDisplayed\";\n\nconst HELP_TEXT = `Usage: starcite [options] <command>\n\nCommands:\n config\n create\n append\n tail\n sessions\n\nOptions:\n -u, --base-url <url> Starcite API base URL\n -k, --token <token> Starcite API key\n --config-dir <path>\n --json\n -h, --help\n`;\n\ninterface ParseContext {\n from?: \"user\";\n}\n\ninterface OutputHandlers {\n writeOut(text: string): void;\n writeErr(text: string): void;\n}\n\nexport interface CliProgram {\n parseAsync(argv: string[], context?: ParseContext): Promise<void>;\n exitOverride(): void;\n configureOutput(output: Partial<OutputHandlers>): void;\n}\n\nfunction normalizeArgv(argv: string[], context?: ParseContext): string[] {\n const args = context?.from === \"user\" ? [...argv] : argv.slice(2);\n\n if (\n args[0] === \"node\" &&\n typeof args[1] === \"string\" &&\n args[1].includes(\"starcite\")\n ) {\n return args.slice(2);\n }\n\n return args;\n}\n\nfunction parseGlobalArgs(args: string[]) {\n const parsed = parseArgs(\n {\n \"--base-url\": String,\n \"-u\": \"--base-url\",\n \"--token\": String,\n \"-k\": \"--token\",\n \"--config-dir\": String,\n \"--json\": Boolean,\n \"--help\": Boolean,\n \"-h\": \"--help\",\n },\n args,\n true\n );\n\n return {\n help: parsed[\"--help\"] === true,\n options: {\n baseUrl: parsed[\"--base-url\"],\n configDir: parsed[\"--config-dir\"],\n token: parsed[\"--token\"],\n json: parsed[\"--json\"] === true,\n },\n rest: parsed._.map((value: unknown) => `${value}`),\n };\n}\n\nfunction helpOutputText(): string {\n return `${HELP_TEXT}\\n`;\n}\n\nexport function buildProgram(deps: CliDependencies = {}): CliProgram {\n const runtime = new CliRuntime(deps);\n let shouldThrowOnHelp = false;\n let output: OutputHandlers = {\n writeOut(text: string) {\n process.stdout.write(text);\n },\n writeErr(text: string) {\n process.stderr.write(text);\n },\n };\n\n return {\n exitOverride() {\n shouldThrowOnHelp = true;\n },\n\n configureOutput(next) {\n output = {\n writeOut: next.writeOut ?? output.writeOut,\n writeErr: next.writeErr ?? output.writeErr,\n };\n },\n\n async parseAsync(argv, context) {\n const parsed = parseGlobalArgs(normalizeArgv(argv, context));\n const command = parsed.rest[0];\n\n if (parsed.help || !command) {\n output.writeOut(helpOutputText());\n\n if (shouldThrowOnHelp) {\n const error = new Error(\"Help displayed\") as Error & { code: string };\n error.code = HELP_CODE;\n throw error;\n }\n\n return;\n }\n\n const commandArgs = parsed.rest.slice(1);\n\n if (command === \"config\") {\n await runConfigCommand(commandArgs, parsed.options, runtime);\n return;\n }\n\n if (command === \"create\") {\n await runCreateCommand(commandArgs, parsed.options, runtime);\n return;\n }\n\n if (command === \"append\") {\n await runAppendCommand(commandArgs, parsed.options, runtime);\n return;\n }\n\n if (command === \"tail\") {\n await runTailCommand(commandArgs, parsed.options, runtime);\n return;\n }\n\n if (command === \"sessions\") {\n await runSessionsCommand(commandArgs, parsed.options, runtime);\n return;\n }\n\n throw new CliUsageError(`Unknown command: ${command}`);\n },\n };\n}\n\nexport async function run(\n argv = process.argv,\n deps: CliDependencies = {}\n): Promise<void> {\n const runtime = new CliRuntime(deps);\n const program = buildProgram(deps);\n\n try {\n await program.parseAsync(argv);\n } catch (error) {\n if (error instanceof StarciteApiError) {\n runtime.logger.error(`${error.code} (${error.status}): ${error.message}`);\n process.exitCode = 1;\n return;\n }\n\n if (error instanceof Error) {\n runtime.logger.error(error.message);\n process.exitCode = 1;\n return;\n }\n\n runtime.logger.error(\"Unknown error\");\n process.exitCode = 1;\n }\n}\n","import { Starcite, type TailEvent } from \"@starcite/sdk\";\nimport arg from \"arg\";\nimport {\n resolveConfigDir,\n type StarciteCliConfig,\n StarciteCliConfigStore,\n} from \"./config\";\nimport { StarciteCliStore } from \"./store\";\n\nconst DEFAULT_API_PORT = 45_187;\nconst DEFAULT_TAIL_BATCH_SIZE = 256;\nconst TRAILING_SLASHES_REGEX = /\\/+$/;\n\nexport { DEFAULT_TAIL_BATCH_SIZE };\n\nexport class CliUsageError extends Error {}\n\nexport interface LoggerLike {\n info(message: string): void;\n error(message: string): void;\n}\n\nexport interface StdoutLike {\n write(message: string): void;\n}\n\nexport interface GlobalOptions {\n baseUrl?: string;\n configDir?: string;\n token?: string;\n json: boolean;\n}\n\nexport interface CliDependencies {\n createClient?: (\n baseUrl: string,\n apiKey: string | undefined,\n store: StarciteCliStore\n ) => Starcite;\n logger?: LoggerLike;\n stdout?: StdoutLike;\n}\n\nexport interface ResolvedGlobalOptions {\n baseUrl: string;\n json: boolean;\n config: StarciteCliConfigStore;\n store: StarciteCliStore;\n client: Starcite;\n}\n\nexport type CliJsonObject = Record<string, unknown>;\nexport type ParsedArgs = ReturnType<typeof arg>;\n\nconst defaultLogger: LoggerLike = {\n info(message: string) {\n console.log(message);\n },\n error(message: string) {\n console.error(message);\n },\n};\n\nconst defaultStdout: StdoutLike = {\n write(message: string) {\n process.stdout.write(message);\n },\n};\n\nexport function trimString(value?: string): string | undefined {\n const trimmed = value?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function parseArgs(\n spec: Parameters<typeof arg>[0],\n argv: string[],\n stopAtPositional = false\n): ParsedArgs {\n try {\n return arg(spec, {\n argv,\n permissive: false,\n stopAtPositional,\n });\n } catch (error) {\n if (error instanceof Error) {\n throw new CliUsageError(error.message);\n }\n\n throw error;\n }\n}\n\nexport function resolveConfiguredBaseUrl(\n config: StarciteCliConfig,\n options: GlobalOptions\n): string {\n return (\n trimString(options.baseUrl) ??\n trimString(process.env.STARCITE_BASE_URL) ??\n trimString(config.baseUrl) ??\n `http://localhost:${DEFAULT_API_PORT}`\n );\n}\n\nexport function parseNonNegativeInteger(\n value: string,\n optionName: string\n): number {\n const parsed = Number(value);\n\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new CliUsageError(`${optionName} must be a non-negative integer`);\n }\n\n return parsed;\n}\n\nexport function parsePositiveInteger(\n value: string,\n optionName: string\n): number {\n const parsed = Number(value);\n\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliUsageError(`${optionName} must be a positive integer`);\n }\n\n return parsed;\n}\n\nexport function parseEndpoint(value: string, optionName: string): string {\n const endpoint = trimString(value);\n if (!endpoint) {\n throw new CliUsageError(`${optionName} cannot be empty`);\n }\n\n let parsed: URL;\n try {\n parsed = new URL(endpoint);\n } catch {\n throw new CliUsageError(`${optionName} must be a valid URL`);\n }\n\n if (!(parsed.protocol === \"http:\" || parsed.protocol === \"https:\")) {\n throw new CliUsageError(`${optionName} must use http:// or https://`);\n }\n\n return endpoint.replace(TRAILING_SLASHES_REGEX, \"\");\n}\n\nexport function parseConfigSetKey(value: string): \"endpoint\" | \"api-key\" {\n const normalized = value.trim().toLowerCase();\n\n if (normalized === \"endpoint\" || normalized === \"base-url\") {\n return \"endpoint\";\n }\n\n if (normalized === \"api-key\") {\n return \"api-key\";\n }\n\n throw new CliUsageError(\"config key must be one of: endpoint, api-key\");\n}\n\nexport function parseJsonObject(\n value: string,\n optionName: string\n): CliJsonObject {\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(value);\n } catch {\n throw new CliUsageError(`${optionName} must be valid JSON`);\n }\n\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new CliUsageError(`${optionName} must be a JSON object`);\n }\n\n return parsed as CliJsonObject;\n}\n\nexport function parseSessionMetadataFilters(\n value: string\n): Record<string, string> {\n const filters: Record<string, string> = {};\n\n for (const [key, rawValue] of Object.entries(\n parseJsonObject(value, \"--metadata\")\n )) {\n if (key.trim().length === 0) {\n throw new CliUsageError(\"--metadata keys must be non-empty\");\n }\n\n if (typeof rawValue !== \"string\") {\n throw new CliUsageError(\"--metadata values must be strings\");\n }\n\n filters[key] = rawValue;\n }\n\n return filters;\n}\n\nexport class CliRuntime {\n readonly logger: LoggerLike;\n readonly stdout: StdoutLike;\n private readonly createClient: CliDependencies[\"createClient\"];\n\n constructor(deps: CliDependencies = {}) {\n this.logger = deps.logger ?? defaultLogger;\n this.stdout = deps.stdout ?? defaultStdout;\n this.createClient = deps.createClient;\n }\n\n async resolveGlobalOptions(\n options: GlobalOptions\n ): Promise<ResolvedGlobalOptions> {\n const config = new StarciteCliConfigStore(\n resolveConfigDir(options.configDir)\n );\n const store = new StarciteCliStore(config.directory);\n const baseUrl = resolveConfiguredBaseUrl(\n await config.readConfig(),\n options\n );\n const apiKey = trimString(options.token) ?? (await config.readApiKey());\n const client =\n this.createClient?.(baseUrl, apiKey, store) ??\n new Starcite({\n baseUrl,\n apiKey,\n store: store.sessionStore(baseUrl),\n });\n\n return {\n baseUrl,\n json: options.json,\n config,\n store,\n client,\n };\n }\n\n writeJsonOutput(value: unknown, pretty = false): void {\n const serialized = JSON.stringify(value, null, pretty ? 2 : undefined);\n if (serialized === undefined) {\n throw new Error(\"Failed to serialize JSON output\");\n }\n\n this.stdout.write(`${serialized}\\n`);\n }\n\n formatTailEvent(event: TailEvent): string {\n const actor = event.actor.startsWith(\"agent:\")\n ? event.actor.slice(\"agent:\".length)\n : event.actor;\n const text = event.payload?.text;\n\n return typeof text === \"string\"\n ? `[${actor}] ${text}`\n : `[${actor}] ${JSON.stringify(event.payload)}`;\n }\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport Conf from \"conf\";\nimport { parse as parseToml } from \"toml\";\nimport { z } from \"zod\";\n\nconst DEFAULT_CONFIG_DIRECTORY_NAME = \".starcite\";\nconst CONFIG_JSON_FILENAME = \"config.json\";\nconst CONFIG_TOML_FILENAME = \"config.toml\";\nconst CREDENTIALS_FILENAME = \"credentials\";\nconst TILDE_PREFIX_REGEX = /^~(?=\\/|$)/;\n\nconst ConfigFileSchema = z\n .object({\n baseUrl: z.string().optional(),\n base_url: z.string().optional(),\n apiKey: z.string().optional(),\n api_key: z.string().optional(),\n })\n .passthrough();\n\nconst CredentialsFileSchema = z.object({\n apiKey: z.string().trim().min(1).optional(),\n});\n\ntype CredentialsFile = z.infer<typeof CredentialsFileSchema>;\n\nexport interface StarciteCliConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n\nfunction trimString(value?: string): string | undefined {\n const trimmed = value?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeConfig(input: unknown): StarciteCliConfig {\n const parsed = ConfigFileSchema.safeParse(input);\n\n if (!parsed.success) {\n return {};\n }\n\n return {\n baseUrl: trimString(parsed.data.baseUrl ?? parsed.data.base_url),\n apiKey: trimString(parsed.data.apiKey ?? parsed.data.api_key),\n };\n}\n\nfunction defaultConfigDirectory(): string {\n const home = homedir();\n return home.trim().length > 0\n ? join(home, DEFAULT_CONFIG_DIRECTORY_NAME)\n : resolve(DEFAULT_CONFIG_DIRECTORY_NAME);\n}\n\nexport function resolveConfigDir(input?: string): string {\n const configured = trimString(input) ?? trimString(process.env.STARCITE_HOME);\n const withTilde = configured?.startsWith(\"~\")\n ? configured.replace(TILDE_PREFIX_REGEX, homedir())\n : configured;\n\n return resolve(withTilde ?? defaultConfigDirectory());\n}\n\nexport class StarciteCliConfigStore {\n readonly directory: string;\n private readonly credentialsStore: Conf<CredentialsFile>;\n\n constructor(directory: string) {\n this.directory = directory;\n this.credentialsStore = new Conf<CredentialsFile>({\n cwd: directory,\n clearInvalidConfig: true,\n configName: CREDENTIALS_FILENAME,\n fileExtension: \"json\",\n });\n }\n\n async readConfig(): Promise<StarciteCliConfig> {\n await this.ensureDirectory();\n\n for (const filename of [CONFIG_JSON_FILENAME, CONFIG_TOML_FILENAME]) {\n const parsed = await this.readConfigFile(filename);\n if (parsed !== undefined) {\n return normalizeConfig(parsed);\n }\n }\n\n return {};\n }\n\n async writeConfig(config: StarciteCliConfig): Promise<void> {\n await this.ensureDirectory();\n\n const normalized = normalizeConfig(config);\n await writeFile(\n join(this.directory, CONFIG_JSON_FILENAME),\n `${JSON.stringify(normalized, null, 2)}\\n`,\n \"utf8\"\n );\n }\n\n async updateConfig(\n patch: Partial<StarciteCliConfig>\n ): Promise<StarciteCliConfig> {\n const config = normalizeConfig({\n ...(await this.readConfig()),\n ...patch,\n });\n\n await this.writeConfig(config);\n return config;\n }\n\n async readApiKey(): Promise<string | undefined> {\n const fromEnv = trimString(process.env.STARCITE_API_KEY);\n if (fromEnv) {\n return fromEnv;\n }\n\n const fromCredentials = trimString(this.readCredentials().apiKey);\n if (fromCredentials) {\n return fromCredentials;\n }\n\n return trimString((await this.readConfig()).apiKey);\n }\n\n async saveApiKey(apiKey: string): Promise<void> {\n await this.ensureDirectory();\n\n const normalized = trimString(apiKey);\n if (!normalized) {\n throw new Error(\"API key cannot be empty\");\n }\n\n this.credentialsStore.set(\"apiKey\", normalized);\n }\n\n private async readConfigFile(filename: string): Promise<unknown | undefined> {\n const path = join(this.directory, filename);\n\n try {\n const content = await readFile(path, \"utf8\");\n return filename.endsWith(\".toml\")\n ? parseToml(content)\n : JSON.parse(content);\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return undefined;\n }\n\n throw error;\n }\n }\n\n private readCredentials(): CredentialsFile {\n const parsed = CredentialsFileSchema.safeParse(this.credentialsStore.store);\n\n if (parsed.success) {\n return parsed.data;\n }\n\n this.credentialsStore.clear();\n return {};\n }\n\n private async ensureDirectory(): Promise<void> {\n await mkdir(this.directory, { recursive: true });\n }\n}\n","import {\n type SessionStore,\n type SessionStoreState,\n type TailEvent,\n WebStorageSessionStore,\n} from \"@starcite/sdk\";\nimport Conf from \"conf\";\n\nconst STATE_FILENAME = \"state\";\nconst TRAILING_SLASHES_REGEX = /\\/+$/;\nconst STORE_VERSION_KEY = \"__starciteCliStoreVersion\";\nconst CURRENT_STORE_VERSION = \"2\";\n\nexport function buildSessionStoreContextKey(\n baseUrl: string,\n sessionId: string\n): string {\n return `${baseUrl}::${sessionId}`;\n}\n\nfunction normalizeStoreBaseUrl(baseUrl: string): string {\n if (baseUrl.length === 0) {\n return \"\";\n }\n\n const normalized = baseUrl.replace(TRAILING_SLASHES_REGEX, \"\");\n return normalized.endsWith(\"/v1\") ? normalized : `${normalized}/v1`;\n}\n\nexport class StarciteCliStore implements SessionStore<TailEvent> {\n private readonly storage: Conf<Record<string, string>>;\n\n constructor(directory: string) {\n this.storage = new Conf<Record<string, string>>({\n cwd: directory,\n clearInvalidConfig: true,\n configName: STATE_FILENAME,\n fileExtension: \"json\",\n defaults: {},\n });\n\n this.resetOnStoreVersionMismatch();\n }\n\n sessionStore(baseUrl: string): SessionStore<TailEvent> {\n return new WebStorageSessionStore<TailEvent>(this.storageAdapter(), {\n keyForSession: (sessionId) =>\n buildSessionStoreContextKey(normalizeStoreBaseUrl(baseUrl), sessionId),\n });\n }\n\n load(sessionId: string): SessionStoreState<TailEvent> | undefined {\n return this.sessionStore(\"\").load(sessionId);\n }\n\n save(sessionId: string, state: SessionStoreState<TailEvent>): void {\n this.sessionStore(\"\").save(sessionId, state);\n }\n\n clear(sessionId: string): void {\n this.sessionStore(\"\").clear?.(sessionId);\n }\n\n clearSession(baseUrl: string, sessionId: string): void {\n this.sessionStore(baseUrl).clear?.(sessionId);\n }\n\n private storageAdapter() {\n return {\n getItem: (key: string): string | null => this.storage.get(key) ?? null,\n setItem: (key: string, value: string): void => {\n this.storage.set(key, value);\n },\n removeItem: (key: string): void => {\n this.storage.delete(key);\n },\n };\n }\n\n private resetOnStoreVersionMismatch(): void {\n const storedVersion = this.storage.get(STORE_VERSION_KEY);\n if (storedVersion === CURRENT_STORE_VERSION) {\n return;\n }\n\n this.storage.clear();\n this.storage.set(STORE_VERSION_KEY, CURRENT_STORE_VERSION);\n }\n}\n","import type { StarciteIdentity } from \"@starcite/sdk\";\nimport {\n type CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseArgs,\n parseJsonObject,\n parseNonNegativeInteger,\n trimString,\n} from \"../runtime\";\n\nconst DEFAULT_CREATE_AGENT_ID = \"starcite-cli\";\n\ninterface AppendIdentitySelection {\n type: \"agent\" | \"user\";\n id: string;\n}\n\nfunction resolveAppendIdentity(\n selection: AppendIdentitySelection | undefined,\n client: {\n agent(input: { id: string }): StarciteIdentity;\n user(input: { id: string }): StarciteIdentity;\n }\n): StarciteIdentity {\n if (!selection) {\n return client.agent({ id: DEFAULT_CREATE_AGENT_ID });\n }\n\n return selection.type === \"agent\"\n ? client.agent({ id: selection.id })\n : client.user({ id: selection.id });\n}\n\nexport async function runAppendCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const parsed = parseArgs(\n {\n \"--agent\": String,\n \"--user\": String,\n \"--text\": String,\n \"--type\": String,\n \"--source\": String,\n \"--payload\": String,\n \"--metadata\": String,\n \"--refs\": String,\n \"--idempotency-key\": String,\n \"--expected-seq\": String,\n },\n args\n );\n const sessionId = `${parsed._[0] ?? \"\"}`;\n\n if (!sessionId) {\n throw new CliUsageError(\"append requires <sessionId>\");\n }\n\n const agent = trimString(parsed[\"--agent\"]);\n const user = trimString(parsed[\"--user\"]);\n const text = trimString(parsed[\"--text\"]);\n const payload = parsed[\"--payload\"]\n ? parseJsonObject(parsed[\"--payload\"], \"--payload\")\n : undefined;\n\n if (agent && user) {\n throw new CliUsageError(\"Choose either --agent or --user, not both\");\n }\n\n if (text && payload) {\n throw new CliUsageError(\"Choose either --text or --payload, not both\");\n }\n\n if (!(text || payload)) {\n throw new CliUsageError(\"append requires either --text or --payload\");\n }\n\n let identity: AppendIdentitySelection | undefined;\n if (agent) {\n identity = { type: \"agent\", id: agent };\n } else if (user) {\n identity = { type: \"user\", id: user };\n }\n\n const resolved = await runtime.resolveGlobalOptions(globalOptions);\n const session = await resolved.client.session({\n identity: resolveAppendIdentity(identity, resolved.client),\n id: sessionId,\n });\n const response = await session.append({\n type: parsed[\"--type\"] ?? \"content\",\n payload: payload ?? { text },\n source: parsed[\"--source\"],\n metadata: parsed[\"--metadata\"]\n ? parseJsonObject(parsed[\"--metadata\"], \"--metadata\")\n : undefined,\n refs: parsed[\"--refs\"]\n ? parseJsonObject(parsed[\"--refs\"], \"--refs\")\n : undefined,\n idempotencyKey: parsed[\"--idempotency-key\"],\n expectedSeq: parsed[\"--expected-seq\"]\n ? parseNonNegativeInteger(parsed[\"--expected-seq\"], \"--expected-seq\")\n : undefined,\n });\n\n if (resolved.json) {\n runtime.writeJsonOutput(response, true);\n return;\n }\n\n runtime.logger.info(`seq=${response.seq} deduped=${response.deduped}`);\n}\n","import { resolveConfigDir, StarciteCliConfigStore } from \"../config\";\nimport {\n type CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseConfigSetKey,\n parseEndpoint,\n resolveConfiguredBaseUrl,\n trimString,\n} from \"../runtime\";\n\nexport async function runConfigCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const action = args[0];\n const config = new StarciteCliConfigStore(\n resolveConfigDir(globalOptions.configDir)\n );\n\n if (action === \"set\") {\n const key = args[1];\n const value = args[2];\n\n if (!(key && value)) {\n throw new CliUsageError(\"config set requires <key> and <value>\");\n }\n\n if (parseConfigSetKey(key) === \"endpoint\") {\n const endpoint = parseEndpoint(value, \"endpoint\");\n await config.updateConfig({ baseUrl: endpoint });\n runtime.logger.info(`Endpoint set to ${endpoint}`);\n return;\n }\n\n await config.saveApiKey(value);\n await config.updateConfig({ apiKey: undefined });\n runtime.logger.info(\"API key saved.\");\n return;\n }\n\n if (action === \"show\") {\n const fileConfig = await config.readConfig();\n const apiKey = await config.readApiKey();\n const fromEnv = trimString(process.env.STARCITE_API_KEY);\n let apiKeySource = \"unset\";\n\n if (fromEnv) {\n apiKeySource = \"env\";\n } else if (apiKey) {\n apiKeySource = \"stored\";\n }\n\n const output = {\n endpoint: resolveConfiguredBaseUrl(fileConfig, globalOptions),\n apiKey: apiKey ? \"***\" : null,\n apiKeySource,\n configDir: config.directory,\n };\n\n if (globalOptions.json) {\n runtime.writeJsonOutput(output, true);\n return;\n }\n\n runtime.logger.info(JSON.stringify(output, null, 2));\n return;\n }\n\n throw new CliUsageError(\"config requires `set` or `show`\");\n}\n","import {\n type CliRuntime,\n type GlobalOptions,\n parseArgs,\n parseJsonObject,\n} from \"../runtime\";\n\nconst DEFAULT_CREATE_AGENT_ID = \"starcite-cli\";\n\nexport async function runCreateCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const parsed = parseArgs(\n {\n \"--id\": String,\n \"--title\": String,\n \"--metadata\": String,\n },\n args\n );\n const metadata = parsed[\"--metadata\"]\n ? parseJsonObject(parsed[\"--metadata\"], \"--metadata\")\n : undefined;\n const resolved = await runtime.resolveGlobalOptions(globalOptions);\n const session = await resolved.client.session({\n identity: resolved.client.agent({ id: DEFAULT_CREATE_AGENT_ID }),\n id: parsed[\"--id\"],\n title: parsed[\"--title\"],\n metadata,\n });\n\n if (resolved.json) {\n runtime.writeJsonOutput(session.record ?? { id: session.id }, true);\n return;\n }\n\n runtime.logger.info(session.id);\n}\n","import {\n type CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseArgs,\n parsePositiveInteger,\n parseSessionMetadataFilters,\n trimString,\n} from \"../runtime\";\n\nexport async function runSessionsCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const parsed = parseArgs(\n {\n \"--limit\": String,\n \"--cursor\": String,\n \"--metadata\": String,\n },\n args\n );\n\n if (`${parsed._[0] ?? \"\"}` !== \"list\") {\n throw new CliUsageError(\"sessions requires `list`\");\n }\n\n const cursor = trimString(parsed[\"--cursor\"]);\n if (parsed[\"--cursor\"] !== undefined && !cursor) {\n throw new CliUsageError(\"--cursor must be non-empty\");\n }\n\n const resolved = await runtime.resolveGlobalOptions(globalOptions);\n const page = await resolved.client.listSessions({\n limit: parsed[\"--limit\"]\n ? parsePositiveInteger(parsed[\"--limit\"], \"--limit\")\n : undefined,\n cursor,\n metadata: parsed[\"--metadata\"]\n ? parseSessionMetadataFilters(parsed[\"--metadata\"])\n : undefined,\n });\n\n runtime.logger.error(\n \"Warning: `sessions list` is a bad call to use in production.\"\n );\n\n if (resolved.json) {\n runtime.writeJsonOutput(page, true);\n return;\n }\n\n if (page.sessions.length === 0) {\n runtime.logger.info(\"No sessions found.\");\n return;\n }\n\n runtime.logger.info(\"id\\ttitle\\tcreated_at\");\n for (const session of page.sessions) {\n runtime.logger.info(\n `${session.id}\\t${session.title ?? \"\"}\\t${session.created_at}`\n );\n }\n\n if (page.next_cursor) {\n runtime.logger.info(`next_cursor=${page.next_cursor}`);\n }\n}\n","import {\n SessionLogConflictError,\n SessionLogGapError,\n type StarciteSession,\n} from \"@starcite/sdk\";\nimport {\n type CliRuntime,\n CliUsageError,\n DEFAULT_TAIL_BATCH_SIZE,\n type GlobalOptions,\n parseArgs,\n parseNonNegativeInteger,\n} from \"../runtime\";\n\nconst DEFAULT_CREATE_AGENT_ID = \"starcite-cli\";\n\nexport async function runTailCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const parsed = parseArgs(\n {\n \"--cursor\": String,\n \"--agent\": String,\n \"--limit\": String,\n \"--no-follow\": Boolean,\n },\n args\n );\n const sessionId = `${parsed._[0] ?? \"\"}`;\n\n if (!sessionId) {\n throw new CliUsageError(\"tail requires <sessionId>\");\n }\n\n const resolved = await runtime.resolveGlobalOptions(globalOptions);\n const abortController = new AbortController();\n const onSigint = () => {\n abortController.abort();\n };\n const cursor = parsed[\"--cursor\"]\n ? parseNonNegativeInteger(parsed[\"--cursor\"], \"--cursor\")\n : 0;\n const limit = parsed[\"--limit\"]\n ? parseNonNegativeInteger(parsed[\"--limit\"], \"--limit\")\n : undefined;\n\n process.once(\"SIGINT\", onSigint);\n\n try {\n let retriedAfterStoreReset = false;\n\n while (true) {\n const session = await resolved.client.session({\n identity: resolved.client.agent({ id: DEFAULT_CREATE_AGENT_ID }),\n id: sessionId,\n });\n\n try {\n await emitTailEvents({\n session,\n agent: parsed[\"--agent\"],\n cursor,\n follow: parsed[\"--no-follow\"] !== true,\n limit,\n json: resolved.json,\n runtime,\n signal: abortController.signal,\n });\n return;\n } catch (error) {\n const isStaleStoreConflict =\n error instanceof SessionLogConflictError ||\n error instanceof SessionLogGapError;\n\n if (!(isStaleStoreConflict && !retriedAfterStoreReset)) {\n throw error;\n }\n\n retriedAfterStoreReset = true;\n resolved.store.clearSession(resolved.baseUrl, sessionId);\n runtime.logger.error(\n `Warning: cleared stale local session cache for '${sessionId}' and retried tail.`\n );\n }\n }\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n }\n}\n\nasync function emitTailEvents({\n session,\n agent,\n cursor,\n follow,\n limit,\n json,\n runtime,\n signal,\n}: {\n session: StarciteSession;\n agent?: string;\n cursor: number;\n follow: boolean;\n limit: number | undefined;\n json: boolean;\n runtime: CliRuntime;\n signal: AbortSignal;\n}): Promise<void> {\n let emitted = 0;\n\n for await (const { event } of session.tail({\n cursor,\n batchSize: DEFAULT_TAIL_BATCH_SIZE,\n agent,\n follow,\n signal,\n })) {\n if (limit !== undefined && emitted >= limit) {\n return;\n }\n\n if (json) {\n runtime.writeJsonOutput(event);\n } else {\n runtime.logger.info(runtime.formatTailEvent(event));\n }\n\n emitted += 1;\n\n if (limit !== undefined && emitted >= limit) {\n return;\n }\n }\n}\n","import { run } from \"./cli\";\n\nrun();\n"],"mappings":"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","names":["Conf","TRAILING_SLASHES_REGEX","trimString","TRAILING_SLASHES_REGEX","trimString","trimString","DEFAULT_CREATE_AGENT_ID","trimString","DEFAULT_CREATE_AGENT_ID"]}
1
+ {"version":3,"sources":["../src/cli.ts","../src/runtime.ts","../src/config.ts","../src/store.ts","../src/commands/append.ts","../src/commands/config.ts","../src/commands/create.ts","../src/commands/sessions.ts","../src/commands/tail.ts","../src/index.ts"],"sourcesContent":["import { StarciteApiError } from \"@starcite/sdk\";\nimport { runAppendCommand } from \"./commands/append\";\nimport { runConfigCommand } from \"./commands/config\";\nimport { runCreateCommand } from \"./commands/create\";\nimport { runSessionsCommand } from \"./commands/sessions\";\nimport { runTailCommand } from \"./commands/tail\";\nimport {\n type CliDependencies,\n CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseArgs,\n} from \"./runtime\";\n\ndeclare const __CLI_VERSION__: string;\n\nconst HELP_TEXT = `Usage: starcite [options] <command>\n\nCommands:\n config\n create\n append\n tail\n sessions\n\nOptions:\n -u, --base-url <url> Starcite API base URL\n -k, --token <token> Starcite API key\n --config-dir <path>\n --json\n -h, --help\n -v, --version\n`;\n\nconst COMMANDS: Record<\n string,\n (args: string[], options: GlobalOptions, runtime: CliRuntime) => Promise<void>\n> = {\n config: runConfigCommand,\n create: runCreateCommand,\n append: runAppendCommand,\n tail: runTailCommand,\n sessions: runSessionsCommand,\n};\n\ninterface ParseContext {\n from?: \"user\";\n}\n\ninterface OutputHandlers {\n writeOut(text: string): void;\n writeErr(text: string): void;\n}\n\nexport interface CliProgram {\n parseAsync(argv: string[], context?: ParseContext): Promise<void>;\n exitOverride(): void;\n configureOutput(output: Partial<OutputHandlers>): void;\n}\n\nclass EarlyExit extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.code = code;\n }\n}\n\nfunction normalizeArgv(argv: string[], context?: ParseContext): string[] {\n const args = context?.from === \"user\" ? [...argv] : argv.slice(2);\n\n if (\n args[0] === \"node\" &&\n typeof args[1] === \"string\" &&\n args[1].includes(\"starcite\")\n ) {\n return args.slice(2);\n }\n\n return args;\n}\n\nfunction parseGlobalArgs(args: string[]) {\n const parsed = parseArgs(\n {\n \"--base-url\": String,\n \"-u\": \"--base-url\",\n \"--token\": String,\n \"-k\": \"--token\",\n \"--config-dir\": String,\n \"--json\": Boolean,\n \"--help\": Boolean,\n \"-h\": \"--help\",\n \"--version\": Boolean,\n \"-v\": \"--version\",\n },\n args,\n true\n );\n\n return {\n help: parsed[\"--help\"] === true,\n version: parsed[\"--version\"] === true,\n options: {\n baseUrl: parsed[\"--base-url\"],\n configDir: parsed[\"--config-dir\"],\n token: parsed[\"--token\"],\n json: parsed[\"--json\"] === true,\n },\n rest: parsed._.map((value: unknown) => `${value}`),\n };\n}\n\nexport function buildProgram(deps: CliDependencies = {}): CliProgram {\n const runtime = new CliRuntime(deps);\n let throwOnEarlyExit = false;\n let output: OutputHandlers = {\n writeOut(text: string) {\n process.stdout.write(text);\n },\n writeErr(text: string) {\n process.stderr.write(text);\n },\n };\n\n return {\n exitOverride() {\n throwOnEarlyExit = true;\n },\n\n configureOutput(next) {\n output = {\n writeOut: next.writeOut ?? output.writeOut,\n writeErr: next.writeErr ?? output.writeErr,\n };\n },\n\n async parseAsync(argv, context) {\n const parsed = parseGlobalArgs(normalizeArgv(argv, context));\n const command = parsed.rest[0];\n\n if (parsed.version) {\n output.writeOut(`${__CLI_VERSION__}\\n`);\n if (throwOnEarlyExit) {\n throw new EarlyExit(\"cli.versionDisplayed\", \"Version displayed\");\n }\n return;\n }\n\n if (parsed.help || !command) {\n output.writeOut(`${HELP_TEXT}\\n`);\n if (throwOnEarlyExit) {\n throw new EarlyExit(\"cli.helpDisplayed\", \"Help displayed\");\n }\n return;\n }\n\n const handler = COMMANDS[command];\n if (!handler) {\n throw new CliUsageError(`Unknown command: ${command}`);\n }\n\n await handler(parsed.rest.slice(1), parsed.options, runtime);\n },\n };\n}\n\nexport async function run(\n argv = process.argv,\n deps: CliDependencies = {}\n): Promise<void> {\n const runtime = new CliRuntime(deps);\n const program = buildProgram(deps);\n\n try {\n await program.parseAsync(argv);\n } catch (error) {\n if (error instanceof StarciteApiError) {\n runtime.logger.error(`${error.code} (${error.status}): ${error.message}`);\n process.exitCode = 1;\n return;\n }\n\n if (error instanceof Error) {\n runtime.logger.error(error.message);\n process.exitCode = 1;\n return;\n }\n\n runtime.logger.error(\"Unknown error\");\n process.exitCode = 1;\n }\n}\n","import { Starcite, type TailEvent } from \"@starcite/sdk\";\nimport arg from \"arg\";\nimport {\n resolveConfigDir,\n type StarciteCliConfig,\n StarciteCliConfigStore,\n} from \"./config\";\nimport { StarciteCliStore } from \"./store\";\n\nconst DEFAULT_API_PORT = 45_187;\nconst DEFAULT_TAIL_BATCH_SIZE = 256;\nconst TRAILING_SLASHES_REGEX = /\\/+$/;\n\nexport { DEFAULT_TAIL_BATCH_SIZE };\n\nexport class CliUsageError extends Error {}\n\nexport interface LoggerLike {\n info(message: string): void;\n error(message: string): void;\n}\n\nexport interface StdoutLike {\n write(message: string): void;\n}\n\nexport interface GlobalOptions {\n baseUrl?: string;\n configDir?: string;\n token?: string;\n json: boolean;\n}\n\nexport interface CliDependencies {\n createClient?: (\n baseUrl: string,\n apiKey: string | undefined,\n store: StarciteCliStore\n ) => Starcite;\n logger?: LoggerLike;\n stdout?: StdoutLike;\n}\n\nexport interface ResolvedGlobalOptions {\n baseUrl: string;\n json: boolean;\n config: StarciteCliConfigStore;\n store: StarciteCliStore;\n client: Starcite;\n}\n\nexport type CliJsonObject = Record<string, unknown>;\nexport type ParsedArgs = ReturnType<typeof arg>;\n\nconst defaultLogger: LoggerLike = {\n info(message: string) {\n console.log(message);\n },\n error(message: string) {\n console.error(message);\n },\n};\n\nconst defaultStdout: StdoutLike = {\n write(message: string) {\n process.stdout.write(message);\n },\n};\n\nexport function trimString(value?: string): string | undefined {\n const trimmed = value?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function parseArgs(\n spec: Parameters<typeof arg>[0],\n argv: string[],\n stopAtPositional = false\n): ParsedArgs {\n try {\n return arg(spec, {\n argv,\n permissive: false,\n stopAtPositional,\n });\n } catch (error) {\n if (error instanceof Error) {\n throw new CliUsageError(error.message);\n }\n\n throw error;\n }\n}\n\nexport function resolveConfiguredBaseUrl(\n config: StarciteCliConfig,\n options: GlobalOptions\n): string {\n return (\n trimString(options.baseUrl) ??\n trimString(process.env.STARCITE_BASE_URL) ??\n trimString(config.baseUrl) ??\n `http://localhost:${DEFAULT_API_PORT}`\n );\n}\n\nexport function parseNonNegativeInteger(\n value: string,\n optionName: string\n): number {\n const parsed = Number(value);\n\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new CliUsageError(`${optionName} must be a non-negative integer`);\n }\n\n return parsed;\n}\n\nexport function parsePositiveInteger(\n value: string,\n optionName: string\n): number {\n const parsed = Number(value);\n\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliUsageError(`${optionName} must be a positive integer`);\n }\n\n return parsed;\n}\n\nexport function parseEndpoint(value: string, optionName: string): string {\n const endpoint = trimString(value);\n if (!endpoint) {\n throw new CliUsageError(`${optionName} cannot be empty`);\n }\n\n let parsed: URL;\n try {\n parsed = new URL(endpoint);\n } catch {\n throw new CliUsageError(`${optionName} must be a valid URL`);\n }\n\n if (!(parsed.protocol === \"http:\" || parsed.protocol === \"https:\")) {\n throw new CliUsageError(`${optionName} must use http:// or https://`);\n }\n\n return endpoint.replace(TRAILING_SLASHES_REGEX, \"\");\n}\n\nexport function parseConfigSetKey(value: string): \"endpoint\" | \"api-key\" {\n const normalized = value.trim().toLowerCase();\n\n if (normalized === \"endpoint\" || normalized === \"base-url\") {\n return \"endpoint\";\n }\n\n if (normalized === \"api-key\") {\n return \"api-key\";\n }\n\n throw new CliUsageError(\"config key must be one of: endpoint, api-key\");\n}\n\nexport function parseJsonObject(\n value: string,\n optionName: string\n): CliJsonObject {\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(value);\n } catch {\n throw new CliUsageError(`${optionName} must be valid JSON`);\n }\n\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new CliUsageError(`${optionName} must be a JSON object`);\n }\n\n return parsed as CliJsonObject;\n}\n\nexport function parseSessionMetadataFilters(\n value: string\n): Record<string, string> {\n const filters: Record<string, string> = {};\n\n for (const [key, rawValue] of Object.entries(\n parseJsonObject(value, \"--metadata\")\n )) {\n if (key.trim().length === 0) {\n throw new CliUsageError(\"--metadata keys must be non-empty\");\n }\n\n if (typeof rawValue !== \"string\") {\n throw new CliUsageError(\"--metadata values must be strings\");\n }\n\n filters[key] = rawValue;\n }\n\n return filters;\n}\n\nexport class CliRuntime {\n readonly logger: LoggerLike;\n readonly stdout: StdoutLike;\n private readonly createClient: CliDependencies[\"createClient\"];\n\n constructor(deps: CliDependencies = {}) {\n this.logger = deps.logger ?? defaultLogger;\n this.stdout = deps.stdout ?? defaultStdout;\n this.createClient = deps.createClient;\n }\n\n async resolveGlobalOptions(\n options: GlobalOptions\n ): Promise<ResolvedGlobalOptions> {\n const config = new StarciteCliConfigStore(\n resolveConfigDir(options.configDir)\n );\n const store = new StarciteCliStore(config.directory);\n const baseUrl = resolveConfiguredBaseUrl(\n await config.readConfig(),\n options\n );\n const apiKey = trimString(options.token) ?? (await config.readApiKey());\n const client =\n this.createClient?.(baseUrl, apiKey, store) ??\n new Starcite({\n baseUrl,\n apiKey,\n store: store.sessionStore(baseUrl),\n });\n\n return {\n baseUrl,\n json: options.json,\n config,\n store,\n client,\n };\n }\n\n writeJsonOutput(value: unknown, pretty = false): void {\n const serialized = JSON.stringify(value, null, pretty ? 2 : undefined);\n if (serialized === undefined) {\n throw new Error(\"Failed to serialize JSON output\");\n }\n\n this.stdout.write(`${serialized}\\n`);\n }\n\n formatTailEvent(event: TailEvent): string {\n const actor = event.actor.startsWith(\"agent:\")\n ? event.actor.slice(\"agent:\".length)\n : event.actor;\n const text = event.payload?.text;\n\n return typeof text === \"string\"\n ? `[${actor}] ${text}`\n : `[${actor}] ${JSON.stringify(event.payload)}`;\n }\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport Conf from \"conf\";\nimport { parse as parseToml } from \"toml\";\nimport { z } from \"zod\";\n\nconst DEFAULT_CONFIG_DIRECTORY_NAME = \".starcite\";\nconst CONFIG_JSON_FILENAME = \"config.json\";\nconst CONFIG_TOML_FILENAME = \"config.toml\";\nconst CREDENTIALS_FILENAME = \"credentials\";\nconst TILDE_PREFIX_REGEX = /^~(?=\\/|$)/;\n\nconst ConfigFileSchema = z\n .object({\n baseUrl: z.string().optional(),\n base_url: z.string().optional(),\n apiKey: z.string().optional(),\n api_key: z.string().optional(),\n })\n .passthrough();\n\nconst CredentialsFileSchema = z.object({\n apiKey: z.string().trim().min(1).optional(),\n});\n\ntype CredentialsFile = z.infer<typeof CredentialsFileSchema>;\n\nexport interface StarciteCliConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n\nfunction trimString(value?: string): string | undefined {\n const trimmed = value?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeConfig(input: unknown): StarciteCliConfig {\n const parsed = ConfigFileSchema.safeParse(input);\n\n if (!parsed.success) {\n return {};\n }\n\n return {\n baseUrl: trimString(parsed.data.baseUrl ?? parsed.data.base_url),\n apiKey: trimString(parsed.data.apiKey ?? parsed.data.api_key),\n };\n}\n\nfunction defaultConfigDirectory(): string {\n const home = homedir();\n return home.trim().length > 0\n ? join(home, DEFAULT_CONFIG_DIRECTORY_NAME)\n : resolve(DEFAULT_CONFIG_DIRECTORY_NAME);\n}\n\nexport function resolveConfigDir(input?: string): string {\n const configured = trimString(input) ?? trimString(process.env.STARCITE_HOME);\n const withTilde = configured?.startsWith(\"~\")\n ? configured.replace(TILDE_PREFIX_REGEX, homedir())\n : configured;\n\n return resolve(withTilde ?? defaultConfigDirectory());\n}\n\nexport class StarciteCliConfigStore {\n readonly directory: string;\n private readonly credentialsStore: Conf<CredentialsFile>;\n\n constructor(directory: string) {\n this.directory = directory;\n this.credentialsStore = new Conf<CredentialsFile>({\n cwd: directory,\n clearInvalidConfig: true,\n configName: CREDENTIALS_FILENAME,\n fileExtension: \"json\",\n });\n }\n\n async readConfig(): Promise<StarciteCliConfig> {\n await this.ensureDirectory();\n\n for (const filename of [CONFIG_JSON_FILENAME, CONFIG_TOML_FILENAME]) {\n const parsed = await this.readConfigFile(filename);\n if (parsed !== undefined) {\n return normalizeConfig(parsed);\n }\n }\n\n return {};\n }\n\n async writeConfig(config: StarciteCliConfig): Promise<void> {\n await this.ensureDirectory();\n\n const normalized = normalizeConfig(config);\n await writeFile(\n join(this.directory, CONFIG_JSON_FILENAME),\n `${JSON.stringify(normalized, null, 2)}\\n`,\n \"utf8\"\n );\n }\n\n async updateConfig(\n patch: Partial<StarciteCliConfig>\n ): Promise<StarciteCliConfig> {\n const config = normalizeConfig({\n ...(await this.readConfig()),\n ...patch,\n });\n\n await this.writeConfig(config);\n return config;\n }\n\n async readApiKey(): Promise<string | undefined> {\n const fromEnv = trimString(process.env.STARCITE_API_KEY);\n if (fromEnv) {\n return fromEnv;\n }\n\n const fromCredentials = trimString(this.readCredentials().apiKey);\n if (fromCredentials) {\n return fromCredentials;\n }\n\n return trimString((await this.readConfig()).apiKey);\n }\n\n async saveApiKey(apiKey: string): Promise<void> {\n await this.ensureDirectory();\n\n const normalized = trimString(apiKey);\n if (!normalized) {\n throw new Error(\"API key cannot be empty\");\n }\n\n this.credentialsStore.set(\"apiKey\", normalized);\n }\n\n private async readConfigFile(filename: string): Promise<unknown | undefined> {\n const path = join(this.directory, filename);\n\n try {\n const content = await readFile(path, \"utf8\");\n return filename.endsWith(\".toml\")\n ? parseToml(content)\n : JSON.parse(content);\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return undefined;\n }\n\n throw error;\n }\n }\n\n private readCredentials(): CredentialsFile {\n const parsed = CredentialsFileSchema.safeParse(this.credentialsStore.store);\n\n if (parsed.success) {\n return parsed.data;\n }\n\n this.credentialsStore.clear();\n return {};\n }\n\n private async ensureDirectory(): Promise<void> {\n await mkdir(this.directory, { recursive: true });\n }\n}\n","import {\n type SessionStore,\n type SessionStoreState,\n type TailEvent,\n WebStorageSessionStore,\n} from \"@starcite/sdk\";\nimport Conf from \"conf\";\n\nconst STATE_FILENAME = \"state\";\nconst TRAILING_SLASHES_REGEX = /\\/+$/;\nconst STORE_VERSION_KEY = \"__starciteCliStoreVersion\";\nconst CURRENT_STORE_VERSION = \"2\";\n\nexport function buildSessionStoreContextKey(\n baseUrl: string,\n sessionId: string\n): string {\n return `${baseUrl}::${sessionId}`;\n}\n\nfunction normalizeStoreBaseUrl(baseUrl: string): string {\n if (baseUrl.length === 0) {\n return \"\";\n }\n\n const normalized = baseUrl.replace(TRAILING_SLASHES_REGEX, \"\");\n return normalized.endsWith(\"/v1\") ? normalized : `${normalized}/v1`;\n}\n\nexport class StarciteCliStore implements SessionStore<TailEvent> {\n private readonly storage: Conf<Record<string, string>>;\n\n constructor(directory: string) {\n this.storage = new Conf<Record<string, string>>({\n cwd: directory,\n clearInvalidConfig: true,\n configName: STATE_FILENAME,\n fileExtension: \"json\",\n defaults: {},\n });\n\n this.resetOnStoreVersionMismatch();\n }\n\n sessionStore(baseUrl: string): SessionStore<TailEvent> {\n return new WebStorageSessionStore<TailEvent>(this.storageAdapter(), {\n keyForSession: (sessionId) =>\n buildSessionStoreContextKey(normalizeStoreBaseUrl(baseUrl), sessionId),\n });\n }\n\n load(sessionId: string): SessionStoreState<TailEvent> | undefined {\n return this.sessionStore(\"\").load(sessionId);\n }\n\n save(sessionId: string, state: SessionStoreState<TailEvent>): void {\n this.sessionStore(\"\").save(sessionId, state);\n }\n\n clear(sessionId: string): void {\n this.sessionStore(\"\").clear?.(sessionId);\n }\n\n clearSession(baseUrl: string, sessionId: string): void {\n this.sessionStore(baseUrl).clear?.(sessionId);\n }\n\n private storageAdapter() {\n return {\n getItem: (key: string): string | null => this.storage.get(key) ?? null,\n setItem: (key: string, value: string): void => {\n this.storage.set(key, value);\n },\n removeItem: (key: string): void => {\n this.storage.delete(key);\n },\n };\n }\n\n private resetOnStoreVersionMismatch(): void {\n const storedVersion = this.storage.get(STORE_VERSION_KEY);\n if (storedVersion === CURRENT_STORE_VERSION) {\n return;\n }\n\n this.storage.clear();\n this.storage.set(STORE_VERSION_KEY, CURRENT_STORE_VERSION);\n }\n}\n","import type { StarciteIdentity } from \"@starcite/sdk\";\nimport {\n type CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseArgs,\n parseJsonObject,\n parseNonNegativeInteger,\n trimString,\n} from \"../runtime\";\n\nconst DEFAULT_CREATE_AGENT_ID = \"starcite-cli\";\n\ninterface AppendIdentitySelection {\n type: \"agent\" | \"user\";\n id: string;\n}\n\nfunction resolveAppendIdentity(\n selection: AppendIdentitySelection | undefined,\n client: {\n agent(input: { id: string }): StarciteIdentity;\n user(input: { id: string }): StarciteIdentity;\n }\n): StarciteIdentity {\n if (!selection) {\n return client.agent({ id: DEFAULT_CREATE_AGENT_ID });\n }\n\n return selection.type === \"agent\"\n ? client.agent({ id: selection.id })\n : client.user({ id: selection.id });\n}\n\nexport async function runAppendCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const parsed = parseArgs(\n {\n \"--agent\": String,\n \"--user\": String,\n \"--text\": String,\n \"--type\": String,\n \"--source\": String,\n \"--payload\": String,\n \"--metadata\": String,\n \"--refs\": String,\n \"--idempotency-key\": String,\n \"--expected-seq\": String,\n },\n args\n );\n const sessionId = `${parsed._[0] ?? \"\"}`;\n\n if (!sessionId) {\n throw new CliUsageError(\"append requires <sessionId>\");\n }\n\n const agent = trimString(parsed[\"--agent\"]);\n const user = trimString(parsed[\"--user\"]);\n const text = trimString(parsed[\"--text\"]);\n const payload = parsed[\"--payload\"]\n ? parseJsonObject(parsed[\"--payload\"], \"--payload\")\n : undefined;\n\n if (agent && user) {\n throw new CliUsageError(\"Choose either --agent or --user, not both\");\n }\n\n if (text && payload) {\n throw new CliUsageError(\"Choose either --text or --payload, not both\");\n }\n\n if (!(text || payload)) {\n throw new CliUsageError(\"append requires either --text or --payload\");\n }\n\n let identity: AppendIdentitySelection | undefined;\n if (agent) {\n identity = { type: \"agent\", id: agent };\n } else if (user) {\n identity = { type: \"user\", id: user };\n }\n\n const resolved = await runtime.resolveGlobalOptions(globalOptions);\n const session = await resolved.client.session({\n identity: resolveAppendIdentity(identity, resolved.client),\n id: sessionId,\n });\n const response = await session.append({\n type: parsed[\"--type\"] ?? \"content\",\n payload: payload ?? { text },\n source: parsed[\"--source\"],\n metadata: parsed[\"--metadata\"]\n ? parseJsonObject(parsed[\"--metadata\"], \"--metadata\")\n : undefined,\n refs: parsed[\"--refs\"]\n ? parseJsonObject(parsed[\"--refs\"], \"--refs\")\n : undefined,\n idempotencyKey: parsed[\"--idempotency-key\"],\n expectedSeq: parsed[\"--expected-seq\"]\n ? parseNonNegativeInteger(parsed[\"--expected-seq\"], \"--expected-seq\")\n : undefined,\n });\n\n if (resolved.json) {\n runtime.writeJsonOutput(response, true);\n return;\n }\n\n runtime.logger.info(`seq=${response.seq} deduped=${response.deduped}`);\n}\n","import { resolveConfigDir, StarciteCliConfigStore } from \"../config\";\nimport {\n type CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseConfigSetKey,\n parseEndpoint,\n resolveConfiguredBaseUrl,\n trimString,\n} from \"../runtime\";\n\nexport async function runConfigCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const action = args[0];\n const config = new StarciteCliConfigStore(\n resolveConfigDir(globalOptions.configDir)\n );\n\n if (action === \"set\") {\n const key = args[1];\n const value = args[2];\n\n if (!(key && value)) {\n throw new CliUsageError(\"config set requires <key> and <value>\");\n }\n\n if (parseConfigSetKey(key) === \"endpoint\") {\n const endpoint = parseEndpoint(value, \"endpoint\");\n await config.updateConfig({ baseUrl: endpoint });\n runtime.logger.info(`Endpoint set to ${endpoint}`);\n return;\n }\n\n await config.saveApiKey(value);\n await config.updateConfig({ apiKey: undefined });\n runtime.logger.info(\"API key saved.\");\n return;\n }\n\n if (action === \"show\") {\n const fileConfig = await config.readConfig();\n const apiKey = await config.readApiKey();\n const fromEnv = trimString(process.env.STARCITE_API_KEY);\n let apiKeySource = \"unset\";\n\n if (fromEnv) {\n apiKeySource = \"env\";\n } else if (apiKey) {\n apiKeySource = \"stored\";\n }\n\n const output = {\n endpoint: resolveConfiguredBaseUrl(fileConfig, globalOptions),\n apiKey: apiKey ? \"***\" : null,\n apiKeySource,\n configDir: config.directory,\n };\n\n if (globalOptions.json) {\n runtime.writeJsonOutput(output, true);\n return;\n }\n\n runtime.logger.info(JSON.stringify(output, null, 2));\n return;\n }\n\n throw new CliUsageError(\"config requires `set` or `show`\");\n}\n","import {\n type CliRuntime,\n type GlobalOptions,\n parseArgs,\n parseJsonObject,\n} from \"../runtime\";\n\nconst DEFAULT_CREATE_AGENT_ID = \"starcite-cli\";\n\nexport async function runCreateCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const parsed = parseArgs(\n {\n \"--id\": String,\n \"--title\": String,\n \"--metadata\": String,\n },\n args\n );\n const metadata = parsed[\"--metadata\"]\n ? parseJsonObject(parsed[\"--metadata\"], \"--metadata\")\n : undefined;\n const resolved = await runtime.resolveGlobalOptions(globalOptions);\n const session = await resolved.client.session({\n identity: resolved.client.agent({ id: DEFAULT_CREATE_AGENT_ID }),\n id: parsed[\"--id\"],\n title: parsed[\"--title\"],\n metadata,\n });\n\n if (resolved.json) {\n runtime.writeJsonOutput(session.record ?? { id: session.id }, true);\n return;\n }\n\n runtime.logger.info(session.id);\n}\n","import {\n type CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseArgs,\n parsePositiveInteger,\n parseSessionMetadataFilters,\n trimString,\n} from \"../runtime\";\n\nexport async function runSessionsCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const parsed = parseArgs(\n {\n \"--limit\": String,\n \"--cursor\": String,\n \"--metadata\": String,\n },\n args\n );\n\n if (`${parsed._[0] ?? \"\"}` !== \"list\") {\n throw new CliUsageError(\"sessions requires `list`\");\n }\n\n const cursor = trimString(parsed[\"--cursor\"]);\n if (parsed[\"--cursor\"] !== undefined && !cursor) {\n throw new CliUsageError(\"--cursor must be non-empty\");\n }\n\n const resolved = await runtime.resolveGlobalOptions(globalOptions);\n const page = await resolved.client.listSessions({\n limit: parsed[\"--limit\"]\n ? parsePositiveInteger(parsed[\"--limit\"], \"--limit\")\n : undefined,\n cursor,\n metadata: parsed[\"--metadata\"]\n ? parseSessionMetadataFilters(parsed[\"--metadata\"])\n : undefined,\n });\n\n runtime.logger.error(\n \"Warning: `sessions list` is a bad call to use in production.\"\n );\n\n if (resolved.json) {\n runtime.writeJsonOutput(page, true);\n return;\n }\n\n if (page.sessions.length === 0) {\n runtime.logger.info(\"No sessions found.\");\n return;\n }\n\n runtime.logger.info(\"id\\ttitle\\tcreated_at\");\n for (const session of page.sessions) {\n runtime.logger.info(\n `${session.id}\\t${session.title ?? \"\"}\\t${session.created_at}`\n );\n }\n\n if (page.next_cursor) {\n runtime.logger.info(`next_cursor=${page.next_cursor}`);\n }\n}\n","import {\n SessionLogConflictError,\n SessionLogGapError,\n type StarciteSession,\n} from \"@starcite/sdk\";\nimport {\n type CliRuntime,\n CliUsageError,\n DEFAULT_TAIL_BATCH_SIZE,\n type GlobalOptions,\n parseArgs,\n parseNonNegativeInteger,\n} from \"../runtime\";\n\nconst DEFAULT_CREATE_AGENT_ID = \"starcite-cli\";\n\nexport async function runTailCommand(\n args: string[],\n globalOptions: GlobalOptions,\n runtime: CliRuntime\n): Promise<void> {\n const parsed = parseArgs(\n {\n \"--cursor\": String,\n \"--agent\": String,\n \"--limit\": String,\n \"--no-follow\": Boolean,\n },\n args\n );\n const sessionId = `${parsed._[0] ?? \"\"}`;\n\n if (!sessionId) {\n throw new CliUsageError(\"tail requires <sessionId>\");\n }\n\n const resolved = await runtime.resolveGlobalOptions(globalOptions);\n const abortController = new AbortController();\n const onSigint = () => {\n abortController.abort();\n };\n const cursor = parsed[\"--cursor\"]\n ? parseNonNegativeInteger(parsed[\"--cursor\"], \"--cursor\")\n : 0;\n const limit = parsed[\"--limit\"]\n ? parseNonNegativeInteger(parsed[\"--limit\"], \"--limit\")\n : undefined;\n\n process.once(\"SIGINT\", onSigint);\n\n try {\n let retriedAfterStoreReset = false;\n\n while (true) {\n const session = await resolved.client.session({\n identity: resolved.client.agent({ id: DEFAULT_CREATE_AGENT_ID }),\n id: sessionId,\n });\n\n try {\n await emitTailEvents({\n session,\n agent: parsed[\"--agent\"],\n cursor,\n follow: parsed[\"--no-follow\"] !== true,\n limit,\n json: resolved.json,\n runtime,\n signal: abortController.signal,\n });\n return;\n } catch (error) {\n const isStaleStoreConflict =\n error instanceof SessionLogConflictError ||\n error instanceof SessionLogGapError;\n\n if (!(isStaleStoreConflict && !retriedAfterStoreReset)) {\n throw error;\n }\n\n retriedAfterStoreReset = true;\n resolved.store.clearSession(resolved.baseUrl, sessionId);\n runtime.logger.error(\n `Warning: cleared stale local session cache for '${sessionId}' and retried tail.`\n );\n }\n }\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n }\n}\n\nasync function emitTailEvents({\n session,\n agent,\n cursor,\n follow,\n limit,\n json,\n runtime,\n signal,\n}: {\n session: StarciteSession;\n agent?: string;\n cursor: number;\n follow: boolean;\n limit: number | undefined;\n json: boolean;\n runtime: CliRuntime;\n signal: AbortSignal;\n}): Promise<void> {\n let emitted = 0;\n\n for await (const { event } of session.tail({\n cursor,\n batchSize: DEFAULT_TAIL_BATCH_SIZE,\n agent,\n follow,\n signal,\n })) {\n if (limit !== undefined && emitted >= limit) {\n return;\n }\n\n if (json) {\n runtime.writeJsonOutput(event);\n } else {\n runtime.logger.info(runtime.formatTailEvent(event));\n }\n\n emitted += 1;\n\n if (limit !== undefined && emitted >= limit) {\n return;\n }\n }\n}\n","import { run } from \"./cli\";\n\nrun();\n"],"mappings":"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","names":["Conf","TRAILING_SLASHES_REGEX","trimString","TRAILING_SLASHES_REGEX","trimString","trimString","DEFAULT_CREATE_AGENT_ID","trimString","DEFAULT_CREATE_AGENT_ID"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starcite",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "description": "CLI for Starcite",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://starcite.ai",
@@ -42,7 +42,7 @@
42
42
  "check": "bun run lint && bun run typecheck && bun run test"
43
43
  },
44
44
  "dependencies": {
45
- "@starcite/sdk": "^0.0.8",
45
+ "@starcite/sdk": "^0.0.9",
46
46
  "arg": "^5.0.2",
47
47
  "conf": "^15.1.0",
48
48
  "toml": "^3.0.0",