feat(custom-chips): AI entry point + friendly auth error

- 'Create with AI' button in CustomChipDialog dispatches the generic
  velxio:agent-prompt window event (no-op without a listener — the pro
  overlay's chat panel picks it up and prefills the composer).
- chipCompileService maps the hosted deployment's 401 gate to a human
  'sign in to compile custom chips' message instead of a raw status
  line. Self-hosted OSS keeps the route open and never sees either.
This commit is contained in:
David Montero Crespo 2026-07-16 20:34:42 +02:00
parent d85e4ac14a
commit cd22335838
2 changed files with 22 additions and 1 deletions

View File

@ -283,6 +283,23 @@ export const CustomChipDialog = ({ initial, onClose, onSave }: CustomChipDialogP
{compiling ? t('editor.customChip.compiling') : t('editor.customChip.compile')}
</button>
)}
<button
style={cancelBtn}
title="Describe the chip and the AI agent writes, compiles and programs it"
onClick={() => {
// Pro AI agent hook — no-op when no overlay listener is mounted.
window.dispatchEvent(new CustomEvent('velxio:agent-prompt', {
detail: {
prompt:
'Crea un custom chip que ... (describe qué debe hacer; ' +
'el agente escribe el C, lo compila y lo programa en el canvas)',
},
}));
onClose();
}}
>
Create with AI
</button>
<div style={{ flex: 1 }} />
<button style={cancelBtn} onClick={onClose}>{t('editor.customChip.cancel')}</button>
<button style={canSave ? saveBtn : saveBtnDisabled} disabled={!canSave} onClick={doSave}>

View File

@ -34,7 +34,11 @@ export async function compileChip(source: string, chipJson?: string): Promise<Ch
wasm_base64: null,
stdout: '',
stderr: '',
error: `HTTP ${res.status}: ${text}`,
// Hosted deployments gate this route behind login (401) — surface a
// human instruction instead of a raw status line.
error: res.status === 401
? 'login_required: sign in to compile custom chips.'
: `HTTP ${res.status}: ${text}`,
byte_size: 0,
};
}