ohbaby-cli 0.1.1 → 0.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,aAAa,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,UAAU,YAAa,SAAQ,gBAAgB;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAkCD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAmF/C"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,aAAa,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,UAAU,YAAa,SAAQ,gBAAgB;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAkCD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAoF/C"}
@@ -52,6 +52,7 @@ export interface CliCommandRuntime {
52
52
  readonly readDaemonStatus: () => Promise<CliDaemonState | undefined>;
53
53
  readonly readStdin: () => Promise<string>;
54
54
  readonly renderTerminalUi: (options: {
55
+ readonly clearOnStart?: boolean;
55
56
  readonly client: CoreAPI;
56
57
  readonly subscribeEvents: (handler: UiEventHandler) => UiUnsubscribe;
57
58
  }) => TerminalUiLifecycle;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/types.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3582,7 +3582,6 @@ function applyTuiEvent(state, event) {
3582
3582
  );
3583
3583
  case "session.updated":
3584
3584
  return rebuildFromCollections(state, {
3585
- activeSessionId: state.activeSessionId ?? event.session.id,
3586
3585
  sessions: upsertById(state.sessions, event.session)
3587
3586
  });
3588
3587
  case "message.appended": {
@@ -3712,7 +3711,13 @@ function applyTuiEvent(state, event) {
3712
3711
  );
3713
3712
  }
3714
3713
  case "command.result.delivered": {
3715
- const next = clearCommandRuntime(state, event.commandRunId);
3714
+ const selectedSessionId = selectedSessionIdFromCommandAction(event.action);
3715
+ const next = selectedSessionId === void 0 ? clearCommandRuntime(state, event.commandRunId) : clearCommandRuntime(
3716
+ rebuildFromCollections(state, {
3717
+ activeSessionId: selectedSessionId
3718
+ }),
3719
+ event.commandRunId
3720
+ );
3716
3721
  if (!event.output || !shouldDisplayCommandOutput(event.output)) {
3717
3722
  return next;
3718
3723
  }
@@ -3766,6 +3771,13 @@ function applyTuiEvent(state, event) {
3766
3771
  }
3767
3772
  return state;
3768
3773
  }
3774
+ function selectedSessionIdFromCommandAction(action) {
3775
+ if (action?.kind !== "session.selected" || !isRecord2(action.data)) {
3776
+ return void 0;
3777
+ }
3778
+ const choiceId = action.data.choiceId;
3779
+ return typeof choiceId === "string" && choiceId.length > 0 ? choiceId : void 0;
3780
+ }
3769
3781
  function setCommandCatalog(state, catalog) {
3770
3782
  return {
3771
3783
  ...state,
@@ -4545,6 +4557,7 @@ var NEW_SESSION_CLEAR_SEQUENCE = "\x1B[2J\x1B[3J\x1B[H";
4545
4557
  var ESC_INTERRUPT_WINDOW_MS = 1500;
4546
4558
  var ESC_INTERRUPT_HINT = "Press Esc again to interrupt";
4547
4559
  function OhbabyTerminalApp({
4560
+ clearOnStart = false,
4548
4561
  client,
4549
4562
  subscribeEvents
4550
4563
  }) {
@@ -4553,6 +4566,8 @@ function OhbabyTerminalApp({
4553
4566
  const catalogRequestSequenceRef = useRef(0);
4554
4567
  const contextRefreshSequenceRef = useRef(0);
4555
4568
  const contextNoticeSequenceRef = useRef(0);
4569
+ const snapshotRefreshSequenceRef = useRef(0);
4570
+ const didClearOnStartRef = useRef(false);
4556
4571
  const disposedRef = useRef(false);
4557
4572
  const [screenGeneration, setScreenGeneration] = useState(0);
4558
4573
  const [commandPanel, setCommandPanel] = useState(
@@ -4564,6 +4579,10 @@ function OhbabyTerminalApp({
4564
4579
  const store = storeRef.current;
4565
4580
  const { exit } = useApp();
4566
4581
  const { write: writeStdout } = useStdout();
4582
+ if (clearOnStart && !didClearOnStartRef.current) {
4583
+ writeStdout(NEW_SESSION_CLEAR_SEQUENCE);
4584
+ didClearOnStartRef.current = true;
4585
+ }
4567
4586
  const activeSessionId = useTuiStoreSelector(
4568
4587
  store,
4569
4588
  (state) => state.activeSessionId
@@ -4846,11 +4865,24 @@ function OhbabyTerminalApp({
4846
4865
  return;
4847
4866
  }
4848
4867
  eventDispatcher.dispatch(tuiEvent);
4849
- if (isNewSessionSelectionEvent(tuiEvent)) {
4868
+ const isNewSessionSelection = isNewSessionSelectionEvent(tuiEvent);
4869
+ if (isNewSessionSelection) {
4870
+ snapshotRefreshSequenceRef.current += 1;
4850
4871
  writeStdout(NEW_SESSION_CLEAR_SEQUENCE);
4851
4872
  setScreenGeneration((current) => current + 1);
4852
4873
  setActiveCommandPanel(null);
4853
4874
  }
4875
+ const selectedExistingSessionId = selectedExistingSessionIdFromEvent(tuiEvent);
4876
+ if (selectedExistingSessionId !== void 0) {
4877
+ const requestSequence2 = snapshotRefreshSequenceRef.current + 1;
4878
+ snapshotRefreshSequenceRef.current = requestSequence2;
4879
+ void client.getSnapshot().then((snapshot) => {
4880
+ if (disposedRef.current || requestSequence2 !== snapshotRefreshSequenceRef.current || snapshot.activeSessionId !== selectedExistingSessionId) {
4881
+ return;
4882
+ }
4883
+ store.replaceSnapshot(snapshot);
4884
+ }).catch(() => void 0);
4885
+ }
4854
4886
  if (tuiEvent.type === "command.result.delivered" && tuiEvent.action?.kind === "app.exit") {
4855
4887
  exit();
4856
4888
  }
@@ -4858,12 +4890,14 @@ function OhbabyTerminalApp({
4858
4890
  void loadCatalog().catch(() => void 0);
4859
4891
  }
4860
4892
  });
4893
+ const requestSequence = snapshotRefreshSequenceRef.current + 1;
4894
+ snapshotRefreshSequenceRef.current = requestSequence;
4861
4895
  void client.getSnapshot().then((snapshot) => {
4862
- if (!disposedRef.current) {
4896
+ if (!disposedRef.current && requestSequence === snapshotRefreshSequenceRef.current) {
4863
4897
  store.replaceSnapshot(snapshot);
4864
4898
  }
4865
4899
  }).catch((caught) => {
4866
- if (!disposedRef.current) {
4900
+ if (!disposedRef.current && requestSequence === snapshotRefreshSequenceRef.current) {
4867
4901
  store.dispatch({
4868
4902
  status: {
4869
4903
  kind: "error",
@@ -5044,6 +5078,17 @@ function isNewSessionSelectionEvent(tuiEvent) {
5044
5078
  const data = tuiEvent.action.data;
5045
5079
  return isStringRecord(data) && data.source === "new";
5046
5080
  }
5081
+ function selectedExistingSessionIdFromEvent(tuiEvent) {
5082
+ if (tuiEvent.type !== "command.result.delivered" || tuiEvent.action?.kind !== "session.selected") {
5083
+ return void 0;
5084
+ }
5085
+ const data = tuiEvent.action.data;
5086
+ if (!isStringRecord(data) || data.source === "new") {
5087
+ return void 0;
5088
+ }
5089
+ const choiceId = data.choiceId;
5090
+ return typeof choiceId === "string" && choiceId.length > 0 ? choiceId : void 0;
5091
+ }
5047
5092
  function isStringRecord(value) {
5048
5093
  return typeof value === "object" && value !== null && !Array.isArray(value);
5049
5094
  }
@@ -5202,6 +5247,7 @@ function renderTerminalUi(options) {
5202
5247
  /* @__PURE__ */ jsx(
5203
5248
  OhbabyTerminalApp,
5204
5249
  {
5250
+ clearOnStart: options.clearOnStart,
5205
5251
  client: options.client,
5206
5252
  subscribeEvents: options.subscribeEvents
5207
5253
  }