diff --git a/packages/extension/AGENTS.md b/packages/extension/AGENTS.md index f3731841..65f7e9d2 100644 --- a/packages/extension/AGENTS.md +++ b/packages/extension/AGENTS.md @@ -2,19 +2,25 @@ ## Identity -You are **Amico** — Amicode's research copilot. You are NOT "opencode": +You are **Amico** — Amicode's autoresearch copilot. You are NOT "opencode": opencode is the engine underneath, **Amicode** is the product, **Amico** is you. If asked who or what you are, answer in one line — "I'm Amico — Amicode's -research copilot" — and never describe yourself as an interactive CLI tool. - -You help researchers design and optimize quantum-control pulses, write code, -and run experiments — without leaving VS Code. You author Julia scripts, run -them, and the Run Inspector renders the live solve. +autoresearch copilot" — and never describe yourself as an interactive CLI tool. + +You run the research loop first — campaigns, hypotheses, spec gates, +experiments, mechanical verdicts — plus the dev work that loop needs (issues, +PRs, skills, fleet ops) — and you adapt to the user's field from their +recorded state (profile, mounts, memory): their platforms, their prior +results, their open questions. Your deepest domain is quantum control: you +synthesize optimal-control pulses with Piccolo (Julia) without leaving VS +Code — you author a Julia script, run it, and the Run Inspector renders the +live solve. That is the first domain pack, not the boundary — QEC, other +physics, anything modelable: the loop is the same. ## Voice -You're a _friend_ — "Amico" is Italian for it — who's done pulse design with this -researcher for years. You know the toolchain, the failure modes, the literature. +You're a _friend_ — "Amico" is Italian for it — who's done research with this +user for years. You know their toolchain, the failure modes, the literature. Sound like it — not a generic assistant. - **Witty and plucky, never chummy.** Dry, confident, a little cheeky. A clean diff --git a/packages/extension/package.json b/packages/extension/package.json index 23f3ac80..14ca2f6c 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -2,7 +2,7 @@ "name": "amicode", "displayName": "Amicode", "description": "Open autonomous research in VS Code \u2014 vaults, fleet, and live solves for quantum control and physical intelligence.", - "version": "0.2.5", + "version": "0.2.6", "publisher": "harmoniqs", "license": "Apache-2.0", "icon": "media/icon.png", diff --git a/packages/extension/src/extension.ts b/packages/extension/src/extension.ts index b46b3e69..c7945224 100644 --- a/packages/extension/src/extension.ts +++ b/packages/extension/src/extension.ts @@ -40,7 +40,7 @@ import { watchSolverMode, applyEntitlementForMode, readSolverModeState } from ". import { runSetCloudKeyCommand } from "./cloud_key"; import { amicodeOpsDir } from "./substrate/vault_store"; import { registerOnboardingPanel, onOnboardingCancelled, getOnboardingPanel, releaseOnboardingPanel } from "./onboarding_panel"; -import { isModelConfigured, writeWelcomeShown } from "./onboarding_routing"; +import { isModelConfigured } from "./onboarding_routing"; import { stagePasqalConnector } from "./pasqal_assets"; import { needsProvision, pasqalVenvDir, provisionPasqalPython } from "./pasqal_python"; import { createLocalPersonalVault, sanitizeVaultName, suggestVaultName } from "./substrate/vault_setup"; @@ -208,39 +208,6 @@ async function refreshDeviceInspector(channel: vscode.OutputChannel): Promise(); -/** Create a session and arm it with "Let's begin onboarding." via the server API. - * Bypasses the UI model gate (the server resolves its own default model). - * Returns the session ID on success, undefined on failure. */ -async function armOnboardingSession( - serverUrl: URL, - authHeaders: Record, - projectDir?: string, -): Promise { - try { - const collectionUrl = new URL("/session", serverUrl); - if (projectDir) collectionUrl.searchParams.set("directory", projectDir); - const createRes = await fetch(collectionUrl.toString(), { - method: "POST", - headers: { "Content-Type": "application/json", ...authHeaders }, - body: JSON.stringify({ title: "Onboarding" }), - }); - if (!createRes.ok) return undefined; - const { id } = (await createRes.json()) as { id?: string }; - if (!id) return undefined; - - const commandUrl = new URL(`/session/${id}/command`, serverUrl); - const commandRes = await fetch(commandUrl.toString(), { - method: "POST", - headers: { "Content-Type": "application/json", ...authHeaders }, - body: JSON.stringify({ command: "Let's begin onboarding.", arguments: "" }), - }); - if (!commandRes.ok) return undefined; - return id; - } catch { - return undefined; - } -} - export async function activate(ctx: vscode.ExtensionContext): Promise { const opencodeChannel = vscode.window.createOutputChannel("Amicode — opencode"); const runsChannel = vscode.window.createOutputChannel("Amicode — runs"); diff --git a/packages/extension/src/onboarding_webview.ts b/packages/extension/src/onboarding_webview.ts index 0d3c33cd..e9ae5ddd 100644 --- a/packages/extension/src/onboarding_webview.ts +++ b/packages/extension/src/onboarding_webview.ts @@ -929,9 +929,6 @@ window.addEventListener("message", (event) => { if (ring) ring.style.animation = "none"; } - // Find the inner-most animated group to switch animation - const enterGroup = svg.querySelector(".mark-enter") || svg.querySelector(".mark-breathe"); - // Switch from idle animations to excited jump const breatheGroup = svg.querySelector(".mark-breathe") as HTMLElement; if (breatheGroup) {