Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@
},
"scripts": {
"check-types": "tsc --noEmit",
"test": "vitest run"
"test": "vitest run",
"dev": "pnpm -C web dev"
},
"dependencies": {
"@openrouter/ai-sdk-provider": "^2.8.0",
Expand Down
57 changes: 8 additions & 49 deletions web/src/Landing.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ import {
Agent, Messages, emitFragment, emitHaltPredicate,
} from "@flamecast/agentjsx/components"

// Claude-Code-style /goal. The agent can't call a "done" tool — it
// doesn't have one. Halting is gated by an independent inference call
// that judges the transcript against the condition. The model sees
// the goal in its system block, but completion is decided externally.
function Goal({ condition }: { condition: string }) {
return [
emitFragment({
Expand All @@ -39,15 +35,7 @@ function Goal({ condition }: { condition: string }) {
return JSON.parse(res.content)
}),
]
}

// Drop it in like any built-in component:
render(
<Agent>
<Goal condition="every TODO has a Linear ticket" />
<Messages />
</Agent>
)`
}`

function LandingHeader() {
return (
Expand Down Expand Up @@ -75,14 +63,6 @@ function CopyPromptCta() {
)
}

const LINKS = [
{
href: "https://github.com/smithery-ai/agentjsx",
label: "GitHub",
desc: "Source, issues, and the full extension catalog.",
},
]

export function Landing() {
return (
<div className="landing" data-theme="dark">
Expand Down Expand Up @@ -125,11 +105,13 @@ export function Landing() {
Build your own components.
</h2>
<p className="landing-build-lede">
Components are functions that contribute tools,
prompt content, or both. Some wrap others to
reshape what they produce. Drop them inside{" "}
<code>{"<Agent>"}</code>; the runtime handles
diffing and tool reconciliation between renders.
A component defines a slice of your agent: what
it sees in its context, what it can do, or both.
The Goal component does both at once: it drops the
goal into the system prompt, and it blocks the
agent from halting until the goal is met. Compose
them by nesting inside <code>{"<Agent>"}</code>,
the way you'd nest React components.
</p>
</div>
<div className="landing-code-section">
Expand All @@ -139,29 +121,6 @@ export function Landing() {
/>
</div>
</section>

<section
className="landing-section"
aria-labelledby="section-where"
>
<h2 id="section-where" className="caption">
Where to go
</h2>
<ul className="landing-links">
{LINKS.map(l => (
<li key={l.href}>
<a href={l.href}>
<span className="landing-link-label">
{l.label}
</span>
<span className="landing-link-desc">
{l.desc}
</span>
</a>
</li>
))}
</ul>
</section>
</main>
</div>
)
Expand Down
Loading