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:
kbanc85 2026-02-15 12:58:47 -05:00
parent a73644b516
commit 681ffa275b
4 changed files with 14 additions and 22 deletions

View File

@ -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'

View File

@ -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",

View File

@ -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>

View File

@ -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>