Skip to content

Commit 6dfbf7e

Browse files
committed
feat: standalone hardening (AgentRuntime + state centralization) + AsyncAPI protocol contract (#273)
* feat: Fastify server with WebSocket, CLI entry point (npx pixel-agents) * feat: server-side asset loading, WebSocket state delivery * refactor: extract AgentRuntime as shared lifecycle core for VS Code + standalone * refactor: centralize all state in ~/.pixel-agents/ * feat: standalone hardening + AsyncAPI protocol contract
1 parent 0f6be0a commit 6dfbf7e

38 files changed

Lines changed: 33485 additions & 5150 deletions

.github/workflows/ci.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,25 @@ jobs:
6060
working-directory: server
6161
run: npm ci
6262

63+
# --- Protocol spec checks (blocking) ---
64+
65+
- name: Validate AsyncAPI spec
66+
id: validate_spec
67+
if: always() && steps.install_root.outcome == 'success'
68+
run: npm run asyncapi:validate
69+
continue-on-error: true
70+
71+
- name: Generated messages drift check
72+
id: messages_drift
73+
if: always() && steps.install_root.outcome == 'success'
74+
run: |
75+
npm run asyncapi:generate
76+
if ! git diff --exit-code core/src/messages.ts; then
77+
echo "::error::core/src/messages.ts is out of sync with core/asyncapi.yaml. Run 'npm run asyncapi:generate' locally and commit the result."
78+
exit 1
79+
fi
80+
continue-on-error: true
81+
6382
# --- Quality Checks (blocking) ---
6483

6584
- name: Type Check
@@ -143,6 +162,8 @@ jobs:
143162
SETUP_NODE: ${{ steps.setup_node.outcome }}
144163
INSTALL_ROOT: ${{ steps.install_root.outcome }}
145164
INSTALL_WEBVIEW: ${{ steps.install_webview.outcome }}
165+
VALIDATE_SPEC: ${{ steps.validate_spec.outcome }}
166+
MESSAGES_DRIFT: ${{ steps.messages_drift.outcome }}
146167
TYPE_CHECK: ${{ steps.type_check.outcome }}
147168
LINT: ${{ steps.lint.outcome }}
148169
WEBVIEW_TEST: ${{ steps.webview_test.outcome }}
@@ -169,6 +190,8 @@ jobs:
169190
echo "| Setup Node | $(status "$SETUP_NODE") |"
170191
echo "| Install root deps | $(status "$INSTALL_ROOT") |"
171192
echo "| Install webview deps | $(status "$INSTALL_WEBVIEW") |"
193+
echo "| **Validate AsyncAPI spec** | $(status "$VALIDATE_SPEC") |"
194+
echo "| **Generated messages in sync** | $(status "$MESSAGES_DRIFT") |"
172195
echo "| **Type check** | $(status "$TYPE_CHECK") |"
173196
echo "| **Lint** | $(status "$LINT") |"
174197
echo "| **Webview tests** | $(status "$WEBVIEW_TEST") |"
@@ -190,6 +213,8 @@ jobs:
190213
SETUP_NODE: ${{ steps.setup_node.outcome }}
191214
INSTALL_ROOT: ${{ steps.install_root.outcome }}
192215
INSTALL_WEBVIEW: ${{ steps.install_webview.outcome }}
216+
VALIDATE_SPEC: ${{ steps.validate_spec.outcome }}
217+
MESSAGES_DRIFT: ${{ steps.messages_drift.outcome }}
193218
TYPE_CHECK: ${{ steps.type_check.outcome }}
194219
LINT: ${{ steps.lint.outcome }}
195220
WEBVIEW_TEST: ${{ steps.webview_test.outcome }}
@@ -199,6 +224,7 @@ jobs:
199224
run: |
200225
failed=0
201226
for step in CHECKOUT SETUP_NODE INSTALL_ROOT INSTALL_WEBVIEW \
227+
VALIDATE_SPEC MESSAGES_DRIFT \
202228
TYPE_CHECK LINT \
203229
WEBVIEW_TEST FORMAT_CHECK BUILD SERVER_TEST; do
204230
val=$(printenv "$step" 2>/dev/null || echo "skipped")

0 commit comments

Comments
 (0)