open-research 0.1.12 → 0.1.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/dist/cli.js +282 -178
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -7,7 +7,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
7
7
|
});
|
|
8
8
|
|
|
9
9
|
// src/cli.ts
|
|
10
|
-
import
|
|
10
|
+
import React5 from "react";
|
|
11
11
|
import path21 from "path";
|
|
12
12
|
import { Command } from "commander";
|
|
13
13
|
import { render } from "ink";
|
|
@@ -811,7 +811,7 @@ function formatDateTime(value) {
|
|
|
811
811
|
}
|
|
812
812
|
|
|
813
813
|
// src/lib/cli/version.ts
|
|
814
|
-
var PACKAGE_VERSION = "0.1.
|
|
814
|
+
var PACKAGE_VERSION = "0.1.14";
|
|
815
815
|
function getPackageVersion() {
|
|
816
816
|
return PACKAGE_VERSION;
|
|
817
817
|
}
|
|
@@ -865,11 +865,11 @@ import {
|
|
|
865
865
|
startTransition,
|
|
866
866
|
useDeferredValue,
|
|
867
867
|
useEffect as useEffect2,
|
|
868
|
-
useMemo as
|
|
868
|
+
useMemo as useMemo3,
|
|
869
869
|
useRef,
|
|
870
|
-
useState as
|
|
870
|
+
useState as useState4
|
|
871
871
|
} from "react";
|
|
872
|
-
import { Box as
|
|
872
|
+
import { Box as Box5, Text as Text5, useApp, useInput as useInput4 } from "ink";
|
|
873
873
|
|
|
874
874
|
// src/tui/text-input.tsx
|
|
875
875
|
import { useState, useEffect } from "react";
|
|
@@ -5634,6 +5634,104 @@ function ConfigScreen({ items, onUpdate, onClose }) {
|
|
|
5634
5634
|
] });
|
|
5635
5635
|
}
|
|
5636
5636
|
|
|
5637
|
+
// src/tui/session-picker.tsx
|
|
5638
|
+
import { useMemo as useMemo2, useState as useState3 } from "react";
|
|
5639
|
+
import { Box as Box3, Text as Text3, useInput as useInput3 } from "ink";
|
|
5640
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
5641
|
+
function timeAgo(dateStr) {
|
|
5642
|
+
const seconds = Math.floor((Date.now() - new Date(dateStr).getTime()) / 1e3);
|
|
5643
|
+
if (seconds < 60) return `${seconds}s ago`;
|
|
5644
|
+
const minutes = Math.floor(seconds / 60);
|
|
5645
|
+
if (minutes < 60) return `${minutes}m ago`;
|
|
5646
|
+
const hours = Math.floor(minutes / 60);
|
|
5647
|
+
if (hours < 24) return `${hours}h ago`;
|
|
5648
|
+
const days = Math.floor(hours / 24);
|
|
5649
|
+
if (days < 30) return `${days}d ago`;
|
|
5650
|
+
return new Date(dateStr).toLocaleDateString();
|
|
5651
|
+
}
|
|
5652
|
+
function SessionPicker({ sessions, onSelect, onCancel }) {
|
|
5653
|
+
const [filter, setFilter] = useState3("");
|
|
5654
|
+
const [selectedIndex, setSelectedIndex] = useState3(0);
|
|
5655
|
+
const filtered = useMemo2(() => {
|
|
5656
|
+
if (!filter) return sessions;
|
|
5657
|
+
const search = filter.toLowerCase();
|
|
5658
|
+
return sessions.filter(
|
|
5659
|
+
(s) => s.preview.toLowerCase().includes(search) || s.id.toLowerCase().includes(search)
|
|
5660
|
+
);
|
|
5661
|
+
}, [sessions, filter]);
|
|
5662
|
+
const clampedIndex = Math.min(selectedIndex, Math.max(0, filtered.length - 1));
|
|
5663
|
+
useInput3((input2, key) => {
|
|
5664
|
+
if (key.escape) {
|
|
5665
|
+
onCancel();
|
|
5666
|
+
return;
|
|
5667
|
+
}
|
|
5668
|
+
if (key.upArrow) {
|
|
5669
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
5670
|
+
return;
|
|
5671
|
+
}
|
|
5672
|
+
if (key.downArrow) {
|
|
5673
|
+
setSelectedIndex((i) => Math.min(filtered.length - 1, i + 1));
|
|
5674
|
+
return;
|
|
5675
|
+
}
|
|
5676
|
+
if (key.return && filtered.length > 0) {
|
|
5677
|
+
onSelect(filtered[clampedIndex]);
|
|
5678
|
+
return;
|
|
5679
|
+
}
|
|
5680
|
+
if (key.backspace || key.delete) {
|
|
5681
|
+
setFilter((f) => f.slice(0, -1));
|
|
5682
|
+
setSelectedIndex(0);
|
|
5683
|
+
return;
|
|
5684
|
+
}
|
|
5685
|
+
if (key.ctrl && input2 === "u") {
|
|
5686
|
+
setFilter("");
|
|
5687
|
+
setSelectedIndex(0);
|
|
5688
|
+
return;
|
|
5689
|
+
}
|
|
5690
|
+
if (!key.ctrl && !key.meta && !key.tab && input2.length === 1 && input2 >= " ") {
|
|
5691
|
+
setFilter((f) => f + input2);
|
|
5692
|
+
setSelectedIndex(0);
|
|
5693
|
+
}
|
|
5694
|
+
});
|
|
5695
|
+
return /* @__PURE__ */ jsxs2(Box3, { flexDirection: "column", paddingX: 1, paddingY: 1, children: [
|
|
5696
|
+
/* @__PURE__ */ jsx3(Text3, { bold: true, color: "cyan", children: "Resume Session" }),
|
|
5697
|
+
/* @__PURE__ */ jsx3(
|
|
5698
|
+
Box3,
|
|
5699
|
+
{
|
|
5700
|
+
borderStyle: "single",
|
|
5701
|
+
borderColor: filter ? "cyan" : "gray",
|
|
5702
|
+
paddingX: 1,
|
|
5703
|
+
marginTop: 1,
|
|
5704
|
+
marginBottom: 1,
|
|
5705
|
+
children: /* @__PURE__ */ jsx3(Text3, { color: "gray", children: filter ? filter : "Type to search..." })
|
|
5706
|
+
}
|
|
5707
|
+
),
|
|
5708
|
+
filtered.length === 0 ? /* @__PURE__ */ jsx3(Text3, { color: "gray", children: filter ? "No matching sessions." : "No sessions found." }) : /* @__PURE__ */ jsx3(Box3, { flexDirection: "column", children: filtered.slice(0, 15).map((session, idx) => {
|
|
5709
|
+
const isSelected = idx === clampedIndex;
|
|
5710
|
+
const indicator = isSelected ? "\u203A" : " ";
|
|
5711
|
+
const preview = session.preview || "(empty session)";
|
|
5712
|
+
const age = timeAgo(session.lastActivity);
|
|
5713
|
+
const turns = `${session.turnCount} turn${session.turnCount !== 1 ? "s" : ""}`;
|
|
5714
|
+
return /* @__PURE__ */ jsxs2(Box3, { flexDirection: "column", marginBottom: isSelected ? 1 : 0, children: [
|
|
5715
|
+
/* @__PURE__ */ jsxs2(Box3, { children: [
|
|
5716
|
+
/* @__PURE__ */ jsxs2(Text3, { color: isSelected ? "cyan" : "gray", children: [
|
|
5717
|
+
indicator,
|
|
5718
|
+
" "
|
|
5719
|
+
] }),
|
|
5720
|
+
/* @__PURE__ */ jsx3(Text3, { color: isSelected ? "white" : "gray", bold: isSelected, children: preview.length > 70 ? preview.slice(0, 70) + "\u2026" : preview })
|
|
5721
|
+
] }),
|
|
5722
|
+
isSelected && /* @__PURE__ */ jsx3(Box3, { marginLeft: 2, children: /* @__PURE__ */ jsxs2(Text3, { color: "gray", dimColor: true, children: [
|
|
5723
|
+
age,
|
|
5724
|
+
" \xB7 ",
|
|
5725
|
+
turns,
|
|
5726
|
+
" \xB7 ",
|
|
5727
|
+
session.id.slice(0, 8)
|
|
5728
|
+
] }) })
|
|
5729
|
+
] }, session.id);
|
|
5730
|
+
}) }),
|
|
5731
|
+
/* @__PURE__ */ jsx3(Box3, { marginTop: 1, children: /* @__PURE__ */ jsx3(Text3, { color: "gray", dimColor: true, children: "\u2191\u2193 navigate \xB7 Enter select \xB7 Type to search \xB7 Esc cancel" }) })
|
|
5732
|
+
] });
|
|
5733
|
+
}
|
|
5734
|
+
|
|
5637
5735
|
// src/lib/cli/update-check.ts
|
|
5638
5736
|
import fs18 from "fs/promises";
|
|
5639
5737
|
import path17 from "path";
|
|
@@ -6262,7 +6360,7 @@ function truncate2(value, max = 96) {
|
|
|
6262
6360
|
}
|
|
6263
6361
|
|
|
6264
6362
|
// src/tui/components.tsx
|
|
6265
|
-
import { Box as
|
|
6363
|
+
import { Box as Box4, Text as Text4 } from "ink";
|
|
6266
6364
|
|
|
6267
6365
|
// src/tui/markdown.ts
|
|
6268
6366
|
function renderMarkdown(text) {
|
|
@@ -6363,7 +6461,7 @@ function renderInline(text) {
|
|
|
6363
6461
|
}
|
|
6364
6462
|
|
|
6365
6463
|
// src/tui/components.tsx
|
|
6366
|
-
import { jsx as
|
|
6464
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
6367
6465
|
var GUTTER = {
|
|
6368
6466
|
user: "\u203A",
|
|
6369
6467
|
agent: "\u25AA",
|
|
@@ -6376,45 +6474,45 @@ var GUTTER = {
|
|
|
6376
6474
|
active: "\u25CF"
|
|
6377
6475
|
};
|
|
6378
6476
|
function UserMessage({ text }) {
|
|
6379
|
-
return /* @__PURE__ */
|
|
6380
|
-
/* @__PURE__ */
|
|
6381
|
-
/* @__PURE__ */
|
|
6477
|
+
return /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", marginBottom: 1, children: [
|
|
6478
|
+
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6479
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "cyan", bold: true, children: [
|
|
6382
6480
|
GUTTER.user,
|
|
6383
6481
|
" "
|
|
6384
6482
|
] }),
|
|
6385
|
-
/* @__PURE__ */
|
|
6483
|
+
/* @__PURE__ */ jsx4(Text4, { bold: true, color: "cyan", children: "you" })
|
|
6386
6484
|
] }),
|
|
6387
|
-
/* @__PURE__ */
|
|
6485
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, children: /* @__PURE__ */ jsx4(Text4, { children: text }) })
|
|
6388
6486
|
] });
|
|
6389
6487
|
}
|
|
6390
6488
|
function AgentMessage({ text }) {
|
|
6391
6489
|
const rendered = renderMarkdown(text);
|
|
6392
|
-
return /* @__PURE__ */
|
|
6393
|
-
/* @__PURE__ */
|
|
6394
|
-
/* @__PURE__ */
|
|
6490
|
+
return /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", marginBottom: 1, children: [
|
|
6491
|
+
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6492
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "green", bold: true, children: [
|
|
6395
6493
|
GUTTER.agent,
|
|
6396
6494
|
" "
|
|
6397
6495
|
] }),
|
|
6398
|
-
/* @__PURE__ */
|
|
6496
|
+
/* @__PURE__ */ jsx4(Text4, { bold: true, color: "green", children: "agent" })
|
|
6399
6497
|
] }),
|
|
6400
|
-
/* @__PURE__ */
|
|
6498
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, children: /* @__PURE__ */ jsx4(Text4, { children: rendered }) })
|
|
6401
6499
|
] });
|
|
6402
6500
|
}
|
|
6403
6501
|
function SystemMessage({ text }) {
|
|
6404
6502
|
if (text.trimStart().startsWith("\u2713") || text.trimStart().startsWith("\u2717")) {
|
|
6405
|
-
return /* @__PURE__ */
|
|
6503
|
+
return /* @__PURE__ */ jsx4(Box4, { marginLeft: 2, children: /* @__PURE__ */ jsx4(Text4, { color: "gray", dimColor: true, children: text }) });
|
|
6406
6504
|
}
|
|
6407
6505
|
if (text.includes("compacted") || text.includes("Context")) {
|
|
6408
|
-
return /* @__PURE__ */
|
|
6506
|
+
return /* @__PURE__ */ jsx4(Box4, { marginLeft: 2, children: /* @__PURE__ */ jsxs3(Text4, { color: "yellow", dimColor: true, children: [
|
|
6409
6507
|
GUTTER.system,
|
|
6410
6508
|
" ",
|
|
6411
6509
|
text.trim()
|
|
6412
6510
|
] }) });
|
|
6413
6511
|
}
|
|
6414
6512
|
if (text.trimStart().startsWith(">")) {
|
|
6415
|
-
return /* @__PURE__ */
|
|
6513
|
+
return /* @__PURE__ */ jsx4(Box4, { children: /* @__PURE__ */ jsx4(Text4, { color: "gray", dimColor: true, children: text }) });
|
|
6416
6514
|
}
|
|
6417
|
-
return /* @__PURE__ */
|
|
6515
|
+
return /* @__PURE__ */ jsx4(Box4, { children: /* @__PURE__ */ jsxs3(Text4, { color: "gray", children: [
|
|
6418
6516
|
GUTTER.system,
|
|
6419
6517
|
" ",
|
|
6420
6518
|
text.trim()
|
|
@@ -6427,18 +6525,18 @@ function PromptPrefix({
|
|
|
6427
6525
|
mode
|
|
6428
6526
|
}) {
|
|
6429
6527
|
if (hasQuestion) {
|
|
6430
|
-
return /* @__PURE__ */
|
|
6528
|
+
return /* @__PURE__ */ jsxs3(Text4, { color: "yellow", children: [
|
|
6431
6529
|
GUTTER.question,
|
|
6432
6530
|
" "
|
|
6433
6531
|
] });
|
|
6434
6532
|
}
|
|
6435
6533
|
if (busy) {
|
|
6436
|
-
return /* @__PURE__ */
|
|
6534
|
+
return /* @__PURE__ */ jsxs3(Text4, { color: "yellow", children: [
|
|
6437
6535
|
frame,
|
|
6438
6536
|
" "
|
|
6439
6537
|
] });
|
|
6440
6538
|
}
|
|
6441
|
-
return /* @__PURE__ */
|
|
6539
|
+
return /* @__PURE__ */ jsxs3(Text4, { color: "cyan", children: [
|
|
6442
6540
|
GUTTER.user,
|
|
6443
6541
|
" "
|
|
6444
6542
|
] });
|
|
@@ -6447,8 +6545,8 @@ function PendingUpdateCard({
|
|
|
6447
6545
|
count,
|
|
6448
6546
|
summary
|
|
6449
6547
|
}) {
|
|
6450
|
-
return /* @__PURE__ */
|
|
6451
|
-
|
|
6548
|
+
return /* @__PURE__ */ jsxs3(
|
|
6549
|
+
Box4,
|
|
6452
6550
|
{
|
|
6453
6551
|
borderStyle: "single",
|
|
6454
6552
|
borderColor: "magenta",
|
|
@@ -6456,23 +6554,23 @@ function PendingUpdateCard({
|
|
|
6456
6554
|
marginBottom: 1,
|
|
6457
6555
|
flexDirection: "column",
|
|
6458
6556
|
children: [
|
|
6459
|
-
/* @__PURE__ */
|
|
6460
|
-
/* @__PURE__ */
|
|
6557
|
+
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6558
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "magenta", bold: true, children: [
|
|
6461
6559
|
GUTTER.pending,
|
|
6462
6560
|
" "
|
|
6463
6561
|
] }),
|
|
6464
|
-
/* @__PURE__ */
|
|
6562
|
+
/* @__PURE__ */ jsxs3(Text4, { bold: true, color: "magenta", children: [
|
|
6465
6563
|
count,
|
|
6466
6564
|
" update",
|
|
6467
6565
|
count > 1 ? "s" : "",
|
|
6468
6566
|
" awaiting review"
|
|
6469
6567
|
] })
|
|
6470
6568
|
] }),
|
|
6471
|
-
/* @__PURE__ */
|
|
6472
|
-
/* @__PURE__ */
|
|
6473
|
-
/* @__PURE__ */
|
|
6569
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, children: /* @__PURE__ */ jsx4(Text4, { color: "gray", children: summary }) }),
|
|
6570
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, marginTop: 0, children: /* @__PURE__ */ jsxs3(Text4, { color: "gray", dimColor: true, children: [
|
|
6571
|
+
/* @__PURE__ */ jsx4(Text4, { bold: true, color: "green", children: "a" }),
|
|
6474
6572
|
" accept ",
|
|
6475
|
-
/* @__PURE__ */
|
|
6573
|
+
/* @__PURE__ */ jsx4(Text4, { bold: true, color: "red", children: "r" }),
|
|
6476
6574
|
" reject"
|
|
6477
6575
|
] }) })
|
|
6478
6576
|
]
|
|
@@ -6483,8 +6581,8 @@ function QuestionCard({
|
|
|
6483
6581
|
question,
|
|
6484
6582
|
options
|
|
6485
6583
|
}) {
|
|
6486
|
-
return /* @__PURE__ */
|
|
6487
|
-
|
|
6584
|
+
return /* @__PURE__ */ jsxs3(
|
|
6585
|
+
Box4,
|
|
6488
6586
|
{
|
|
6489
6587
|
borderStyle: "single",
|
|
6490
6588
|
borderColor: "yellow",
|
|
@@ -6492,26 +6590,26 @@ function QuestionCard({
|
|
|
6492
6590
|
marginBottom: 0,
|
|
6493
6591
|
flexDirection: "column",
|
|
6494
6592
|
children: [
|
|
6495
|
-
/* @__PURE__ */
|
|
6496
|
-
/* @__PURE__ */
|
|
6593
|
+
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6594
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "yellow", bold: true, children: [
|
|
6497
6595
|
GUTTER.question,
|
|
6498
6596
|
" "
|
|
6499
6597
|
] }),
|
|
6500
|
-
/* @__PURE__ */
|
|
6598
|
+
/* @__PURE__ */ jsx4(Text4, { bold: true, color: "yellow", children: "Agent needs your input" })
|
|
6501
6599
|
] }),
|
|
6502
|
-
/* @__PURE__ */
|
|
6503
|
-
options.length > 0 && /* @__PURE__ */
|
|
6504
|
-
/* @__PURE__ */
|
|
6505
|
-
/* @__PURE__ */
|
|
6600
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, marginTop: 0, children: /* @__PURE__ */ jsx4(Text4, { children: question }) }),
|
|
6601
|
+
options.length > 0 && /* @__PURE__ */ jsx4(Box4, { flexDirection: "column", marginLeft: 2, marginTop: 1, children: options.map((opt, idx) => /* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6602
|
+
/* @__PURE__ */ jsx4(Text4, { color: "cyan", bold: true, children: idx + 1 }),
|
|
6603
|
+
/* @__PURE__ */ jsxs3(Text4, { children: [
|
|
6506
6604
|
" ",
|
|
6507
6605
|
opt.label
|
|
6508
6606
|
] }),
|
|
6509
|
-
/* @__PURE__ */
|
|
6607
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "gray", dimColor: true, children: [
|
|
6510
6608
|
" \u2014 ",
|
|
6511
6609
|
opt.description
|
|
6512
6610
|
] })
|
|
6513
6611
|
] }, opt.label)) }),
|
|
6514
|
-
/* @__PURE__ */
|
|
6612
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, marginTop: 0, children: /* @__PURE__ */ jsx4(Text4, { color: "gray", dimColor: true, children: options.length > 0 ? "Type number or custom answer" : "Type your answer" }) })
|
|
6515
6613
|
]
|
|
6516
6614
|
}
|
|
6517
6615
|
);
|
|
@@ -6522,46 +6620,46 @@ function HomeScreen({
|
|
|
6522
6620
|
fileCount,
|
|
6523
6621
|
skillCount
|
|
6524
6622
|
}) {
|
|
6525
|
-
return /* @__PURE__ */
|
|
6526
|
-
/* @__PURE__ */
|
|
6527
|
-
/* @__PURE__ */
|
|
6528
|
-
/* @__PURE__ */
|
|
6623
|
+
return /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", marginBottom: 1, children: [
|
|
6624
|
+
/* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", marginBottom: 1, children: [
|
|
6625
|
+
/* @__PURE__ */ jsx4(Text4, { bold: true, color: "cyan", children: "Open Research" }),
|
|
6626
|
+
/* @__PURE__ */ jsx4(Text4, { color: "gray", dimColor: true, children: "Local-first research agent" })
|
|
6529
6627
|
] }),
|
|
6530
|
-
!hasAuth && /* @__PURE__ */
|
|
6531
|
-
/* @__PURE__ */
|
|
6532
|
-
/* @__PURE__ */
|
|
6628
|
+
!hasAuth && /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", children: [
|
|
6629
|
+
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6630
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "yellow", children: [
|
|
6533
6631
|
GUTTER.pending,
|
|
6534
6632
|
" "
|
|
6535
6633
|
] }),
|
|
6536
|
-
/* @__PURE__ */
|
|
6634
|
+
/* @__PURE__ */ jsx4(Text4, { color: "yellow", children: "Connect your OpenAI account to get started" })
|
|
6537
6635
|
] }),
|
|
6538
|
-
/* @__PURE__ */
|
|
6636
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, children: /* @__PURE__ */ jsx4(Text4, { color: "gray", children: "/auth \u2014 browser login \xB7 /auth-codex \u2014 import existing session" }) })
|
|
6539
6637
|
] }),
|
|
6540
|
-
hasAuth && !hasWorkspace && /* @__PURE__ */
|
|
6541
|
-
/* @__PURE__ */
|
|
6542
|
-
/* @__PURE__ */
|
|
6638
|
+
hasAuth && !hasWorkspace && /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", children: [
|
|
6639
|
+
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6640
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "green", children: [
|
|
6543
6641
|
GUTTER.success,
|
|
6544
6642
|
" "
|
|
6545
6643
|
] }),
|
|
6546
|
-
/* @__PURE__ */
|
|
6644
|
+
/* @__PURE__ */ jsx4(Text4, { color: "green", children: "Connected" })
|
|
6547
6645
|
] }),
|
|
6548
|
-
/* @__PURE__ */
|
|
6549
|
-
/* @__PURE__ */
|
|
6646
|
+
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6647
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "yellow", children: [
|
|
6550
6648
|
GUTTER.pending,
|
|
6551
6649
|
" "
|
|
6552
6650
|
] }),
|
|
6553
|
-
/* @__PURE__ */
|
|
6651
|
+
/* @__PURE__ */ jsx4(Text4, { color: "yellow", children: "Create a workspace to begin" })
|
|
6554
6652
|
] }),
|
|
6555
|
-
/* @__PURE__ */
|
|
6653
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, children: /* @__PURE__ */ jsx4(Text4, { color: "gray", children: "/init \u2014 initialize in current directory" }) })
|
|
6556
6654
|
] }),
|
|
6557
|
-
hasAuth && hasWorkspace && /* @__PURE__ */
|
|
6558
|
-
/* @__PURE__ */
|
|
6559
|
-
/* @__PURE__ */
|
|
6655
|
+
hasAuth && hasWorkspace && /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", children: [
|
|
6656
|
+
/* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6657
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "green", children: [
|
|
6560
6658
|
GUTTER.active,
|
|
6561
6659
|
" "
|
|
6562
6660
|
] }),
|
|
6563
|
-
/* @__PURE__ */
|
|
6564
|
-
/* @__PURE__ */
|
|
6661
|
+
/* @__PURE__ */ jsx4(Text4, { color: "green", children: "Ready" }),
|
|
6662
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "gray", dimColor: true, children: [
|
|
6565
6663
|
" \u2014 ",
|
|
6566
6664
|
fileCount,
|
|
6567
6665
|
" files \xB7 ",
|
|
@@ -6569,7 +6667,7 @@ function HomeScreen({
|
|
|
6569
6667
|
" skills"
|
|
6570
6668
|
] })
|
|
6571
6669
|
] }),
|
|
6572
|
-
/* @__PURE__ */
|
|
6670
|
+
/* @__PURE__ */ jsx4(Box4, { marginLeft: 2, children: /* @__PURE__ */ jsx4(Text4, { color: "gray", children: "Ask a question, @mention a file, or /help for commands" }) })
|
|
6573
6671
|
] })
|
|
6574
6672
|
] });
|
|
6575
6673
|
}
|
|
@@ -6578,8 +6676,8 @@ function SuggestionDropdown({
|
|
|
6578
6676
|
selectedIndex
|
|
6579
6677
|
}) {
|
|
6580
6678
|
if (items.length === 0) return null;
|
|
6581
|
-
return /* @__PURE__ */
|
|
6582
|
-
|
|
6679
|
+
return /* @__PURE__ */ jsxs3(
|
|
6680
|
+
Box4,
|
|
6583
6681
|
{
|
|
6584
6682
|
flexDirection: "column",
|
|
6585
6683
|
borderStyle: "single",
|
|
@@ -6591,12 +6689,12 @@ function SuggestionDropdown({
|
|
|
6591
6689
|
const selected = idx === selectedIndex;
|
|
6592
6690
|
const prefix = selected ? "\u203A" : " ";
|
|
6593
6691
|
if (s.kind === "file") {
|
|
6594
|
-
return selected ? /* @__PURE__ */
|
|
6595
|
-
/* @__PURE__ */
|
|
6692
|
+
return selected ? /* @__PURE__ */ jsx4(Box4, { children: /* @__PURE__ */ jsx4(Text4, { inverse: true, bold: true, children: ` ${prefix} @${s.path} ` }) }, `file-${s.path}`) : /* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6693
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "gray", children: [
|
|
6596
6694
|
prefix,
|
|
6597
6695
|
" "
|
|
6598
6696
|
] }),
|
|
6599
|
-
/* @__PURE__ */
|
|
6697
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "green", children: [
|
|
6600
6698
|
"@",
|
|
6601
6699
|
s.path
|
|
6602
6700
|
] })
|
|
@@ -6605,23 +6703,23 @@ function SuggestionDropdown({
|
|
|
6605
6703
|
const nameColor = s.kind === "skill" ? "magenta" : "cyan";
|
|
6606
6704
|
const badge = s.kind === "skill" ? " [skill]" : "";
|
|
6607
6705
|
const label = `/${s.name}${badge} \u2014 ${s.description}`;
|
|
6608
|
-
return selected ? /* @__PURE__ */
|
|
6609
|
-
/* @__PURE__ */
|
|
6706
|
+
return selected ? /* @__PURE__ */ jsx4(Box4, { children: /* @__PURE__ */ jsx4(Text4, { inverse: true, bold: true, children: ` ${prefix} ${label} ` }) }, `${s.kind}-${s.name}`) : /* @__PURE__ */ jsxs3(Box4, { children: [
|
|
6707
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "gray", children: [
|
|
6610
6708
|
prefix,
|
|
6611
6709
|
" "
|
|
6612
6710
|
] }),
|
|
6613
|
-
/* @__PURE__ */
|
|
6711
|
+
/* @__PURE__ */ jsxs3(Text4, { color: nameColor, children: [
|
|
6614
6712
|
"/",
|
|
6615
6713
|
s.name
|
|
6616
6714
|
] }),
|
|
6617
|
-
/* @__PURE__ */
|
|
6715
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "gray", dimColor: true, children: [
|
|
6618
6716
|
badge,
|
|
6619
6717
|
" \u2014 ",
|
|
6620
6718
|
s.description
|
|
6621
6719
|
] })
|
|
6622
6720
|
] }, `${s.kind}-${s.name}`);
|
|
6623
6721
|
}),
|
|
6624
|
-
/* @__PURE__ */
|
|
6722
|
+
/* @__PURE__ */ jsx4(Text4, { color: "gray", dimColor: true, children: " \u2191\u2193 navigate \xB7 enter select \xB7 tab complete" })
|
|
6625
6723
|
]
|
|
6626
6724
|
}
|
|
6627
6725
|
);
|
|
@@ -6639,30 +6737,30 @@ function FooterBar({
|
|
|
6639
6737
|
}) {
|
|
6640
6738
|
const modeLabel = mode === "auto-research" ? "auto" : mode === "auto-approve" ? "approve" : "review";
|
|
6641
6739
|
const planLabel = planningStatus !== "idle" ? ` \xB7 ${planningStatus}` : "";
|
|
6642
|
-
return /* @__PURE__ */
|
|
6643
|
-
/* @__PURE__ */
|
|
6644
|
-
/* @__PURE__ */
|
|
6645
|
-
/* @__PURE__ */
|
|
6740
|
+
return /* @__PURE__ */ jsxs3(Box4, { flexDirection: "column", marginTop: 0, children: [
|
|
6741
|
+
/* @__PURE__ */ jsxs3(Box4, { justifyContent: "space-between", children: [
|
|
6742
|
+
/* @__PURE__ */ jsx4(Text4, { color: statusColor, children: busy ? toolActivity ? `${frame} ${toolActivity}` : `${frame} thinking...` : `${GUTTER.active} ${statusParts.join(" \xB7 ")}` }),
|
|
6743
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "gray", dimColor: true, children: [
|
|
6646
6744
|
tokenDisplay ? `${tokenDisplay} \xB7 ` : "",
|
|
6647
6745
|
workspaceName
|
|
6648
6746
|
] })
|
|
6649
6747
|
] }),
|
|
6650
|
-
/* @__PURE__ */
|
|
6651
|
-
/* @__PURE__ */
|
|
6748
|
+
/* @__PURE__ */ jsxs3(Box4, { justifyContent: "space-between", children: [
|
|
6749
|
+
/* @__PURE__ */ jsxs3(Text4, { color: "gray", dimColor: true, children: [
|
|
6652
6750
|
modeLabel,
|
|
6653
6751
|
planLabel,
|
|
6654
6752
|
" \xB7 shift+tab cycle \xB7 /help"
|
|
6655
6753
|
] }),
|
|
6656
|
-
/* @__PURE__ */
|
|
6754
|
+
/* @__PURE__ */ jsx4(Text4, { color: "gray", dimColor: true, children: "shift+enter newline \xB7 esc cancel" })
|
|
6657
6755
|
] })
|
|
6658
6756
|
] });
|
|
6659
6757
|
}
|
|
6660
6758
|
|
|
6661
6759
|
// src/tui/app.tsx
|
|
6662
|
-
import { jsx as
|
|
6760
|
+
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
6663
6761
|
var SPINNER_FRAMES = ["\u25D0", "\u25D3", "\u25D1", "\u25D2"];
|
|
6664
6762
|
function useAnimatedFrame(active) {
|
|
6665
|
-
const [index, setIndex] =
|
|
6763
|
+
const [index, setIndex] = useState4(0);
|
|
6666
6764
|
useEffect2(() => {
|
|
6667
6765
|
if (!active) {
|
|
6668
6766
|
setIndex(0);
|
|
@@ -6701,36 +6799,37 @@ function App({
|
|
|
6701
6799
|
}) {
|
|
6702
6800
|
const app = useApp();
|
|
6703
6801
|
const abortRef = useRef(null);
|
|
6704
|
-
const [input2, setInput] =
|
|
6705
|
-
const [composerFocused, setComposerFocused] =
|
|
6706
|
-
const [busy, setBusy] =
|
|
6707
|
-
const [authStatus, setAuthStatus] =
|
|
6708
|
-
const [workspacePath, setWorkspacePath] =
|
|
6709
|
-
const [workspaceFiles, setWorkspaceFiles] =
|
|
6710
|
-
const [skills2, setSkills] =
|
|
6711
|
-
const [messages, setMessages] =
|
|
6712
|
-
const [history, setHistory] =
|
|
6713
|
-
const [activeSkills, setActiveSkills] =
|
|
6714
|
-
const [pendingUpdates, setPendingUpdates] =
|
|
6715
|
-
const [statusLine, setStatusLine] =
|
|
6716
|
-
const [currentToolActivity, setCurrentToolActivity] =
|
|
6717
|
-
const [sessionTokens, setSessionTokens] =
|
|
6718
|
-
const [tokenDisplay, setTokenDisplay] =
|
|
6719
|
-
const [showSuggestions, setShowSuggestions] =
|
|
6720
|
-
const [agentMode, setAgentMode] =
|
|
6721
|
-
const [planningState, setPlanningState] =
|
|
6802
|
+
const [input2, setInput] = useState4("");
|
|
6803
|
+
const [composerFocused, setComposerFocused] = useState4(true);
|
|
6804
|
+
const [busy, setBusy] = useState4(false);
|
|
6805
|
+
const [authStatus, setAuthStatus] = useState4(initialState.authStatus);
|
|
6806
|
+
const [workspacePath, setWorkspacePath] = useState4(initialState.workspacePath);
|
|
6807
|
+
const [workspaceFiles, setWorkspaceFiles] = useState4([]);
|
|
6808
|
+
const [skills2, setSkills] = useState4([]);
|
|
6809
|
+
const [messages, setMessages] = useState4([]);
|
|
6810
|
+
const [history, setHistory] = useState4([]);
|
|
6811
|
+
const [activeSkills, setActiveSkills] = useState4([]);
|
|
6812
|
+
const [pendingUpdates, setPendingUpdates] = useState4(initialState.pendingUpdates);
|
|
6813
|
+
const [statusLine, setStatusLine] = useState4("");
|
|
6814
|
+
const [currentToolActivity, setCurrentToolActivity] = useState4("");
|
|
6815
|
+
const [sessionTokens, setSessionTokens] = useState4(() => createSessionUsage());
|
|
6816
|
+
const [tokenDisplay, setTokenDisplay] = useState4("");
|
|
6817
|
+
const [showSuggestions, setShowSuggestions] = useState4(false);
|
|
6818
|
+
const [agentMode, setAgentMode] = useState4("manual-review");
|
|
6819
|
+
const [planningState, setPlanningState] = useState4({
|
|
6722
6820
|
status: "idle",
|
|
6723
6821
|
planningHistory: []
|
|
6724
6822
|
});
|
|
6725
|
-
const [theme, setTheme] =
|
|
6726
|
-
const [config, setConfig] =
|
|
6727
|
-
const [cursorToEnd, setCursorToEnd] =
|
|
6728
|
-
const [screen, setScreen] =
|
|
6729
|
-
const
|
|
6823
|
+
const [theme, setTheme] = useState4("dark");
|
|
6824
|
+
const [config, setConfig] = useState4(null);
|
|
6825
|
+
const [cursorToEnd, setCursorToEnd] = useState4(0);
|
|
6826
|
+
const [screen, setScreen] = useState4("main");
|
|
6827
|
+
const [resumeSessions, setResumeSessions] = useState4([]);
|
|
6828
|
+
const sessionId = useMemo3(() => crypto.randomUUID(), []);
|
|
6730
6829
|
const deferredMessages = useDeferredValue(messages);
|
|
6731
6830
|
const deferredPendingUpdates = useDeferredValue(pendingUpdates);
|
|
6732
6831
|
const activityFrame = useAnimatedFrame(busy);
|
|
6733
|
-
const [agentQuestion, setAgentQuestion] =
|
|
6832
|
+
const [agentQuestion, setAgentQuestion] = useState4(null);
|
|
6734
6833
|
const previewRef = useRef(null);
|
|
6735
6834
|
const isHome = deferredMessages.length === 0 && !busy;
|
|
6736
6835
|
const hasWorkspace = workspacePath !== null;
|
|
@@ -6784,9 +6883,9 @@ function App({
|
|
|
6784
6883
|
cancelled = true;
|
|
6785
6884
|
};
|
|
6786
6885
|
}, [homeDir]);
|
|
6787
|
-
const [selectedSuggestion, setSelectedSuggestion] =
|
|
6788
|
-
const atMention =
|
|
6789
|
-
const suggestions =
|
|
6886
|
+
const [selectedSuggestion, setSelectedSuggestion] = useState4(-1);
|
|
6887
|
+
const atMention = useMemo3(() => extractAtMention(input2), [input2]);
|
|
6888
|
+
const suggestions = useMemo3(() => {
|
|
6790
6889
|
if (atMention) {
|
|
6791
6890
|
return getFileSuggestions(atMention.partial, workspaceFiles);
|
|
6792
6891
|
}
|
|
@@ -6941,35 +7040,14 @@ function App({
|
|
|
6941
7040
|
addSystemMessage("No workspace. Run /init first.");
|
|
6942
7041
|
break;
|
|
6943
7042
|
}
|
|
6944
|
-
const
|
|
6945
|
-
if (
|
|
7043
|
+
const foundSessions = await listSessions(workspacePath);
|
|
7044
|
+
if (foundSessions.length === 0) {
|
|
6946
7045
|
addSystemMessage("No previous sessions found.");
|
|
6947
7046
|
break;
|
|
6948
7047
|
}
|
|
6949
|
-
|
|
6950
|
-
|
|
6951
|
-
|
|
6952
|
-
const rs = resumeSessions[ri];
|
|
6953
|
-
addSystemMessage(` ${ri + 1}. ${rs.preview || "(empty)"} \u2014 ${rs.turnCount} turns \u2014 ${new Date(rs.lastActivity).toLocaleString()}`);
|
|
6954
|
-
}
|
|
6955
|
-
addSystemMessage("Type /resume <number> to restore a session.");
|
|
6956
|
-
break;
|
|
6957
|
-
}
|
|
6958
|
-
const resumeIdx = parseInt(args, 10);
|
|
6959
|
-
if (isNaN(resumeIdx) || resumeIdx < 1 || resumeIdx > resumeSessions.length) {
|
|
6960
|
-
addSystemMessage(`Invalid choice. Pick 1-${Math.min(resumeSessions.length, 10)}.`);
|
|
6961
|
-
break;
|
|
6962
|
-
}
|
|
6963
|
-
try {
|
|
6964
|
-
const restored = await loadSessionHistory(workspacePath, resumeSessions[resumeIdx - 1].id);
|
|
6965
|
-
startTransition(() => {
|
|
6966
|
-
setMessages(restored.messages);
|
|
6967
|
-
setHistory(restored.llmHistory);
|
|
6968
|
-
});
|
|
6969
|
-
addSystemMessage(`Resumed session (${resumeSessions[resumeIdx - 1].turnCount} turns). Continue where you left off.`);
|
|
6970
|
-
} catch (err) {
|
|
6971
|
-
addSystemMessage(`Failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
6972
|
-
}
|
|
7048
|
+
setResumeSessions(foundSessions);
|
|
7049
|
+
setScreen("resume");
|
|
7050
|
+
setComposerFocused(false);
|
|
6973
7051
|
break;
|
|
6974
7052
|
}
|
|
6975
7053
|
case "config": {
|
|
@@ -7292,7 +7370,7 @@ ${msg.text}
|
|
|
7292
7370
|
addSystemMessage(`Rejected: ${next.summary}`);
|
|
7293
7371
|
});
|
|
7294
7372
|
}
|
|
7295
|
-
|
|
7373
|
+
useInput4((key, inputKey) => {
|
|
7296
7374
|
if (inputKey.shift && inputKey.tab) {
|
|
7297
7375
|
setAgentMode((prev) => {
|
|
7298
7376
|
const modes = ["manual-review", "auto-approve", "auto-research"];
|
|
@@ -7697,7 +7775,7 @@ ${msg.text}
|
|
|
7697
7775
|
statusParts.push(agentMode);
|
|
7698
7776
|
if (deferredPendingUpdates.length > 0) statusParts.push(`${deferredPendingUpdates.length} pending`);
|
|
7699
7777
|
const statusColor = busy ? "yellow" : !hasAuth ? "red" : deferredPendingUpdates.length > 0 ? "magenta" : "green";
|
|
7700
|
-
const configItems =
|
|
7778
|
+
const configItems = useMemo3(() => [
|
|
7701
7779
|
{
|
|
7702
7780
|
key: "defaults.model",
|
|
7703
7781
|
label: "Model",
|
|
@@ -7754,8 +7832,34 @@ ${msg.text}
|
|
|
7754
7832
|
setScreen("main");
|
|
7755
7833
|
setComposerFocused(true);
|
|
7756
7834
|
}
|
|
7835
|
+
if (screen === "resume") {
|
|
7836
|
+
return /* @__PURE__ */ jsx5(
|
|
7837
|
+
SessionPicker,
|
|
7838
|
+
{
|
|
7839
|
+
sessions: resumeSessions,
|
|
7840
|
+
onSelect: async (session) => {
|
|
7841
|
+
try {
|
|
7842
|
+
const restored = await loadSessionHistory(workspacePath, session.id);
|
|
7843
|
+
startTransition(() => {
|
|
7844
|
+
setMessages(restored.messages);
|
|
7845
|
+
setHistory(restored.llmHistory);
|
|
7846
|
+
});
|
|
7847
|
+
addSystemMessage(`Resumed session (${session.turnCount} turns). Continue where you left off.`);
|
|
7848
|
+
} catch (err) {
|
|
7849
|
+
addSystemMessage(`Failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
7850
|
+
}
|
|
7851
|
+
setScreen("main");
|
|
7852
|
+
setComposerFocused(true);
|
|
7853
|
+
},
|
|
7854
|
+
onCancel: () => {
|
|
7855
|
+
setScreen("main");
|
|
7856
|
+
setComposerFocused(true);
|
|
7857
|
+
}
|
|
7858
|
+
}
|
|
7859
|
+
);
|
|
7860
|
+
}
|
|
7757
7861
|
if (screen === "config") {
|
|
7758
|
-
return /* @__PURE__ */
|
|
7862
|
+
return /* @__PURE__ */ jsx5(
|
|
7759
7863
|
ConfigScreen,
|
|
7760
7864
|
{
|
|
7761
7865
|
items: configItems,
|
|
@@ -7764,8 +7868,8 @@ ${msg.text}
|
|
|
7764
7868
|
}
|
|
7765
7869
|
);
|
|
7766
7870
|
}
|
|
7767
|
-
return /* @__PURE__ */
|
|
7768
|
-
isHome && /* @__PURE__ */
|
|
7871
|
+
return /* @__PURE__ */ jsxs4(Box5, { flexDirection: "column", paddingX: 1, paddingY: 1, children: [
|
|
7872
|
+
isHome && /* @__PURE__ */ jsx5(
|
|
7769
7873
|
HomeScreen,
|
|
7770
7874
|
{
|
|
7771
7875
|
hasAuth,
|
|
@@ -7774,24 +7878,24 @@ ${msg.text}
|
|
|
7774
7878
|
skillCount: skills2.length
|
|
7775
7879
|
}
|
|
7776
7880
|
),
|
|
7777
|
-
deferredMessages.length > 0 && /* @__PURE__ */
|
|
7881
|
+
deferredMessages.length > 0 && /* @__PURE__ */ jsx5(Box5, { flexDirection: "column", marginBottom: 1, children: deferredMessages.slice(-30).map((msg, idx) => {
|
|
7778
7882
|
if (msg.role === "system") {
|
|
7779
|
-
return /* @__PURE__ */
|
|
7883
|
+
return /* @__PURE__ */ jsx5(SystemMessage, { text: msg.text }, `msg-${idx}`);
|
|
7780
7884
|
}
|
|
7781
7885
|
if (msg.role === "user") {
|
|
7782
|
-
return /* @__PURE__ */
|
|
7886
|
+
return /* @__PURE__ */ jsx5(UserMessage, { text: msg.text }, `msg-${idx}`);
|
|
7783
7887
|
}
|
|
7784
|
-
return /* @__PURE__ */
|
|
7888
|
+
return /* @__PURE__ */ jsx5(AgentMessage, { text: msg.text }, `msg-${idx}`);
|
|
7785
7889
|
}) }),
|
|
7786
|
-
deferredPendingUpdates.length > 0 && /* @__PURE__ */
|
|
7890
|
+
deferredPendingUpdates.length > 0 && /* @__PURE__ */ jsx5(
|
|
7787
7891
|
PendingUpdateCard,
|
|
7788
7892
|
{
|
|
7789
7893
|
count: deferredPendingUpdates.length,
|
|
7790
7894
|
summary: truncate2(deferredPendingUpdates[0].summary, 80)
|
|
7791
7895
|
}
|
|
7792
7896
|
),
|
|
7793
|
-
planningState.status === "charter-review" && planningState.charter && /* @__PURE__ */
|
|
7794
|
-
|
|
7897
|
+
planningState.status === "charter-review" && planningState.charter && /* @__PURE__ */ jsxs4(
|
|
7898
|
+
Box5,
|
|
7795
7899
|
{
|
|
7796
7900
|
borderStyle: "round",
|
|
7797
7901
|
borderColor: "yellow",
|
|
@@ -7799,69 +7903,69 @@ ${msg.text}
|
|
|
7799
7903
|
marginBottom: 1,
|
|
7800
7904
|
flexDirection: "column",
|
|
7801
7905
|
children: [
|
|
7802
|
-
/* @__PURE__ */
|
|
7803
|
-
/* @__PURE__ */
|
|
7804
|
-
/* @__PURE__ */
|
|
7805
|
-
/* @__PURE__ */
|
|
7906
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, color: "yellow", children: "Research Charter \u2014 Review" }),
|
|
7907
|
+
/* @__PURE__ */ jsxs4(Box5, { marginTop: 1, flexDirection: "column", children: [
|
|
7908
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, color: "white", children: "Question: " }),
|
|
7909
|
+
/* @__PURE__ */ jsx5(Text5, { children: planningState.charter.researchQuestion })
|
|
7806
7910
|
] }),
|
|
7807
|
-
planningState.charter.successCriteria.length > 0 && /* @__PURE__ */
|
|
7808
|
-
/* @__PURE__ */
|
|
7809
|
-
planningState.charter.successCriteria.map((c, i) => /* @__PURE__ */
|
|
7911
|
+
planningState.charter.successCriteria.length > 0 && /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, flexDirection: "column", children: [
|
|
7912
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, color: "white", children: "Success Criteria:" }),
|
|
7913
|
+
planningState.charter.successCriteria.map((c, i) => /* @__PURE__ */ jsxs4(Text5, { color: "gray", children: [
|
|
7810
7914
|
" - ",
|
|
7811
7915
|
c
|
|
7812
7916
|
] }, `sc-${i}`))
|
|
7813
7917
|
] }),
|
|
7814
|
-
planningState.charter.scopeBoundaries.length > 0 && /* @__PURE__ */
|
|
7815
|
-
/* @__PURE__ */
|
|
7816
|
-
planningState.charter.scopeBoundaries.map((b, i) => /* @__PURE__ */
|
|
7918
|
+
planningState.charter.scopeBoundaries.length > 0 && /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, flexDirection: "column", children: [
|
|
7919
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, color: "white", children: "Scope Boundaries:" }),
|
|
7920
|
+
planningState.charter.scopeBoundaries.map((b, i) => /* @__PURE__ */ jsxs4(Text5, { color: "gray", children: [
|
|
7817
7921
|
" - ",
|
|
7818
7922
|
b
|
|
7819
7923
|
] }, `sb-${i}`))
|
|
7820
7924
|
] }),
|
|
7821
|
-
planningState.charter.proposedSteps.length > 0 && /* @__PURE__ */
|
|
7822
|
-
/* @__PURE__ */
|
|
7823
|
-
planningState.charter.proposedSteps.map((s, i) => /* @__PURE__ */
|
|
7925
|
+
planningState.charter.proposedSteps.length > 0 && /* @__PURE__ */ jsxs4(Box5, { marginTop: 1, flexDirection: "column", children: [
|
|
7926
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, color: "white", children: "Proposed Steps:" }),
|
|
7927
|
+
planningState.charter.proposedSteps.map((s, i) => /* @__PURE__ */ jsxs4(Text5, { color: "gray", children: [
|
|
7824
7928
|
" ",
|
|
7825
7929
|
i + 1,
|
|
7826
7930
|
". ",
|
|
7827
7931
|
s
|
|
7828
7932
|
] }, `ps-${i}`))
|
|
7829
7933
|
] }),
|
|
7830
|
-
/* @__PURE__ */
|
|
7934
|
+
/* @__PURE__ */ jsx5(Box5, { marginTop: 1, children: /* @__PURE__ */ jsxs4(Text5, { color: "gray", dimColor: true, children: [
|
|
7831
7935
|
"Press ",
|
|
7832
|
-
/* @__PURE__ */
|
|
7936
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, color: "green", children: "a" }),
|
|
7833
7937
|
" to approve \xB7 ",
|
|
7834
|
-
/* @__PURE__ */
|
|
7938
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, color: "cyan", children: "p" }),
|
|
7835
7939
|
" to keep planning \xB7 ",
|
|
7836
|
-
/* @__PURE__ */
|
|
7940
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, color: "red", children: "Esc" }),
|
|
7837
7941
|
" to cancel"
|
|
7838
7942
|
] }) })
|
|
7839
7943
|
]
|
|
7840
7944
|
}
|
|
7841
7945
|
),
|
|
7842
|
-
dropdownVisible && /* @__PURE__ */
|
|
7946
|
+
dropdownVisible && /* @__PURE__ */ jsx5(
|
|
7843
7947
|
SuggestionDropdown,
|
|
7844
7948
|
{
|
|
7845
7949
|
items: suggestions,
|
|
7846
7950
|
selectedIndex: selectedSuggestion
|
|
7847
7951
|
}
|
|
7848
7952
|
),
|
|
7849
|
-
agentQuestion && /* @__PURE__ */
|
|
7953
|
+
agentQuestion && /* @__PURE__ */ jsx5(
|
|
7850
7954
|
QuestionCard,
|
|
7851
7955
|
{
|
|
7852
7956
|
question: agentQuestion.question.question,
|
|
7853
7957
|
options: agentQuestion.question.options
|
|
7854
7958
|
}
|
|
7855
7959
|
),
|
|
7856
|
-
/* @__PURE__ */
|
|
7857
|
-
|
|
7960
|
+
/* @__PURE__ */ jsx5(
|
|
7961
|
+
Box5,
|
|
7858
7962
|
{
|
|
7859
7963
|
borderStyle: "round",
|
|
7860
7964
|
borderColor: agentQuestion ? "yellow" : busy ? "yellow" : composerFocused ? "cyan" : "gray",
|
|
7861
7965
|
paddingX: 1,
|
|
7862
7966
|
flexDirection: "column",
|
|
7863
|
-
children: /* @__PURE__ */
|
|
7864
|
-
/* @__PURE__ */
|
|
7967
|
+
children: /* @__PURE__ */ jsxs4(Box5, { children: [
|
|
7968
|
+
/* @__PURE__ */ jsx5(
|
|
7865
7969
|
PromptPrefix,
|
|
7866
7970
|
{
|
|
7867
7971
|
busy,
|
|
@@ -7870,7 +7974,7 @@ ${msg.text}
|
|
|
7870
7974
|
mode: agentMode
|
|
7871
7975
|
}
|
|
7872
7976
|
),
|
|
7873
|
-
/* @__PURE__ */
|
|
7977
|
+
/* @__PURE__ */ jsx5(
|
|
7874
7978
|
TextInput,
|
|
7875
7979
|
{
|
|
7876
7980
|
value: input2,
|
|
@@ -7887,13 +7991,13 @@ ${msg.text}
|
|
|
7887
7991
|
] })
|
|
7888
7992
|
}
|
|
7889
7993
|
),
|
|
7890
|
-
/* @__PURE__ */
|
|
7994
|
+
/* @__PURE__ */ jsx5(Box5, { marginTop: 0, children: /* @__PURE__ */ jsxs4(Text5, { color: agentMode === "auto-research" ? "yellow" : "gray", dimColor: agentMode === "manual-review", children: [
|
|
7891
7995
|
"\u2016 ",
|
|
7892
7996
|
agentMode,
|
|
7893
7997
|
planningState.status !== "idle" ? ` (${planningState.status})` : "",
|
|
7894
7998
|
" (shift+tab to cycle)"
|
|
7895
7999
|
] }) }),
|
|
7896
|
-
/* @__PURE__ */
|
|
8000
|
+
/* @__PURE__ */ jsx5(
|
|
7897
8001
|
FooterBar,
|
|
7898
8002
|
{
|
|
7899
8003
|
busy,
|
|
@@ -7918,7 +8022,7 @@ program.name("open-research").version(getPackageVersion()).description("Local-fi
|
|
|
7918
8022
|
const project = await loadWorkspaceProject(target);
|
|
7919
8023
|
const auth2 = await loadStoredAuth();
|
|
7920
8024
|
render(
|
|
7921
|
-
|
|
8025
|
+
React5.createElement(App, {
|
|
7922
8026
|
initialState: {
|
|
7923
8027
|
authStatus: auth2 ? "connected" : "missing",
|
|
7924
8028
|
workspacePath: project ? target : null,
|
package/package.json
CHANGED