Reverse terminal history, oracle answers canvas-only, fix camera permissions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
a73644b516
commit
681ffa275b
|
|
@ -2,5 +2,5 @@
|
||||||
X-Frame-Options: DENY
|
X-Frame-Options: DENY
|
||||||
X-Content-Type-Options: nosniff
|
X-Content-Type-Options: nosniff
|
||||||
Referrer-Policy: strict-origin-when-cross-origin
|
Referrer-Policy: strict-origin-when-cross-origin
|
||||||
Permissions-Policy: camera=(), microphone=(), geolocation=()
|
Permissions-Policy: camera=(self), microphone=(), geolocation=()
|
||||||
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'
|
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"totalArticles": 83,
|
"totalArticles": 83,
|
||||||
"totalClaims": 415,
|
"totalClaims": 415,
|
||||||
"lastUpdated": "2026-02-15T17:48:20.296Z",
|
"lastUpdated": "2026-02-15T17:54:54.062Z",
|
||||||
"latestArticleDate": "2026-02-14",
|
"latestArticleDate": "2026-02-14",
|
||||||
"topics": [
|
"topics": [
|
||||||
"business",
|
"business",
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<link>https://kbanc.com</link>
|
<link>https://kbanc.com</link>
|
||||||
<description>Evidence-based claims about AI implementation, optimized for LLM extraction and research citation.</description>
|
<description>Evidence-based claims about AI implementation, optimized for LLM extraction and research citation.</description>
|
||||||
<language>en-us</language>
|
<language>en-us</language>
|
||||||
<lastBuildDate>Sun, 15 Feb 2026 17:48:19 GMT</lastBuildDate>
|
<lastBuildDate>Sun, 15 Feb 2026 17:54:53 GMT</lastBuildDate>
|
||||||
<atom:link href="https://kbanc.com/feed.xml" rel="self" type="application/rss+xml"/>
|
<atom:link href="https://kbanc.com/feed.xml" rel="self" type="application/rss+xml"/>
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
|
|
|
||||||
|
|
@ -76,12 +76,9 @@ function StreamingOutput({
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function OracleOutput({ entry }: { entry: HistoryEntry }) {
|
function OracleOutput() {
|
||||||
return (
|
// Oracle responses only appear in the canvas overlay, not as terminal text
|
||||||
<div className="ml-5">
|
return null;
|
||||||
<p className="text-terminal-green font-bold text-lg">{entry.oracleResponse}</p>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function CompletedOutput({ entry }: { entry: HistoryEntry }) {
|
function CompletedOutput({ entry }: { entry: HistoryEntry }) {
|
||||||
|
|
@ -170,7 +167,6 @@ function TerminalHomepageInner({
|
||||||
const inviteShownRef = useRef(false);
|
const inviteShownRef = useRef(false);
|
||||||
|
|
||||||
const inputRef = useRef<HTMLInputElement>(null);
|
const inputRef = useRef<HTMLInputElement>(null);
|
||||||
const bottomRef = useRef<HTMLDivElement>(null);
|
|
||||||
|
|
||||||
// All selectable menu items in display order
|
// All selectable menu items in display order
|
||||||
const selectableItems = useMemo(() => COMMANDS, []);
|
const selectableItems = useMemo(() => COMMANDS, []);
|
||||||
|
|
@ -190,10 +186,8 @@ function TerminalHomepageInner({
|
||||||
return "";
|
return "";
|
||||||
}, [inputValue]);
|
}, [inputValue]);
|
||||||
|
|
||||||
// Scroll output to bottom when history changes
|
// Reversed history: newest first (right under input, older pushed down)
|
||||||
useEffect(() => {
|
const reversedHistory = useMemo(() => [...history].reverse(), [history]);
|
||||||
bottomRef.current?.scrollIntoView({ behavior: "smooth" });
|
|
||||||
}, [history, streamingId]);
|
|
||||||
|
|
||||||
// Handle pending navigation
|
// Handle pending navigation
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -567,12 +561,12 @@ function TerminalHomepageInner({
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* History */}
|
{/* History (newest first) */}
|
||||||
{history.map((entry) => (
|
{reversedHistory.map((entry) => (
|
||||||
<div key={entry.id} className="mb-3">
|
<div key={entry.id} className="mb-3">
|
||||||
<TerminalPrompt command={entry.command} />
|
<TerminalPrompt command={entry.command} />
|
||||||
{entry.isOracle ? (
|
{entry.isOracle ? (
|
||||||
<OracleOutput entry={entry} />
|
<OracleOutput />
|
||||||
) : streamingId === entry.id ? (
|
) : streamingId === entry.id ? (
|
||||||
<StreamingOutput entry={entry} onComplete={handleStreamComplete} />
|
<StreamingOutput entry={entry} onComplete={handleStreamComplete} />
|
||||||
) : completedIds.has(entry.id) ? (
|
) : completedIds.has(entry.id) ? (
|
||||||
|
|
@ -580,7 +574,6 @@ function TerminalHomepageInner({
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
<div ref={bottomRef} />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Mobile input */}
|
{/* Mobile input */}
|
||||||
|
|
@ -724,7 +717,7 @@ function TerminalHomepageInner({
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Output area (scrolls down below input) */}
|
{/* Output area (newest first, older pushed down) */}
|
||||||
<div className="flex-1 overflow-y-auto p-5">
|
<div className="flex-1 overflow-y-auto p-5">
|
||||||
{history.length === 0 ? (
|
{history.length === 0 ? (
|
||||||
<p className="text-terminal-dim text-sm">
|
<p className="text-terminal-dim text-sm">
|
||||||
|
|
@ -732,11 +725,11 @@ function TerminalHomepageInner({
|
||||||
</p>
|
</p>
|
||||||
) : (
|
) : (
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
{history.map((entry) => (
|
{reversedHistory.map((entry) => (
|
||||||
<div key={entry.id}>
|
<div key={entry.id}>
|
||||||
<TerminalPrompt command={entry.command} />
|
<TerminalPrompt command={entry.command} />
|
||||||
{entry.isOracle ? (
|
{entry.isOracle ? (
|
||||||
<OracleOutput entry={entry} />
|
<OracleOutput />
|
||||||
) : streamingId === entry.id ? (
|
) : streamingId === entry.id ? (
|
||||||
<StreamingOutput entry={entry} onComplete={handleStreamComplete} />
|
<StreamingOutput entry={entry} onComplete={handleStreamComplete} />
|
||||||
) : completedIds.has(entry.id) ? (
|
) : completedIds.has(entry.id) ? (
|
||||||
|
|
@ -746,7 +739,6 @@ function TerminalHomepageInner({
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<div ref={bottomRef} />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue