starcite 0.0.12 → 0.0.14

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 public replay contract is seq-only.
package/dist/index.js CHANGED
@@ -409,20 +409,24 @@ async function runAppendCommand(args, globalOptions, runtime) {
409
409
  identity: resolveAppendIdentity(identity, resolved.client),
410
410
  id: sessionId
411
411
  });
412
- const response = await session.append({
413
- type: parsed["--type"] ?? "content",
414
- payload: payload ?? { text },
415
- source: parsed["--source"],
416
- metadata: parsed["--metadata"] ? parseJsonObject(parsed["--metadata"], "--metadata") : void 0,
417
- refs: parsed["--refs"] ? parseJsonObject(parsed["--refs"], "--refs") : void 0,
418
- idempotencyKey: parsed["--idempotency-key"],
419
- expectedSeq: parsed["--expected-seq"] ? parseNonNegativeInteger(parsed["--expected-seq"], "--expected-seq") : void 0
420
- });
421
- if (resolved.json) {
422
- runtime.writeJsonOutput(response, true);
423
- return;
412
+ try {
413
+ const response = await session.append({
414
+ type: parsed["--type"] ?? "content",
415
+ payload: payload ?? { text },
416
+ source: parsed["--source"],
417
+ metadata: parsed["--metadata"] ? parseJsonObject(parsed["--metadata"], "--metadata") : void 0,
418
+ refs: parsed["--refs"] ? parseJsonObject(parsed["--refs"], "--refs") : void 0,
419
+ idempotencyKey: parsed["--idempotency-key"],
420
+ expectedSeq: parsed["--expected-seq"] ? parseNonNegativeInteger(parsed["--expected-seq"], "--expected-seq") : void 0
421
+ });
422
+ if (resolved.json) {
423
+ runtime.writeJsonOutput(response, true);
424
+ return;
425
+ }
426
+ runtime.logger.info(`seq=${response.seq} deduped=${response.deduped}`);
427
+ } finally {
428
+ session.disconnect();
424
429
  }
425
- runtime.logger.info(`seq=${response.seq} deduped=${response.deduped}`);
426
430
  }
427
431
 
428
432
  // src/commands/config.ts
@@ -546,24 +550,16 @@ async function runSessionsCommand(args, globalOptions, runtime) {
546
550
  }
547
551
 
548
552
  // src/commands/tail.ts
549
- import {
550
- SessionLogConflictError,
551
- SessionLogGapError,
552
- StarciteTailGapError
553
- } from "@starcite/sdk";
554
553
  var DEFAULT_CREATE_AGENT_ID3 = "starcite-cli";
555
554
  var NO_FOLLOW_IDLE_MS = 1e3;
556
555
  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`);
556
+ const parsedSeq = Number(input);
557
+ if (!Number.isInteger(parsedSeq) || parsedSeq < 0) {
558
+ throw new CliUsageError(
559
+ `${flagName} must be a non-negative integer sequence number`
560
+ );
562
561
  }
563
- return {
564
- epoch: parsedEpoch,
565
- seq: parsedSeq
566
- };
562
+ return parsedSeq;
567
563
  }
568
564
  async function runTailCommand(args, globalOptions, runtime) {
569
565
  const parsed = parseArgs(
@@ -588,35 +584,23 @@ async function runTailCommand(args, globalOptions, runtime) {
588
584
  const limit = parsed["--limit"] ? parseNonNegativeInteger(parsed["--limit"], "--limit") : void 0;
589
585
  process.once("SIGINT", onSigint);
590
586
  try {
591
- let retriedAfterStoreReset = false;
592
- while (true) {
593
- const session = await resolved.client.session({
594
- identity: resolved.client.agent({ id: DEFAULT_CREATE_AGENT_ID3 }),
595
- id: sessionId
587
+ const session = await resolved.client.session({
588
+ identity: resolved.client.agent({ id: DEFAULT_CREATE_AGENT_ID3 }),
589
+ id: sessionId
590
+ });
591
+ try {
592
+ await emitTailEvents({
593
+ session,
594
+ agent: parsed["--agent"],
595
+ cursorSeq: cursor,
596
+ follow: parsed["--no-follow"] !== true,
597
+ limit,
598
+ json: resolved.json,
599
+ runtime,
600
+ signal: abortController.signal
596
601
  });
597
- try {
598
- await emitTailEvents({
599
- session,
600
- agent: parsed["--agent"],
601
- cursor,
602
- follow: parsed["--no-follow"] !== true,
603
- limit,
604
- json: resolved.json,
605
- runtime,
606
- signal: abortController.signal
607
- });
608
- return;
609
- } catch (error) {
610
- const isStaleStoreConflict = error instanceof SessionLogConflictError || error instanceof SessionLogGapError;
611
- if (!(isStaleStoreConflict && !retriedAfterStoreReset)) {
612
- throw error;
613
- }
614
- retriedAfterStoreReset = true;
615
- resolved.store.clearSession(resolved.baseUrl, sessionId);
616
- runtime.logger.error(
617
- `Warning: cleared stale local session cache for '${sessionId}' and retried tail.`
618
- );
619
- }
602
+ } finally {
603
+ session.disconnect();
620
604
  }
621
605
  } finally {
622
606
  process.removeListener("SIGINT", onSigint);
@@ -625,20 +609,13 @@ async function runTailCommand(args, globalOptions, runtime) {
625
609
  async function emitTailEvents({
626
610
  session,
627
611
  agent,
628
- cursor,
612
+ cursorSeq,
629
613
  follow,
630
614
  limit,
631
615
  json,
632
616
  runtime,
633
617
  signal
634
618
  }) {
635
- if (cursor) {
636
- session.log.hydrate({
637
- cursor,
638
- events: [],
639
- lastSeq: cursor.seq
640
- });
641
- }
642
619
  if (limit !== void 0 && limit <= 0) {
643
620
  return;
644
621
  }
@@ -648,7 +625,6 @@ async function emitTailEvents({
648
625
  let settled = false;
649
626
  const cleanup = () => {
650
627
  stopEvents();
651
- stopGap();
652
628
  stopError();
653
629
  signal.removeEventListener("abort", handleAbort);
654
630
  if (idleTimer) {
@@ -688,17 +664,13 @@ async function emitTailEvents({
688
664
  const stopError = session.on("error", (error) => {
689
665
  fail(error);
690
666
  });
691
- const stopGap = session.on("gap", (_gap) => {
692
- fail(
693
- new StarciteTailGapError(
694
- `Tail gap reported for session '${session.id}'`,
695
- { sessionId: session.id }
696
- )
697
- );
698
- });
699
667
  const stopEvents = session.on(
700
668
  "event",
701
669
  (event) => {
670
+ resetIdleTimer();
671
+ if (cursorSeq !== void 0 && event.seq < cursorSeq) {
672
+ return;
673
+ }
702
674
  if (limit !== void 0 && emitted >= limit) {
703
675
  finish();
704
676
  return;
@@ -711,9 +683,7 @@ async function emitTailEvents({
711
683
  emitted += 1;
712
684
  if (limit !== void 0 && emitted >= limit) {
713
685
  finish();
714
- return;
715
686
  }
716
- resetIdleTimer();
717
687
  },
718
688
  { agent }
719
689
  );
@@ -815,7 +785,7 @@ function buildProgram(deps = {}) {
815
785
  const parsed = parseGlobalArgs(normalizeArgv(argv, context));
816
786
  const command = parsed.rest[0];
817
787
  if (parsed.version) {
818
- output.writeOut(`${"0.0.12"}
788
+ output.writeOut(`${"0.0.14"}
819
789
  `);
820
790
  if (throwOnEarlyExit) {
821
791
  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 try {\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 } finally {\n session.disconnect();\n }\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 type { StarciteSession } 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 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 } finally {\n session.disconnect();\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 (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 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 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.14",
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.14",
46
46
  "arg": "^5.0.2",
47
47
  "conf": "^15.1.0",
48
48
  "toml": "^3.0.0",