replicas-engine 0.1.415 → 0.1.417

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.
Files changed (2) hide show
  1. package/dist/src/index.js +38 -7
  2. package/package.json +1 -1
package/dist/src/index.js CHANGED
@@ -490,7 +490,7 @@ var WORKSPACE_SIZES = ["small", "large"];
490
490
  var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
491
491
 
492
492
  // ../shared/src/e2b.ts
493
- var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-09-v4";
493
+ var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-07-09-v6";
494
494
 
495
495
  // ../shared/src/runtime-env.ts
496
496
  function parsePosixEnvFile(content) {
@@ -2629,6 +2629,34 @@ function applyCodexAspTranscriptDelta(current, delta) {
2629
2629
  turns
2630
2630
  };
2631
2631
  }
2632
+ function chatHistoryPageParamsFromQuery(query2) {
2633
+ const parse = (value) => {
2634
+ if (value === void 0) return void 0;
2635
+ const parsed = Number.parseInt(value, 10);
2636
+ return Number.isInteger(parsed) && parsed >= 0 ? parsed : void 0;
2637
+ };
2638
+ return {
2639
+ limit: parse(query2.limit),
2640
+ beforeEvent: parse(query2.beforeEvent),
2641
+ beforeTurn: parse(query2.beforeTurn)
2642
+ };
2643
+ }
2644
+ function paginateChatHistory(full, params) {
2645
+ if (params.limit === void 0) return full;
2646
+ const eventsEnd = Math.min(params.beforeEvent ?? full.events.length, full.events.length);
2647
+ const eventsStartIndex = Math.max(0, eventsEnd - params.limit);
2648
+ const turns = full.codexAspTranscript?.turns;
2649
+ const turnsEnd = turns ? Math.min(params.beforeTurn ?? turns.length, turns.length) : 0;
2650
+ const turnsStartIndex = Math.max(0, turnsEnd - params.limit);
2651
+ const codexAspTranscript = full.codexAspTranscript && turns && (turnsStartIndex > 0 || turnsEnd < turns.length) ? { ...full.codexAspTranscript, turns: turns.slice(turnsStartIndex, turnsEnd) } : full.codexAspTranscript;
2652
+ return {
2653
+ ...full,
2654
+ events: full.events.slice(eventsStartIndex, eventsEnd),
2655
+ eventsStartIndex,
2656
+ codexAspTranscript,
2657
+ ...full.codexAspTranscript ? { turnsStartIndex } : {}
2658
+ };
2659
+ }
2632
2660
 
2633
2661
  // ../shared/src/routes/codex.ts
2634
2662
  var CODEX_AUTH_ENV_KEYS = [
@@ -8225,7 +8253,7 @@ var AspClient = class {
8225
8253
  // src/managers/codex-asp/app-server-process.ts
8226
8254
  var DEFAULT_CODEX_BINARY = "codex";
8227
8255
  var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
8228
- var ENGINE_PACKAGE_VERSION = "0.1.415";
8256
+ var ENGINE_PACKAGE_VERSION = "0.1.417";
8229
8257
  var INITIALIZE_METHOD = "initialize";
8230
8258
  var INITIALIZED_NOTIFICATION = "initialized";
8231
8259
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -8485,7 +8513,7 @@ var SKILLS_LIST_METHOD = "skills/list";
8485
8513
  var MAX_CODEX_ASP_TRANSCRIPT_OUTPUT_CHARS = DEFAULT_HOOK_OUTPUT_PREVIEW_CHARS;
8486
8514
  function codexApprovalPolicyOverrides() {
8487
8515
  if (!ENGINE_ENV.REPLICAS_DISABLE_GH_PR_MERGE) {
8488
- return {};
8516
+ return { approvalPolicy: "never" };
8489
8517
  }
8490
8518
  return {
8491
8519
  approvalPolicy: "untrusted",
@@ -12599,7 +12627,7 @@ var ChatService = class {
12599
12627
  await rm(join21(HISTORY_DIR_BY_PROVIDER[persisted.provider], `${persisted.id}.jsonl`), { force: true });
12600
12628
  await rm(this.senderFilePath(persisted.id), { force: true });
12601
12629
  }
12602
- async getChatHistory(chatId) {
12630
+ async getChatHistory(chatId, page = {}) {
12603
12631
  const chat = this.requireChat(chatId);
12604
12632
  const [history, senders] = await Promise.all([
12605
12633
  chat.provider.getHistory(),
@@ -12612,13 +12640,13 @@ var ChatService = class {
12612
12640
  }
12613
12641
  const acceptedEvents = [...chat.acceptedUserEvents.entries()].filter(([messageId]) => messageId === chat.activeMessageId || !chat.hasActiveTurn && chat.pendingMessageIds[0] === messageId).map(([, acceptedEvent]) => acceptedEvent).filter((acceptedEvent) => !acceptedEventInCodexTranscript(acceptedEvent, history.codexAspTranscript) && !history.events.some((event) => isSameAcceptedUserEvent(event, acceptedEvent)));
12614
12642
  const events = [...history.events, ...acceptedEvents].sort((a, b) => getEventTimestampMs(a) - getEventTimestampMs(b));
12615
- return {
12643
+ return paginateChatHistory({
12616
12644
  thread_id: history.thread_id,
12617
12645
  events,
12618
12646
  codexAspTranscript: history.codexAspTranscript ?? null,
12619
12647
  goal: history.goal ?? chat.provider.getGoal?.() ?? null,
12620
12648
  senders
12621
- };
12649
+ }, page);
12622
12650
  }
12623
12651
  getProcessingCount() {
12624
12652
  let count = 0;
@@ -13795,7 +13823,10 @@ function createV1Routes(deps) {
13795
13823
  });
13796
13824
  app2.get("/chats/:chatId/history", async (c) => {
13797
13825
  try {
13798
- const history = await deps.chatService.getChatHistory(c.req.param("chatId"));
13826
+ const history = await deps.chatService.getChatHistory(
13827
+ c.req.param("chatId"),
13828
+ chatHistoryPageParamsFromQuery(c.req.query())
13829
+ );
13799
13830
  return c.json(history);
13800
13831
  } catch (error) {
13801
13832
  if (error instanceof ChatNotFoundError) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.415",
3
+ "version": "0.1.417",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",