用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/jeremylongshore/tons-of-skills-marketplace --skill juicebox-ci-integration命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Deploy a LangChain 1.0 / LangGraph 1.0 app to Cloud Run, Vercel, or LangServe correctly — with timeouts sized for chain length, cold-start mitigation, SSE anti-buffering headers, and Secret Manager over .env. Use when prepping a first production deploy, debugging a stream that hangs behind a proxy, or diagnosing p99 latency spikes. Trigger with "langchain deploy", "langchain cloud run", "langchain vercel python", "langchain langserve", or "langchain docker".
Build a correct LangGraph 1.0 ReAct agent with create_react_agent — typed tools, error propagation, recursion caps, and stop conditions that actually stop. Use when writing a first tool-calling agent, migrating from AgentExecutor or initialize_agent, or diagnosing an agent that loops on vague prompts. Trigger with "langgraph agent", "create_react_agent", "langgraph tool calling", "AgentExecutor migration", or "agent loop cost".
Build LangGraph 1.0 human-in-the-loop approval flows with interrupt_before / interrupt_after and Command(resume=...) — JSON-serializable state, clean resume semantics, and UI wiring for approval decisions. Use when adding an approval gate before an expensive tool call, wiring a Slack/web UI for agent approvals, or debugging a graph that crashes on interrupt. Trigger with "langgraph human in loop", "langgraph interrupt_before", "langgraph approval flow", "Command resume", "langgraph HITL".
正在显示 SKILL.md
| name | juicebox-ci-integration |
| description | Configure Juicebox CI/CD. Trigger: "juicebox ci", "juicebox pipeline". |
| allowed-tools | Read, Write, Edit, Bash(npm:*), Grep |
| version | 1.16.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","recruiting","juicebox"] |
| compatibility | Designed for Claude Code |
Set up CI/CD for Juicebox AI data analysis integrations: run unit tests with mocked dataset and analysis responses on every PR, validate live API connectivity for data queries on merge to main. Juicebox provides AI-powered data exploration and visualization, so CI pipelines verify dataset upload logic, analysis execution, and result parsing workflows.
# .github/workflows/juicebox-ci.yml
name: Juicebox CI
on:
pull_request:
paths: ['src/juicebox/**', 'tests/**']
push:
branches: [main]
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm ci
- run: npm test -- --reporter=verbose
integration-tests:
if: github.ref == 'refs/heads/main'
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
// tests/juicebox-service.test.ts
import { describe, it, expect, vi } from 'vitest';
import { analyzeDataset, getAnalysisResults } from '../src/juicebox-service';
vi.mock('../src/juicebox-client', () => ({
JuiceboxClient: vi.fn().mockImplementation(() => ({
createAnalysis: vi.fn().mockResolvedValue({
analysisId: 'ana_abc123',
status: 'processing',
datasetId: 'ds_xyz',
}),
getAnalysis: vi.fn().mockResolvedValue({
analysisId: 'ana_abc123',
status: 'completed',
results: {
summary: 'Revenue increased 15% QoQ',
charts: [{ type: 'bar', title: 'Revenue by Quarter' }],
insights: ['Q4 drove majority of growth', 'APAC region outperformed'],
},
}),
listDatasets: vi.fn().mockResolvedValue({
datasets: [{ id: 'ds_xyz', name: 'Sales Data', : }],
}),
})),
}));
(, {
(, () => {
result = (, );
(result.).();
(result.).();
});
(, () => {
results = ();
(results.).();
(results..).();
});
});
// tests/integration/juicebox.integration.test.ts
import { describe, it, expect } from 'vitest';
const hasKey = !!process.env.JUICEBOX_API_KEY;
describe.skipIf(!hasKey)('Juicebox Live API', () => {
it('lists available datasets', async () => {
const res = await fetch('https://api.juicebox.ai/v1/datasets', {
headers: { Authorization: `Bearer ${process.env.JUICEBOX_API_KEY}` },
});
expect(res.status).toBe(200);
const body = await res.json();
expect(body).toHaveProperty('datasets');
});
});
| CI Issue | Cause | Fix |
|---|---|---|
401 Unauthorized | Invalid API key | Regenerate at juicebox.ai account settings |
Analysis stuck on processing | Large dataset or complex query | Increase polling timeout to 120s |
| Dataset not found (404) | Dataset ID changed or deleted | Use listDatasets to get a valid ID dynamically |
| Rate limit (429) | Too many concurrent analyses | Queue analyses and limit to 2 parallel runs |
| Empty insights array | Insufficient data for AI analysis | Ensure test dataset has 100+ rows with varied data |
See juicebox-deploy-integration.