chore: configure codex build environment
Build / build (push) Successful in 18s

This commit is contained in:
2026-07-17 14:16:54 -05:00
parent 8e4bb5861a
commit 4f4c2143da
8 changed files with 143 additions and 9 deletions
+31
View File
@@ -0,0 +1,31 @@
# THIS IS AUTOGENERATED. DO NOT EDIT MANUALLY
version = 1
name = "mp-silma-ai-aide"
[setup]
script = "npm run codex:setup"
[[actions]]
name = "Run Dev"
icon = "run"
command = "npm run dev:codex"
[[actions]]
name = "Build"
icon = "tool"
command = "npm run build:codex"
[[actions]]
name = "Preview Dist"
icon = "run"
command = "npm run preview"
[[actions]]
name = "Verify Dist"
icon = "tool"
command = "npm run verify:dist"
[[actions]]
name = "Install"
icon = "tool"
command = "npm ci"
+26
View File
@@ -0,0 +1,26 @@
name: Build
on:
push:
branches:
- main
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- name: Install dependencies
run: npm ci
- name: Build deployable extension
run: npm run build
+7 -1
View File
@@ -6,10 +6,14 @@
## Commands
- Install dependencies: `npm install`
- Install dependencies: `npm ci`
- Codex setup: `npm run codex:setup`
- Run local Vite dev server: `npm run dev`
- Run app in Codex: `npm run dev:codex`
- Build extension: `npm run build`
- Build extension in Codex: `npm run build:codex`
- Preview build output: `npm run preview`
- Verify generated extension output: `npm run verify:dist`
## Environment
@@ -25,7 +29,9 @@ Use `.env.local` for local secrets. Keep `.env.local` and any real token-bearing
## Extension Build Notes
- `vite.config.ts` emits `dist/manifest.json` during production builds.
- `dist/` is the deployable output directory. Deployment or Chrome load-unpacked flows should point directly at `dist/`.
- `dist/` is generated output and should not be edited directly.
- `npm run build` runs `scripts/verify-dist.mjs` after Vite to ensure the generated output has the required extension files.
- Host permissions are derived from `VITE_GITEA_BASE_URL`. Rebuild after changing the base URL.
- Runtime API calls are centralized in `src/api.ts`.
- Popup state is centralized in the vanilla Zustand store at `src/store.ts`.
+17 -2
View File
@@ -7,7 +7,13 @@ Context-aware AI aide — project-agnostic tooling to give Silma better context
Install dependencies:
```bash
npm install
npm ci
```
Run the Vite dev server:
```bash
npm run dev
```
Build the Chrome extension:
@@ -16,4 +22,13 @@ Build the Chrome extension:
npm run build
```
Load the generated `dist/` folder in Chrome as an unpacked extension.
The deployable extension output is `dist/`. Load `dist/` in Chrome as an unpacked extension, or point deployment tooling at that folder. `npm run build` runs TypeScript, Vite, and a post-build check that verifies `dist/manifest.json` and the popup entry exist.
## Codex
Codex setup and action commands are declared in `.codex/environments/environment.toml`:
- Setup: `npm ci`
- Dev: `npm run dev:codex`
- Build: `npm run build:codex`
- Preview: `npm run preview`
+8 -1
View File
@@ -13,7 +13,14 @@ Important files:
- `src/main.ts`: Popup UI behavior.
- `index.html`: Popup document.
Build with `npm run build`. Load the generated `dist/` folder in Chrome as an unpacked extension. Do not edit `dist/` directly.
Build with `npm run build`. The deployable output directory is `dist/`; load that folder in Chrome as an unpacked extension or point deployment tooling at it. Do not edit `dist/` directly.
Codex commands:
- Setup: `npm run codex:setup`
- Dev: `npm run dev:codex`
- Build: `npm run build:codex`
- Verify output: `npm run verify:dist`
Required env variables:
+11 -2
View File
@@ -5,6 +5,11 @@
"project_type": "chrome-extension",
"language": "typescript",
"package_manager": "npm",
"deployable_output": {
"path": "dist/",
"type": "chrome-extension",
"description": "Build output is self-contained and can be loaded directly as an unpacked Chrome extension."
},
"entrypoints": {
"popup_html": "index.html",
"popup_script": "src/main.ts",
@@ -14,10 +19,14 @@
"generated_manifest": "dist/manifest.json"
},
"commands": {
"install": "npm install",
"install": "npm ci",
"codex_setup": "npm run codex:setup",
"dev": "npm run dev",
"codex_dev": "npm run dev:codex",
"build": "npm run build",
"preview": "npm run preview"
"codex_build": "npm run build:codex",
"preview": "npm run preview",
"verify_dist": "npm run verify:dist"
},
"environment": {
"example_file": ".env.example",
+10 -3
View File
@@ -5,13 +5,20 @@
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc --noEmit && vite build",
"preview": "vite preview"
"codex:setup": "npm ci",
"dev": "vite --host 0.0.0.0",
"dev:codex": "npm run dev",
"build": "tsc --noEmit && vite build && npm run verify:dist",
"build:codex": "npm run build",
"preview": "vite preview --host 0.0.0.0",
"verify:dist": "node scripts/verify-dist.mjs"
},
"keywords": [],
"author": "",
"license": "ISC",
"deploy": {
"outputDir": "dist"
},
"dependencies": {
"axios": "^1.18.1",
"dotenv": "^17.4.2",
+33
View File
@@ -0,0 +1,33 @@
import { existsSync, readFileSync } from "node:fs";
import { join } from "node:path";
const distDir = "dist";
const manifestPath = join(distDir, "manifest.json");
function fail(message) {
console.error(message);
process.exitCode = 1;
}
if (!existsSync(distDir)) {
fail("Missing dist/ output directory. Run vite build first.");
} else if (!existsSync(manifestPath)) {
fail("Missing dist/manifest.json. The built folder is not loadable as a Chrome extension.");
} else {
const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
const popup = manifest.action?.default_popup;
if (manifest.manifest_version !== 3) {
fail("dist/manifest.json must be a Manifest V3 extension manifest.");
}
if (!popup) {
fail("dist/manifest.json is missing action.default_popup.");
} else if (!existsSync(join(distDir, popup))) {
fail(`dist/${popup} does not exist.`);
}
}
if (!process.exitCode) {
console.log("dist/ is ready to load as an unpacked Chrome extension.");
}