Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
3cb63f5
Update NetlifyDeploy component to use new ActionCallbackData interfac…
Gerome-Elassaad Jan 21, 2026
bea6425
Update VercelDeploy component to use new ActionCallbackData interface…
Gerome-Elassaad Jan 21, 2026
70c4570
Remove BuiltInToolService usage from stream-text.ts
Gerome-Elassaad Jan 21, 2026
d26e876
Update useMessageParser to use new StreamingMessageParser interface a…
Gerome-Elassaad Jan 21, 2026
c75a351
Update message-parser test snapshot to use partId instead of messageId
Gerome-Elassaad Jan 21, 2026
39b19ed
Refactor action-runner.ts to use codinit-agent modules and updated in…
Gerome-Elassaad Jan 21, 2026
bd6bb30
Update workbench.ts imports to use codinit-agent modules
Gerome-Elassaad Jan 21, 2026
ab12c66
Remove BuiltInToolService usage from api.chat.ts
Gerome-Elassaad Jan 21, 2026
def1f36
Rename BoltAction to CodinitAction and BoltActionData to CodinitActio…
Gerome-Elassaad Jan 21, 2026
860a94f
Add workDirRelative and readPath utility functions to fileUtils.ts
Gerome-Elassaad Jan 21, 2026
88195e0
Update package.json with new dependencies and version updates
Gerome-Elassaad Jan 21, 2026
9874907
Update tsconfig.json with codinit-agent path mapping and formatting
Gerome-Elassaad Jan 21, 2026
f71528f
Remove builtin-tools.json file
Gerome-Elassaad Jan 21, 2026
623d96d
Remove tool-registry.ts file
Gerome-Elassaad Jan 21, 2026
b2aa188
Remove tools.json file
Gerome-Elassaad Jan 21, 2026
0b3cead
Remove message-parser.spec.ts file
Gerome-Elassaad Jan 21, 2026
11c5b9f
Remove message-parser.ts file
Gerome-Elassaad Jan 21, 2026
821c5b2
Remove builtInToolService.ts file
Gerome-Elassaad Jan 21, 2026
f90881d
Add GitHub workflow for releasing system prompts
Gerome-Elassaad Jan 21, 2026
0ed97f3
Add .kiro directory with configuration files
Gerome-Elassaad Jan 21, 2026
d998fc4
Add server-side chat utilities
Gerome-Elassaad Jan 21, 2026
ed12654
Add server-side environment and LLM provider utilities
Gerome-Elassaad Jan 21, 2026
df60caa
Add usage tracking and common utilities
Gerome-Elassaad Jan 21, 2026
3d80906
Add compression and deployment utilities
Gerome-Elassaad Jan 21, 2026
6aa85ee
Add project and container state stores
Gerome-Elassaad Jan 21, 2026
76ad0c9
Add process utilities, build scripts, and codinit-agent package
Gerome-Elassaad Jan 21, 2026
4deee8a
Add package manager files and issue reproduction script
Gerome-Elassaad Jan 21, 2026
2031389
Add test agent and type definitions
Gerome-Elassaad Jan 21, 2026
e52dbd7
Update .gitignore file
Gerome-Elassaad Jan 21, 2026
7400574
Fix unused deployArtifact variable in CloudflareDeploy
Gerome-Elassaad Jan 21, 2026
b379afe
Fix unused providerMetadata parameter in server usage.ts
Gerome-Elassaad Jan 21, 2026
7ca7707
Fix relative import and unused OutputLabels in action-runner.ts
Gerome-Elassaad Jan 21, 2026
a4d8c79
Update chat.ts
Gerome-Elassaad Jan 21, 2026
9b312b4
Update env.ts
Gerome-Elassaad Jan 21, 2026
1aab16f
Update provider.ts
Gerome-Elassaad Jan 21, 2026
3872a37
Update stream-text.ts
Gerome-Elassaad Jan 21, 2026
47cc1b0
Update codinitSiteUrl.ts
Gerome-Elassaad Jan 21, 2026
9bb28ef
Update annotations.ts
Gerome-Elassaad Jan 21, 2026
6ad207a
Update usage.ts
Gerome-Elassaad Jan 21, 2026
f04d981
Update compression.server.ts
Gerome-Elassaad Jan 21, 2026
c6a0285
Update deployToolOutputLabels.ts
Gerome-Elassaad Jan 21, 2026
abfed32
Update containerBootState.ts
Gerome-Elassaad Jan 21, 2026
0cc9e69
Update dashboardPath.ts
Gerome-Elassaad Jan 21, 2026
88e10e1
Update workbench.ts
Gerome-Elassaad Jan 21, 2026
30c4367
Update fileUtils.ts
Gerome-Elassaad Jan 21, 2026
5e03509
Update process.ts
Gerome-Elassaad Jan 21, 2026
3150f9c
Fix lint errors in usage.ts
Gerome-Elassaad Jan 21, 2026
285cc9f
Update CloudflareDeploy.client.tsx
Gerome-Elassaad Jan 21, 2026
e909b00
Update NetlifyDeploy.client.tsx
Gerome-Elassaad Jan 21, 2026
62547e8
Update VercelDeploy.client.tsx
Gerome-Elassaad Jan 21, 2026
33b8a37
Update utils.ts
Gerome-Elassaad Jan 21, 2026
ca01109
Update action-runner.ts
Gerome-Elassaad Jan 21, 2026
e9d34a4
Update api.chat.ts
Gerome-Elassaad Jan 21, 2026
691e4fc
Update usage.ts
Gerome-Elassaad Jan 21, 2026
86c7316
Update workbench.ts
Gerome-Elassaad Jan 21, 2026
ace2d43
Update fileUtils.ts
Gerome-Elassaad Jan 21, 2026
0bf1162
Fix remaining lint errors
Gerome-Elassaad Jan 21, 2026
dc45a98
Fix final lint and type errors
Gerome-Elassaad Jan 21, 2026
6054a23
updated package
Gerome-Elassaad Jan 21, 2026
9070c19
Delete pnpm-lock.yaml
Gerome-Elassaad Jan 24, 2026
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
61 changes: 61 additions & 0 deletions .github/workflows/release_system_prompts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Create System Prompts Release

on:
push:
branches:
- main
paths:
- 'codinit-agent/prompts/**'
workflow_dispatch: # Allow manual triggering

permissions:
contents: write
pull-requests: read

jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup and Build
uses: ./.github/actions/setup-and-build

- name: Build System Prompts
run: |
pnpm run build:system-prompts
node dist/buildSystemPrompts.js

- name: Create Release
id: create_release
uses: rymndhng/release-on-push-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
bump_version_scheme: patch
tag_prefix: prompts-v
release_name: 'codinit System Prompts <RELEASE_VERSION>'
release_body: |
## codinit System Prompts Release

This release contains the compiled system prompts used by the codinit AI assistant.

### Files included:
- `codinit-system-prompts.txt` - Complete system prompts as sent to the AI model

Generated automatically from the latest prompt changes in the codinit-agent.

- name: Upload Release Assets
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ -f "codinit-system-prompts.txt" ]; then
gh release upload "${{ steps.create_release.outputs.tag_name }}" "codinit-system-prompts.txt" --clobber
echo "✅ Uploaded codinit-system-prompts.txt to release"
else
echo "❌ codinit-system-prompts.txt not found"
exit 1
fi
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,5 @@ CLAUDE.md
AGENTS.md*
.mcp.json
.claude
backend
backend
.kiro
57 changes: 43 additions & 14 deletions app/components/deploy/CloudflareDeploy.client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import { toast } from 'react-toastify';
import { useStore } from '@nanostores/react';
import { cloudflareConnection } from '~/lib/stores/cloudflare';
import { workbenchStore } from '~/lib/stores/workbench';
import { alertsStore } from '~/lib/stores/alerts';
import { webcontainer } from '~/lib/webcontainer';
import { path } from '~/utils/path';
import { useState } from 'react';
import type { ActionCallbackData } from '~/lib/runtime/message-parser';
import type { ActionCallbackData } from 'codinit-agent/message-parser';
import { makePartId } from 'codinit-agent/partId';
import { chatId } from '~/lib/persistence/useChatHistory';

export function useCloudflareDeploy() {
Expand Down Expand Up @@ -35,21 +37,27 @@ export function useCloudflareDeploy() {

// Create a deployment artifact for visual feedback
const deploymentId = `deploy-cloudflare-project`;
const partId = makePartId(deploymentId, 0);
workbenchStore.addArtifact({
id: deploymentId,
messageId: deploymentId,
partId,
title: 'Cloudflare Pages Deployment',
type: 'standalone',
});

const deployArtifact = workbenchStore.artifacts.get()[deploymentId];

// Notify that build is starting
deployArtifact.runner.handleDeployAction('building', 'running', { source: 'cloudflare' });
alertsStore.setDeployAlert({
type: 'info',
title: 'Cloudflare Deployment',
description: 'Building project...',
stage: 'building',
buildStatus: 'running',
source: 'cloudflare',
});

const actionId = 'build-' + Date.now();
const actionData: ActionCallbackData = {
messageId: 'cloudflare build',
partId: makePartId('cloudflare-build', 0),
artifactId: artifact.id,
actionId,
action: {
Expand All @@ -61,20 +69,32 @@ export function useCloudflareDeploy() {
// Add the action first
artifact.runner.addAction(actionData);

// Then run it
await artifact.runner.runAction(actionData);
// Run the build action
await artifact.runner.runAction(actionData, { isStreaming: false });

if (!artifact.runner.buildOutput) {
// Notify that build failed
deployArtifact.runner.handleDeployAction('building', 'failed', {
error: 'Build failed. Check the terminal for details.',
alertsStore.setDeployAlert({
type: 'error',
title: 'Cloudflare Deployment Failed',
description: 'Build failed. Check the terminal for details.',
stage: 'building',
buildStatus: 'failed',
source: 'cloudflare',
});
throw new Error('Build failed');
}

// Notify that build succeeded and deployment is starting
deployArtifact.runner.handleDeployAction('deploying', 'running', { source: 'cloudflare' });
alertsStore.setDeployAlert({
type: 'info',
title: 'Cloudflare Deployment',
description: 'Build successful. Starting deployment...',
stage: 'building',
buildStatus: 'complete',
deployStatus: 'running',
source: 'cloudflare',
});

// Get the build files
const container = await webcontainer;
Expand Down Expand Up @@ -156,8 +176,12 @@ export function useCloudflareDeploy() {
console.error('Invalid deploy response:', data);

// Notify that deployment failed
deployArtifact.runner.handleDeployAction('deploying', 'failed', {
error: data.error || 'Invalid deployment response',
alertsStore.setDeployAlert({
type: 'error',
title: 'Cloudflare Deployment Failed',
description: data.error || 'Invalid deployment response',
stage: 'deploying',
deployStatus: 'failed',
source: 'cloudflare',
});
throw new Error(data.error || 'Invalid deployment response');
Expand All @@ -169,7 +193,12 @@ export function useCloudflareDeploy() {
}

// Notify that deployment completed successfully
deployArtifact.runner.handleDeployAction('complete', 'complete', {
alertsStore.setDeployAlert({
type: 'success',
title: 'Cloudflare Deployment Complete',
description: 'Your project has been deployed successfully!',
stage: 'complete',
deployStatus: 'complete',
url: data.deploy.url,
source: 'cloudflare',
});
Expand Down
73 changes: 55 additions & 18 deletions app/components/deploy/NetlifyDeploy.client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import { toast } from 'react-toastify';
import { useStore } from '@nanostores/react';
import { netlifyConnection } from '~/lib/stores/netlify';
import { workbenchStore } from '~/lib/stores/workbench';
import { alertsStore } from '~/lib/stores/alerts';
import { webcontainer } from '~/lib/webcontainer';
import { path } from '~/utils/path';
import { useState } from 'react';
import type { ActionCallbackData } from '~/lib/runtime/message-parser';
import type { ActionCallbackData } from 'codinit-agent/message-parser';
import { makePartId } from 'codinit-agent/partId';
import { chatId } from '~/lib/persistence/useChatHistory';

export function useNetlifyDeploy() {
Expand Down Expand Up @@ -35,22 +37,28 @@ export function useNetlifyDeploy() {

// Create a deployment artifact for visual feedback
const deploymentId = `deploy-artifact`;
const partId = makePartId(deploymentId, 0);
workbenchStore.addArtifact({
id: deploymentId,
messageId: deploymentId,
partId,
title: 'Netlify Deployment',
type: 'standalone',
});

const deployArtifact = workbenchStore.artifacts.get()[deploymentId];

// Notify that build is starting
deployArtifact.runner.handleDeployAction('building', 'running', { source: 'netlify' });
alertsStore.setDeployAlert({
type: 'info',
title: 'Netlify Deployment',
description: 'Building project...',
stage: 'building',
buildStatus: 'running',
source: 'netlify',
});

// Set up build action
const actionId = 'build-' + Date.now();
const actionData: ActionCallbackData = {
messageId: 'netlify build',
partId: makePartId('netlify-build', 0),
artifactId: artifact.id,
actionId,
action: {
Expand All @@ -62,20 +70,32 @@ export function useNetlifyDeploy() {
// Add the action first
artifact.runner.addAction(actionData);

// Then run it
await artifact.runner.runAction(actionData);
// Run the build action
await artifact.runner.runAction(actionData, { isStreaming: false });

if (!artifact.runner.buildOutput) {
// Notify that build failed
deployArtifact.runner.handleDeployAction('building', 'failed', {
error: 'Build failed. Check the terminal for details.',
alertsStore.setDeployAlert({
type: 'error',
title: 'Netlify Deployment Failed',
description: 'Build failed. Check the terminal for details.',
stage: 'building',
buildStatus: 'failed',
source: 'netlify',
});
throw new Error('Build failed');
}

// Notify that build succeeded and deployment is starting
deployArtifact.runner.handleDeployAction('deploying', 'running', { source: 'netlify' });
alertsStore.setDeployAlert({
type: 'info',
title: 'Netlify Deployment',
description: 'Build successful. Starting deployment...',
stage: 'building',
buildStatus: 'complete',
deployStatus: 'running',
source: 'netlify',
});

// Get the build files
const container = await webcontainer;
Expand Down Expand Up @@ -158,8 +178,12 @@ export function useNetlifyDeploy() {
console.error('Invalid deploy response:', data);

// Notify that deployment failed
deployArtifact.runner.handleDeployAction('deploying', 'failed', {
error: data.error || 'Invalid deployment response',
alertsStore.setDeployAlert({
type: 'error',
title: 'Netlify Deployment Failed',
description: data.error || 'Invalid deployment response',
stage: 'deploying',
deployStatus: 'failed',
source: 'netlify',
});
throw new Error(data.error || 'Invalid deployment response');
Expand Down Expand Up @@ -188,8 +212,12 @@ export function useNetlifyDeploy() {

if (deploymentStatus.state === 'error') {
// Notify that deployment failed
deployArtifact.runner.handleDeployAction('deploying', 'failed', {
error: 'Deployment failed: ' + (deploymentStatus.error_message || 'Unknown error'),
alertsStore.setDeployAlert({
type: 'error',
title: 'Netlify Deployment Failed',
description: 'Deployment failed: ' + (deploymentStatus.error_message || 'Unknown error'),
stage: 'deploying',
deployStatus: 'failed',
source: 'netlify',
});
throw new Error('Deployment failed: ' + (deploymentStatus.error_message || 'Unknown error'));
Expand All @@ -206,8 +234,12 @@ export function useNetlifyDeploy() {

if (attempts >= maxAttempts) {
// Notify that deployment timed out
deployArtifact.runner.handleDeployAction('deploying', 'failed', {
error: 'Deployment timed out',
alertsStore.setDeployAlert({
type: 'error',
title: 'Netlify Deployment Failed',
description: 'Deployment timed out',
stage: 'deploying',
deployStatus: 'failed',
source: 'netlify',
});
throw new Error('Deployment timed out');
Expand All @@ -219,7 +251,12 @@ export function useNetlifyDeploy() {
}

// Notify that deployment completed successfully
deployArtifact.runner.handleDeployAction('complete', 'complete', {
alertsStore.setDeployAlert({
type: 'success',
title: 'Netlify Deployment Complete',
description: 'Your project has been deployed successfully!',
stage: 'complete',
deployStatus: 'complete',
url: deploymentStatus.ssl_url || deploymentStatus.url,
source: 'netlify',
});
Expand Down
Loading