@meistrari/remy-cli 1.14.0 → 1.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -42,7 +42,7 @@ Use `Tab` while writing the request to complete a local file or directory path.
42
42
 
43
43
  ### Resume or follow up
44
44
 
45
- Every terminal follow-up is appended as an explicit **Steer**, so it targets the work currently in progress. Queuing a message for a later turn (**Next**) is Web-only for now.
45
+ Every terminal follow-up is appended as an explicit **Steer**, so it targets the work currently in progress. Queuing a message for a later turn (**Next**) is Web-only for now. Remy can replay sessions containing queued-message dispatch, withdrawal, and failure events. Messages withdrawn or failed before reaching Remy show an activity notice; an active submission ends as cancelled or failed instead of waiting for a turn that never started.
46
46
 
47
47
  Use Up/Down to select a session in the dashboard, Left/Right to load the adjacent page, and `Enter` to open it. Remy loads the complete retained conversation before showing the session view, then streams new activity as it arrives. Press `s` to search the loaded page by session ID, title, or number; `Enter` keeps the search active and `Esc` clears it. Press `f` to filter sessions by lifecycle status or `a` to filter by author. Both pickers use checkboxes: Up/Down or `j`/`k` moves, `Space` toggles, Right/`l` checks, Left/`h` clears, `G` and `gg` jump to the last and first option, and `Enter` applies every checked value. An empty picker means all values. Press `s` inside either picker to fuzzy-search its options; `Enter` keeps the matching list and `Esc` cancels the search. Press `Esc` outside search to discard staged checkbox changes. Filters apply to the complete remote result set and reset pagination to its first page. After the dashboard list or repository-review list has focus, Vim keys work too: `j`/`k` move, `h`/`l` go to the previous/next dashboard page (or clear/mark a repository), `G` goes to the last row, and `gg` goes to the first row. Press `Shift+L` in the dashboard to start a logout confirmation. In any message composer, plain `Enter` and `Shift+Enter` submit; `Option+Enter` on macOS (`Alt+Enter` elsewhere) inserts a newline. `Ctrl+J` also inserts a newline for terminals that do not report the Option/Alt modifier. The conversation header keeps the numbered session title on its first line and repository, pull request, work state, elapsed time, and connection state on its second line. The header also keeps the last provider-reported context observation across reconnects, such as `Context 50% left · 62,000 used`; when the provider does not report a context window, it shows only used tokens. This is an observation, not a live occupancy guarantee or billing total.
48
48
 
package/dist/remy.js CHANGED
@@ -34069,6 +34069,10 @@ var sessionMessageTurnAssociatedEventSchema = exports_external2.object({
34069
34069
  type: exports_external2.literal("session.message.turn-associated"),
34070
34070
  payload: exports_external2.object({ messageId: exports_external2.string().min(1), commandId: exports_external2.string().min(1), turnId: exports_external2.string().min(1) }).passthrough()
34071
34071
  }).passthrough();
34072
+ var sessionMessageDispatchEventSchema = exports_external2.object({
34073
+ type: exports_external2.enum(["session.message.dispatched", "session.message.withdrawn", "session.message.failed"]),
34074
+ payload: exports_external2.object({ messageId: exports_external2.string().min(1), commandId: exports_external2.string().min(1) }).passthrough()
34075
+ }).passthrough();
34072
34076
  var sessionWorkspaceGitInitializedEventSchema = exports_external2.object({
34073
34077
  type: exports_external2.literal("session.workspace.git.initialized"),
34074
34078
  payload: exports_external2.object({
@@ -34205,6 +34209,8 @@ function sessionTurnOutcome({ state, sessionMessageId }) {
34205
34209
  const turn = state.messageTurns[sessionMessageId];
34206
34210
  if (!turn)
34207
34211
  return { status: "unassociated" };
34212
+ if (turn.turnId === null)
34213
+ return { status: "ended", turnId: null, outcome: turn.outcome };
34208
34214
  if (turn.outcome)
34209
34215
  return { status: "ended", turnId: turn.turnId, outcome: turn.outcome };
34210
34216
  return { status: "pending", turnId: turn.turnId };
@@ -34228,10 +34234,11 @@ function projectRetainedEvent({
34228
34234
  }) {
34229
34235
  const messageCreated = sessionMessageCreatedEventSchema.safeParse(event);
34230
34236
  const turnAssociated = sessionMessageTurnAssociatedEventSchema.safeParse(event);
34237
+ const messageDispatch = sessionMessageDispatchEventSchema.safeParse(event);
34231
34238
  const workspaceGitInitialized = sessionWorkspaceGitInitializedEventSchema.safeParse(event);
34232
34239
  const workspaceGitRevision = sessionWorkspaceGitRevisionEventSchema.safeParse(event);
34233
34240
  const turnEnded = agentTurnEndedEventSchema.safeParse(event);
34234
- let projected = messageCreated.success ? projectSessionMessageCreated({ state, event: messageCreated.data, occurredAt }) : turnAssociated.success ? projectSessionMessageTurnAssociated({ state, event: turnAssociated.data }) : workspaceGitInitialized.success ? projectSessionWorkspaceGitInitialized({ state, event: workspaceGitInitialized.data, occurredAt, retainedEventId }) : workspaceGitRevision.success ? projectSessionWorkspaceGitRevision({ state, event: workspaceGitRevision.data, occurredAt, retainedEventId }) : turnEnded.success ? projectAgentTurnEnded({ state, event: turnEnded.data, occurredAt, retainedEventId }) : projectDurableAgentEvent({ state, event, occurredAt, retainedEventId });
34241
+ let projected = messageCreated.success ? projectSessionMessageCreated({ state, event: messageCreated.data, occurredAt }) : turnAssociated.success ? projectSessionMessageTurnAssociated({ state, event: turnAssociated.data }) : messageDispatch.success ? projectSessionMessageDispatch({ state, event: messageDispatch.data, occurredAt, retainedEventId }) : workspaceGitInitialized.success ? projectSessionWorkspaceGitInitialized({ state, event: workspaceGitInitialized.data, occurredAt, retainedEventId }) : workspaceGitRevision.success ? projectSessionWorkspaceGitRevision({ state, event: workspaceGitRevision.data, occurredAt, retainedEventId }) : turnEnded.success ? projectAgentTurnEnded({ state, event: turnEnded.data, occurredAt, retainedEventId }) : projectDurableAgentEvent({ state, event, occurredAt, retainedEventId });
34235
34242
  projected = recordAgentLineageEvent({ state: projected, event, retainedEventId });
34236
34243
  if (artifact) {
34237
34244
  const publication = artifact.kind === "file" ? { artifactId: artifact.artifact_id, kind: artifact.kind, title: artifact.filename } : { artifactId: artifact.artifact_id, kind: artifact.kind, title: artifact.title, url: artifact.url };
@@ -34319,6 +34326,24 @@ function projectSessionMessageTurnAssociated({ state, event }) {
34319
34326
  };
34320
34327
  return { ...state, messageTurns: { ...state.messageTurns, [event.payload.messageId]: nextTurn } };
34321
34328
  }
34329
+ function projectSessionMessageDispatch({ state, event, occurredAt, retainedEventId }) {
34330
+ if (event.type === "session.message.dispatched")
34331
+ return state;
34332
+ const withdrawn = event.type === "session.message.withdrawn";
34333
+ const outcome = withdrawn ? "cancelled" : "failed";
34334
+ return appendActivity({
34335
+ state: {
34336
+ ...state,
34337
+ messageTurns: {
34338
+ ...state.messageTurns,
34339
+ [event.payload.messageId]: { commandId: event.payload.commandId, turnId: null, outcome }
34340
+ }
34341
+ },
34342
+ occurredAt,
34343
+ retainedEventId,
34344
+ card: withdrawn ? { kind: "lifecycle", weight: "signal", title: "Message withdrawn", summary: "Message was withdrawn before reaching Remy." } : { kind: "failure", weight: "signal", title: "Message failed", summary: "Message failed before reaching Remy." }
34345
+ });
34346
+ }
34322
34347
  function projectSessionWorkspaceGitInitialized({ state, event, occurredAt, retainedEventId }) {
34323
34348
  return appendActivity({
34324
34349
  state,
@@ -39405,7 +39430,7 @@ var compactMarkRows = 9;
39405
39430
  var compactMinWidth = 48;
39406
39431
  var compactMinHeight = 20;
39407
39432
  var markBrightnessGain = 4.2;
39408
- var remyCliVersion = "1.14.0";
39433
+ var remyCliVersion = "1.14.1";
39409
39434
  async function showRemySplash({
39410
39435
  createRenderer = createRemyRenderer,
39411
39436
  durationMs = splashDurationMs,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meistrari/remy-cli",
3
- "version": "1.14.0",
3
+ "version": "1.14.1",
4
4
  "description": "Remy, the Coding Agent terminal client.",
5
5
  "type": "module",
6
6
  "bin": {