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
9 changes: 9 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,15 @@ design would need parallel compatibility paths, raise the issue with a concrete
tradeoffs before implementing the disputed behavior. Continue independent work
while the decision is pending. Do not silently preserve obsolete private designs.

Public project branding uses OpenAgentCore. The canonical vector mark is
`docs/assets/openagentcore-logo.svg`; Core Web, docs and landing-page assets use
the same outline, with transparent margins cropped, theme-aware favicon colors
and dark-surface inversion. The canonical SVG preserves the reference PNG canvas.
The README hero uses the supplied `docs/assets/openagentcore-banner.jpeg`.
The `example/parsar/` workbench retains its own name, logo and favicon.
Historical provenance, external repository URLs, import paths and existing data
identifiers retain their original spelling; do not rename those as display copy.

Core Web leads with operations: Monitor (Overview, Core metrics, Agent metrics,
Sandbox metrics, Session log), Resources and Platform. Pages use the shared
components in `apps/web/src/components` and the tokens in `apps/web/src/styles`,
Expand Down
Binary file removed apps/docs/app/icon.png
Binary file not shown.
4 changes: 4 additions & 0 deletions apps/docs/app/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion apps/docs/app/layout.config.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared"

export const baseOptions: BaseLayoutProps = {
nav: {
title: "OpenAgentCore Docs",
title: <><img src="/openagentcore.svg" alt="" width={24} height={24} className="dark:invert" /><span>OpenAgentCore Docs</span></>,
},
searchToggle: {
enabled: false,
Expand Down
3 changes: 3 additions & 0 deletions apps/docs/public/openagentcore.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion apps/docs/scripts/verify-docs-facts.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,5 @@ for (const file of fs.readdirSync(path.join(app, 'content/docs')).filter(n => n.
const text = fs.readFileSync(path.join(app, 'content/docs', file), 'utf8')
for (const retired of ['/core/v1/admin', 'sandbox-manager.openapi.yaml']) assert.ok(!text.includes(retired), 'Obsolete claim in ' + file + ': ' + retired)
}
assert.deepEqual(fs.readFileSync(path.join(app, 'app/icon.png')), fs.readFileSync(path.join(repo, 'apps/web/public/favicon.png')), 'Docs favicon must match the approved Web asset')
assert.deepEqual(fs.readFileSync(path.join(app, 'app/icon.svg')), fs.readFileSync(path.join(repo, 'apps/web/public/favicon.svg')), 'Docs favicon must match the approved Web asset')
console.log('Guide copies, source authority and namespace/configuration facts are current.')
2 changes: 1 addition & 1 deletion apps/web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#fafafa" media="(prefers-color-scheme: light)" />
<meta name="theme-color" content="#202020" media="(prefers-color-scheme: dark)" />
<link rel="icon" type="image/png" href="/favicon.png" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta
name="description"
content="An open-source administrator console for OpenAgentCore and compatible Agents API services."
Expand Down
Binary file removed apps/web/public/favicon.png
Binary file not shown.
4 changes: 4 additions & 0 deletions apps/web/public/favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed apps/web/public/oac-mark-dark.png
Binary file not shown.
Binary file removed apps/web/public/oac-mark-light.png
Binary file not shown.
3 changes: 3 additions & 0 deletions apps/web/public/oac-mark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 1 addition & 2 deletions apps/web/src/components/ConsoleSidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ export function ConsoleSidebar({
<aside className="app-sidebar">
<div className="brand-lockup">
<span className="brand-mark-frame">
<img className="brand-mark brand-mark-light" src="/oac-mark-light.png" width="18" height="18" alt="" aria-hidden="true" />
<img className="brand-mark brand-mark-dark" src="/oac-mark-dark.png" width="18" height="18" alt="" aria-hidden="true" />
<img className="brand-mark" src="/oac-mark.svg" width="18" height="18" alt="" aria-hidden="true" />
</span>
<span className="brand-name">OpenAgentCore</span>
<span className="brand-product">{t("console")}</span>
Expand Down
4 changes: 2 additions & 2 deletions apps/web/src/features/onboarding/OnboardingStage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export function OnboardingStage({ scene, chapter }: { scene: StageScene | null;
<div className="onboarding-glow" />
</div>
<div className="onboarding-brand">
<img src="/oac-mark-dark.png" width="22" height="22" alt="" aria-hidden="true" />
<img className="onboarding-mark" src="/oac-mark.svg" width="22" height="22" alt="" aria-hidden="true" />
<span>OpenAgentCore</span>
</div>
{scene === "tour" && chapter ? <TourShowcase chapter={chapter} /> : <Constellation copy={scene === "login"} />}
Expand Down Expand Up @@ -60,7 +60,7 @@ function Constellation({ copy }: { copy: boolean }) {
animate={{ opacity: 1, scale: 1 }}
transition={{ duration: 0.7, ease: EASE }}
>
<img src="/oac-mark-dark.png" width="40" height="40" alt="" />
<img className="onboarding-mark" src="/oac-mark.svg" width="40" height="40" alt="" />
<BorderBeam size={70} duration={7} colorFrom="#818cf8" colorTo="#e879f9" borderWidth={1.5} />
</m.div>
</div>
Expand Down
12 changes: 4 additions & 8 deletions apps/web/src/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -188,16 +188,12 @@ a {
flex: 0 0 18px;
}

.brand-mark-dark {
display: none;
html[data-theme="dark"] .brand-mark {
filter: invert(1);
}

html[data-theme="dark"] .brand-mark-light {
display: none;
}

html[data-theme="dark"] .brand-mark-dark {
display: block;
.onboarding-mark {
filter: invert(1);
}

.brand-name,
Expand Down
3 changes: 3 additions & 0 deletions docs/assets/openagentcore-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 7 additions & 7 deletions scripts/core-doctor.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@ Usage:
pnpm core:doctor -- [--parsar <checkout>] [--profile <name>] [--timeout-ms <milliseconds>]

The doctor performs only GET requests. It never creates an Agent, Session, Turn,
or Item, and it never makes a model/provider call. The optional Parsar checkout is
or Item, and it never makes a model/provider call. The optional OpenAgentCore checkout is
used only to run the upstream daemon status command. No credential value, response
body, daemon output, or private filesystem path is printed.

The authenticated read validates only the basic Agent resource envelope. Known
tool variants receive basic field validation; additive JSON fields and unknown
nonempty tool-type discriminants are accepted. A passing result does not prove
that the Web supports those tools or complete Parsar protocol compatibility.
that the Web supports those tools or complete Agents API protocol compatibility.

Pinned Parsar Agents API contract:
Pinned Agents API contract:
${PARSAR_PROTOCOL_BASELINE_REVISION}

Exit codes:
Expand Down Expand Up @@ -120,11 +120,11 @@ export function parseCoreDoctorArgs(argv) {
}

if (positional.length > 1 || (positional.length === 1 && parsarPath)) {
throw new CoreDoctorUsageError("provide at most one Parsar checkout");
throw new CoreDoctorUsageError("provide at most one OpenAgentCore checkout");
}
if (positional.length === 1) parsarPath = positional[0];
if (typeof parsarPath === "string" && parsarPath.trim() === "") {
throw new CoreDoctorUsageError("Parsar checkout cannot be empty");
throw new CoreDoctorUsageError("OpenAgentCore checkout cannot be empty");
}
if (!PROFILE_PATTERN.test(profile)) {
throw new CoreDoctorUsageError("invalid daemon profile name");
Expand Down Expand Up @@ -279,7 +279,7 @@ function createReport() {
render(exitCode) {
const lines = [
"OpenAgentCore Doctor (read-only)",
`Parsar protocol baseline: ${PARSAR_PROTOCOL_BASELINE_REVISION}`,
`Agents API protocol baseline: ${PARSAR_PROTOCOL_BASELINE_REVISION}`,
"",
];
for (const check of checks) lines.push(`[${check.level}] ${check.layer}: ${check.message}`);
Expand Down Expand Up @@ -782,7 +782,7 @@ export async function inspectDaemon({ parsarPath, profile, timeoutMs, env, runCo
if (parsarPath) {
cwd = await validateParsarCheckout(parsarPath);
if (!cwd) {
report.add("FAIL", "Daemon", "the supplied Parsar checkout is invalid or unreadable.");
report.add("FAIL", "Daemon", "the supplied OpenAgentCore checkout is invalid or unreadable.");
return { exitCode: CORE_DOCTOR_EXIT_CODES.usageOrInternalError };
}
command = "go";
Expand Down
4 changes: 2 additions & 2 deletions services/core-console/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,6 @@ func publicConsoleAsset(r *http.Request) bool {
if r.Method != http.MethodGet && r.Method != http.MethodHead {
return false
}
return r.URL.Path == "/" || r.URL.Path == "/index.html" || r.URL.Path == "/favicon.png" ||
r.URL.Path == "/oac-mark-light.png" || r.URL.Path == "/oac-mark-dark.png" || strings.HasPrefix(r.URL.Path, "/assets/")
return r.URL.Path == "/" || r.URL.Path == "/index.html" || r.URL.Path == "/favicon.svg" ||
r.URL.Path == "/oac-mark.svg" || strings.HasPrefix(r.URL.Path, "/assets/")
}
6 changes: 3 additions & 3 deletions services/core-console/auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func coreKeyConsoleConfig(t *testing.T, backend http.Handler) config {
if err := os.Mkdir(filepath.Join(dist, "assets"), 0o700); err != nil {
t.Fatal(err)
}
for name, body := range map[string]string{"index.html": "console application", "assets/main.js": "app script", "private.txt": "not public", "oac-mark-light.png": "light mark", "oac-mark-dark.png": "dark mark", "parsar-mark-light.png": "retired mark"} {
for name, body := range map[string]string{"index.html": "console application", "assets/main.js": "app script", "private.txt": "not public", "oac-mark.svg": "vector mark", "favicon.svg": "vector favicon", "parsar-mark-light.png": "retired mark"} {
if err := os.WriteFile(filepath.Join(dist, name), []byte(body), 0o600); err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -105,12 +105,12 @@ func TestCoreKeySignInSessionAndLogout(t *testing.T) {
t.Errorf("private path %s returned %d", path, w.Code)
}
}
for _, path := range []string{"/", "/index.html", "/assets/main.js", "/oac-mark-light.png", "/oac-mark-dark.png"} {
for _, path := range []string{"/", "/index.html", "/assets/main.js", "/oac-mark.svg", "/favicon.svg"} {
if w := authRequest(h, "GET", path, "", nil); w.Code != 200 {
t.Errorf("login asset %s returned %d", path, w.Code)
}
}
for _, path := range []string{"/oac-mark-light.png", "/oac-mark-dark.png"} {
for _, path := range []string{"/oac-mark.svg", "/favicon.svg"} {
if w := authRequest(h, "HEAD", path, "", nil); w.Code != 200 {
t.Errorf("login asset HEAD %s returned %d", path, w.Code)
}
Expand Down
Loading