starcite 0.0.12 → 0.0.13

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 CHANGED
@@ -169,7 +169,7 @@ By default the CLI uses `~/.starcite`:
169
169
 
170
170
  - `config.json` or `config.toml`: optional defaults (`baseUrl`, `apiKey`)
171
171
  - `credentials.json`: saved API key plus cached session tokens
172
- - `state.json`: session-scoped store state (retained events, cursors, and producer state)
172
+ - `state.json`: session-scoped store state (retained events, internal resume state, and producer state)
173
173
 
174
174
  Use `--config-dir <path>` to override the directory for testing or isolated runs.
175
175
 
@@ -188,9 +188,9 @@ Press `Ctrl+C` to stop.
188
188
 
189
189
  Useful flags:
190
190
 
191
- - `--cursor <cursor>`: replay cursor (inclusive)
191
+ - `--cursor <seq>`: start replay at this sequence number
192
192
  - `--agent <agent>`: filter to one `agent:<name>`
193
193
  - `--limit <count>`: stop after N emitted events
194
194
  - `--no-follow`: stop after replay instead of following live events
195
195
 
196
- By default, `tail` starts from cursor `0` and requests batched replay frames from the API for faster catch-up.
196
+ By default, `tail` starts from sequence `0` and requests batched replay frames from the API for faster catch-up. The CLI does not require or expose the transport epoch.
package/dist/index.js CHANGED
@@ -554,16 +554,13 @@ import {
554
554
  var DEFAULT_CREATE_AGENT_ID3 = "starcite-cli";
555
555
  var NO_FOLLOW_IDLE_MS = 1e3;
556
556
  function parseTailCursorArg(input, flagName) {
557
- const [epoch, seq, extra] = input.split(":");
558
- const parsedEpoch = Number(epoch);
559
- const parsedSeq = Number(seq);
560
- if (extra !== void 0 || epoch === void 0 || seq === void 0 || !Number.isInteger(parsedEpoch) || parsedEpoch <= 0 || !Number.isInteger(parsedSeq) || parsedSeq < 0) {
561
- throw new CliUsageError(`${flagName} must be in <epoch>:<seq> format`);
557
+ const parsedSeq = Number(input);
558
+ if (!Number.isInteger(parsedSeq) || parsedSeq < 0) {
559
+ throw new CliUsageError(
560
+ `${flagName} must be a non-negative integer sequence number`
561
+ );
562
562
  }
563
- return {
564
- epoch: parsedEpoch,
565
- seq: parsedSeq
566
- };
563
+ return parsedSeq;
567
564
  }
568
565
  async function runTailCommand(args, globalOptions, runtime) {
569
566
  const parsed = parseArgs(
@@ -598,7 +595,7 @@ async function runTailCommand(args, globalOptions, runtime) {
598
595
  await emitTailEvents({
599
596
  session,
600
597
  agent: parsed["--agent"],
601
- cursor,
598
+ cursorSeq: cursor,
602
599
  follow: parsed["--no-follow"] !== true,
603
600
  limit,
604
601
  json: resolved.json,
@@ -607,7 +604,7 @@ async function runTailCommand(args, globalOptions, runtime) {
607
604
  });
608
605
  return;
609
606
  } catch (error) {
610
- const isStaleStoreConflict = error instanceof SessionLogConflictError || error instanceof SessionLogGapError;
607
+ const isStaleStoreConflict = error instanceof SessionLogConflictError || error instanceof SessionLogGapError || error instanceof StarciteTailGapError;
611
608
  if (!(isStaleStoreConflict && !retriedAfterStoreReset)) {
612
609
  throw error;
613
610
  }
@@ -625,18 +622,17 @@ async function runTailCommand(args, globalOptions, runtime) {
625
622
  async function emitTailEvents({
626
623
  session,
627
624
  agent,
628
- cursor,
625
+ cursorSeq,
629
626
  follow,
630
627
  limit,
631
628
  json,
632
629
  runtime,
633
630
  signal
634
631
  }) {
635
- if (cursor) {
632
+ if (cursorSeq !== void 0) {
636
633
  session.log.hydrate({
637
- cursor,
638
634
  events: [],
639
- lastSeq: cursor.seq
635
+ lastSeq: 0
640
636
  });
641
637
  }
642
638
  if (limit !== void 0 && limit <= 0) {
@@ -699,6 +695,10 @@ async function emitTailEvents({
699
695
  const stopEvents = session.on(
700
696
  "event",
701
697
  (event) => {
698
+ resetIdleTimer();
699
+ if (cursorSeq !== void 0 && event.seq < cursorSeq) {
700
+ return;
701
+ }
702
702
  if (limit !== void 0 && emitted >= limit) {
703
703
  finish();
704
704
  return;
@@ -711,9 +711,7 @@ async function emitTailEvents({
711
711
  emitted += 1;
712
712
  if (limit !== void 0 && emitted >= limit) {
713
713
  finish();
714
- return;
715
714
  }
716
- resetIdleTimer();
717
715
  },
718
716
  { agent }
719
717
  );
@@ -815,7 +813,7 @@ function buildProgram(deps = {}) {
815
813
  const parsed = parseGlobalArgs(normalizeArgv(argv, context));
816
814
  const command = parsed.rest[0];
817
815
  if (parsed.version) {
818
- output.writeOut(`${"0.0.12"}
816
+ output.writeOut(`${"0.0.13"}
819
817
  `);
820
818
  if (throwOnEarlyExit) {
821
819
  throw new EarlyExit("cli.versionDisplayed", "Version displayed");
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 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 StarciteTailGapError,\n type TailCursor,\n} from \"@starcite/sdk\";\nimport {\n type CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseArgs,\n parseNonNegativeInteger,\n} from \"../runtime\";\n\nconst DEFAULT_CREATE_AGENT_ID = \"starcite-cli\";\nconst NO_FOLLOW_IDLE_MS = 1000;\n\nfunction parseTailCursorArg(input: string, flagName: string): TailCursor {\n const [epoch, seq, extra] = input.split(\":\");\n const parsedEpoch = Number(epoch);\n const parsedSeq = Number(seq);\n if (\n extra !== undefined ||\n epoch === undefined ||\n seq === undefined ||\n !Number.isInteger(parsedEpoch) ||\n parsedEpoch <= 0 ||\n !Number.isInteger(parsedSeq) ||\n parsedSeq < 0\n ) {\n throw new CliUsageError(`${flagName} must be in <epoch>:<seq> format`);\n }\n\n return {\n epoch: parsedEpoch,\n seq: parsedSeq,\n };\n}\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 ? parseTailCursorArg(parsed[\"--cursor\"], \"--cursor\")\n : undefined;\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: TailCursor | undefined;\n follow: boolean;\n limit: number | undefined;\n json: boolean;\n runtime: CliRuntime;\n signal: AbortSignal;\n}): Promise<void> {\n if (cursor) {\n session.log.hydrate({\n cursor,\n events: [],\n lastSeq: cursor.seq,\n });\n }\n\n if (limit !== undefined && limit <= 0) {\n return;\n }\n\n return await new Promise<void>((resolve, reject) => {\n let emitted = 0;\n let idleTimer: ReturnType<typeof setTimeout> | undefined;\n let settled = false;\n\n const cleanup = () => {\n stopEvents();\n stopGap();\n stopError();\n signal.removeEventListener(\"abort\", handleAbort);\n if (idleTimer) {\n clearTimeout(idleTimer);\n }\n };\n\n const finish = () => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n resolve();\n };\n\n const fail = (error: unknown) => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n reject(error);\n };\n\n const resetIdleTimer = () => {\n if (follow) {\n return;\n }\n\n if (idleTimer) {\n clearTimeout(idleTimer);\n }\n\n idleTimer = setTimeout(() => {\n finish();\n }, NO_FOLLOW_IDLE_MS);\n };\n\n const handleAbort = () => {\n finish();\n };\n\n const stopError = session.on(\"error\", (error) => {\n fail(error);\n });\n const stopGap = session.on(\"gap\", (_gap) => {\n fail(\n new StarciteTailGapError(\n `Tail gap reported for session '${session.id}'`,\n { sessionId: session.id }\n )\n );\n });\n const stopEvents = session.on(\n \"event\",\n (event) => {\n if (limit !== undefined && emitted >= limit) {\n finish();\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 finish();\n return;\n }\n\n resetIdleTimer();\n },\n { agent }\n );\n\n signal.addEventListener(\"abort\", handleAbort, { once: true });\n resetIdleTimer();\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","resolve"]}
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 StarciteTailGapError,\n} from \"@starcite/sdk\";\nimport {\n type CliRuntime,\n CliUsageError,\n type GlobalOptions,\n parseArgs,\n parseNonNegativeInteger,\n} from \"../runtime\";\n\nconst DEFAULT_CREATE_AGENT_ID = \"starcite-cli\";\nconst NO_FOLLOW_IDLE_MS = 1000;\n\nfunction parseTailCursorArg(input: string, flagName: string): number {\n const parsedSeq = Number(input);\n if (!Number.isInteger(parsedSeq) || parsedSeq < 0) {\n throw new CliUsageError(\n `${flagName} must be a non-negative integer sequence number`\n );\n }\n\n return parsedSeq;\n}\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 ? parseTailCursorArg(parsed[\"--cursor\"], \"--cursor\")\n : undefined;\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 cursorSeq: 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 error instanceof StarciteTailGapError;\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 cursorSeq,\n follow,\n limit,\n json,\n runtime,\n signal,\n}: {\n session: StarciteSession;\n agent?: string;\n cursorSeq: number | undefined;\n follow: boolean;\n limit: number | undefined;\n json: boolean;\n runtime: CliRuntime;\n signal: AbortSignal;\n}): Promise<void> {\n if (cursorSeq !== undefined) {\n session.log.hydrate({\n events: [],\n lastSeq: 0,\n });\n }\n\n if (limit !== undefined && limit <= 0) {\n return;\n }\n\n return await new Promise<void>((resolve, reject) => {\n let emitted = 0;\n let idleTimer: ReturnType<typeof setTimeout> | undefined;\n let settled = false;\n\n const cleanup = () => {\n stopEvents();\n stopGap();\n stopError();\n signal.removeEventListener(\"abort\", handleAbort);\n if (idleTimer) {\n clearTimeout(idleTimer);\n }\n };\n\n const finish = () => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n resolve();\n };\n\n const fail = (error: unknown) => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n reject(error);\n };\n\n const resetIdleTimer = () => {\n if (follow) {\n return;\n }\n\n if (idleTimer) {\n clearTimeout(idleTimer);\n }\n\n idleTimer = setTimeout(() => {\n finish();\n }, NO_FOLLOW_IDLE_MS);\n };\n\n const handleAbort = () => {\n finish();\n };\n\n const stopError = session.on(\"error\", (error) => {\n fail(error);\n });\n const stopGap = session.on(\"gap\", (_gap) => {\n fail(\n new StarciteTailGapError(\n `Tail gap reported for session '${session.id}'`,\n { sessionId: session.id }\n )\n );\n });\n const stopEvents = session.on(\n \"event\",\n (event) => {\n resetIdleTimer();\n\n if (cursorSeq !== undefined && event.seq < cursorSeq) {\n return;\n }\n\n if (limit !== undefined && emitted >= limit) {\n finish();\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 finish();\n }\n },\n { agent }\n );\n\n signal.addEventListener(\"abort\", handleAbort, { once: true });\n resetIdleTimer();\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","resolve"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starcite",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
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.12",
45
+ "@starcite/sdk": "^0.0.13",
46
46
  "arg": "^5.0.2",
47
47
  "conf": "^15.1.0",
48
48
  "toml": "^3.0.0",