Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
19 changes: 19 additions & 0 deletions .citemplate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
version: 1
preset: nextjs
checks:
required: [ci, test]
license:
deny: [GPL-2.0, GPL-3.0]
security:
audit_level: critical
dependency_review: false
codeql: false
sbom: false
slsa_provenance: false
ossf_scorecard: false
pr_feedback:
enabled: true
mode: aggregated
flaky_hints: true
branches:
protected: [main]
9 changes: 9 additions & 0 deletions .github/workflows/commitlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
name: Commitlint
on:
pull_request:
branches: [main]
jobs:
commitlint:
uses: Solvely-Colin/solvely-launchpad/.github/workflows/commitlint.yml@v1
with:
strict: false
9 changes: 9 additions & 0 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
name: Coverage
on:
push:
branches: [main]
jobs:
coverage:
uses: Solvely-Colin/solvely-launchpad/.github/workflows/coverage.yml@v1
with:
package-manager: npm
67 changes: 7 additions & 60 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,64 +1,11 @@
name: Release to npm

name: Release
on:
release:
types: [published]

permissions: {}

jobs:
publish:
name: Publish to npm
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
registry-url: https://registry.npmjs.org

- run: npm ci
- run: npm run build
- run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

release-notes:
name: Generate release notes
needs: publish
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: write
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Update release notes
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2
with:
generate_release_notes: true

smoke-test:
name: Post-publish smoke test
needs: publish
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
steps:
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
registry-url: https://registry.npmjs.org

- name: Wait for npm propagation and verify
run: |
VERSION=$(echo "${{ github.event.release.tag_name }}" | sed 's/^v//')
for i in $(seq 1 12); do
npm view quorum-ai@$VERSION version && break || sleep 10
done
npx -p quorum-ai@$VERSION quorum --version
release:
uses: Solvely-Colin/solvely-launchpad/.github/workflows/release.yml@v1
with:
package-name: quorum-ai
secrets:
npm-token: ${{ secrets.NPM_TOKEN }}
36 changes: 5 additions & 31 deletions .github/workflows/scheduled.yml
Original file line number Diff line number Diff line change
@@ -1,37 +1,11 @@
name: Scheduled Maintenance

on:
schedule:
- cron: '0 9 * * 1' # Monday 9am UTC
- cron: '0 9 * * 1'
workflow_dispatch:

permissions:
contents: read
issues: write

jobs:
audit:
name: Dependency audit
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm audit --audit-level=high

stale:
name: Stale issues
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9
with:
stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.'
days-before-stale: 60
days-before-close: 14
stale-issue-label: stale
exempt-issue-labels: 'pinned,security,enhancement'
maintenance:
uses: Solvely-Colin/solvely-launchpad/.github/workflows/scheduled.yml@v1
with:
package-manager: npm
34 changes: 22 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,16 @@ A **synthesis** phase follows: the runner-up (not the winner, to reduce bias) me

Quorum auto-detects providers from environment variables:

| Provider | Environment Variable | Install |
|----------|---------------------|---------|
| OpenAI | `OPENAI_API_KEY` | [platform.openai.com](https://platform.openai.com) |
| Anthropic (Claude) | `ANTHROPIC_API_KEY` | [console.anthropic.com](https://console.anthropic.com) |
| Google (Gemini) | `GOOGLE_GENERATIVE_AI_API_KEY` | [aistudio.google.com](https://aistudio.google.com) |
| Kimi (Moonshot) | `KIMI_API_KEY` | [platform.moonshot.cn](https://platform.moonshot.cn) |
| DeepSeek | `DEEPSEEK_API_KEY` | [platform.deepseek.com](https://platform.deepseek.com) |
| Mistral | `MISTRAL_API_KEY` | [console.mistral.ai](https://console.mistral.ai) |
| Groq | `GROQ_API_KEY` | [console.groq.com](https://console.groq.com) |
| Ollama | *(local, no key)* | [ollama.com](https://ollama.com) |
| Provider | Environment Variable | Install |
| ------------------ | ------------------------------ | ------------------------------------------------------ |
| OpenAI | `OPENAI_API_KEY` | [platform.openai.com](https://platform.openai.com) |
| Anthropic (Claude) | `ANTHROPIC_API_KEY` | [console.anthropic.com](https://console.anthropic.com) |
| Google (Gemini) | `GOOGLE_GENERATIVE_AI_API_KEY` | [aistudio.google.com](https://aistudio.google.com) |
| Kimi (Moonshot) | `KIMI_API_KEY` | [platform.moonshot.cn](https://platform.moonshot.cn) |
| DeepSeek | `DEEPSEEK_API_KEY` | [platform.deepseek.com](https://platform.deepseek.com) |
| Mistral | `MISTRAL_API_KEY` | [console.mistral.ai](https://console.mistral.ai) |
| Groq | `GROQ_API_KEY` | [console.groq.com](https://console.groq.com) |
| Ollama | _(local, no key)_ | [ollama.com](https://ollama.com) |

```bash
# Set your keys, then:
Expand All @@ -74,6 +74,7 @@ quorum providers test # verify they work
```

Or add manually:

```bash
quorum providers add --name deepseek --type deepseek --model deepseek-chat --env DEEPSEEK_API_KEY
```
Expand Down Expand Up @@ -156,8 +157,8 @@ challengeStyle: adversarial
evidence: strict
adaptive: balanced
roles:
claude: "OWASP security expert"
kimi: "penetration tester"
claude: 'OWASP security expert'
kimi: 'penetration tester'
votingMethod: condorcet
```

Expand Down Expand Up @@ -205,6 +206,7 @@ quorum mcp
```

Add to Claude Desktop config:

```json
{
"mcpServers": {
Expand Down Expand Up @@ -235,3 +237,11 @@ npm run format # format
## License

[MIT](LICENSE) © Colin Johnson

## CI/CD

Managed by `solvely-launchpad`. Update with:

```bash
npx solvely-launchpad migrate --from v1 --to v1.x
```