@bluefly/openstandardagents 0.2.4 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursorrules +84 -0
- package/.devfile.yaml +87 -0
- package/.env.example +25 -3
- package/.github/ISSUE_TEMPLATE/bug_report.yml +63 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +40 -0
- package/.github/workflows/dependabot-comment.yml +34 -0
- package/.github/workflows/pr-comment.yml +33 -0
- package/.github/workflows/release.yml +1 -1
- package/.husky/pre-commit +5 -0
- package/.kiro/config.json +21 -0
- package/.kiro/settings/mcp.json +61 -0
- package/.kiro/specs/scripts-migration-api-first/design.md +883 -0
- package/.kiro/specs/scripts-migration-api-first/requirements.md +165 -0
- package/.kiro/specs/scripts-migration-api-first/tasks.md +539 -0
- package/.kiro/specs/website-brand-identity/design.md +1060 -0
- package/.kiro/specs/website-brand-identity/requirements.md +287 -0
- package/.kiro/specs/website-brand-identity/tasks.md +981 -0
- package/.releaserc.json +5 -4
- package/.version.json +6 -0
- package/CHANGELOG.md +163 -96
- package/CONTRIBUTING.md +23 -5
- package/README.md +130 -43
- package/bin/ossa +24 -3
- package/bin/ossa-dev +42 -0
- package/bin/ossa-export +32 -0
- package/bin/ossa-generate +60 -0
- package/bin/ossa-health +40 -0
- package/bin/ossa-init +26 -0
- package/bin/ossa-validate-all +55 -0
- package/bin/ossa-version +23 -0
- package/bin/validate-ossa-0.2.4.ts +244 -0
- package/bin/validate-ossa-0.2.5-RC.ts +244 -0
- package/bin/validate-ossa.ts +273 -0
- package/dist/di-container.d.ts +1 -1
- package/dist/di-container.d.ts.map +1 -1
- package/dist/di-container.js.map +1 -1
- package/dist/repositories/schema.repository.d.ts +17 -2
- package/dist/repositories/schema.repository.d.ts.map +1 -1
- package/dist/repositories/schema.repository.js +102 -19
- package/dist/repositories/schema.repository.js.map +1 -1
- package/dist/services/generation.service.d.ts +7 -5
- package/dist/services/generation.service.d.ts.map +1 -1
- package/dist/services/generation.service.js +92 -44
- package/dist/services/generation.service.js.map +1 -1
- package/dist/services/github-sync/github-client.d.ts +14 -0
- package/dist/services/github-sync/github-client.d.ts.map +1 -0
- package/dist/services/github-sync/github-client.js +41 -0
- package/dist/services/github-sync/github-client.js.map +1 -0
- package/dist/services/github-sync/gitlab-client.d.ts +17 -0
- package/dist/services/github-sync/gitlab-client.d.ts.map +1 -0
- package/dist/services/github-sync/gitlab-client.js +42 -0
- package/dist/services/github-sync/gitlab-client.js.map +1 -0
- package/dist/services/github-sync/schemas.d.ts +46 -0
- package/dist/services/github-sync/schemas.d.ts.map +1 -0
- package/dist/services/github-sync/schemas.js +36 -0
- package/dist/services/github-sync/schemas.js.map +1 -0
- package/dist/services/github-sync/sync.service.d.ts +27 -0
- package/dist/services/github-sync/sync.service.d.ts.map +1 -0
- package/dist/services/github-sync/sync.service.js +99 -0
- package/dist/services/github-sync/sync.service.js.map +1 -0
- package/dist/services/gitlab-agent.service.d.ts +94 -0
- package/dist/services/gitlab-agent.service.d.ts.map +1 -0
- package/dist/services/gitlab-agent.service.js +162 -0
- package/dist/services/gitlab-agent.service.js.map +1 -0
- package/dist/services/migration.service.d.ts +3 -3
- package/dist/services/migration.service.d.ts.map +1 -1
- package/dist/services/migration.service.js +108 -61
- package/dist/services/migration.service.js.map +1 -1
- package/dist/services/release-automation/base-crud.service.d.ts +93 -0
- package/dist/services/release-automation/base-crud.service.d.ts.map +1 -0
- package/dist/services/release-automation/base-crud.service.js +68 -0
- package/dist/services/release-automation/base-crud.service.js.map +1 -0
- package/dist/services/release-automation/index.d.ts +12 -0
- package/dist/services/release-automation/index.d.ts.map +1 -0
- package/dist/services/release-automation/index.js +12 -0
- package/dist/services/release-automation/index.js.map +1 -0
- package/dist/services/release-automation/merge-request.service.d.ts +119 -0
- package/dist/services/release-automation/merge-request.service.d.ts.map +1 -0
- package/dist/services/release-automation/merge-request.service.js +212 -0
- package/dist/services/release-automation/merge-request.service.js.map +1 -0
- package/dist/services/release-automation/milestone.service.d.ts +104 -0
- package/dist/services/release-automation/milestone.service.d.ts.map +1 -0
- package/dist/services/release-automation/milestone.service.js +207 -0
- package/dist/services/release-automation/milestone.service.js.map +1 -0
- package/dist/services/release-automation/release.service.d.ts +118 -0
- package/dist/services/release-automation/release.service.d.ts.map +1 -0
- package/dist/services/release-automation/release.service.js +207 -0
- package/dist/services/release-automation/release.service.js.map +1 -0
- package/dist/services/release-automation/schemas/release.schema.d.ts +299 -0
- package/dist/services/release-automation/schemas/release.schema.d.ts.map +1 -0
- package/dist/services/release-automation/schemas/release.schema.js +269 -0
- package/dist/services/release-automation/schemas/release.schema.js.map +1 -0
- package/dist/services/release-automation/tag.service.d.ts +99 -0
- package/dist/services/release-automation/tag.service.d.ts.map +1 -0
- package/dist/services/release-automation/tag.service.js +180 -0
- package/dist/services/release-automation/tag.service.js.map +1 -0
- package/dist/services/release-automation/webhook.service.d.ts +37 -0
- package/dist/services/release-automation/webhook.service.d.ts.map +1 -0
- package/dist/services/release-automation/webhook.service.js +173 -0
- package/dist/services/release-automation/webhook.service.js.map +1 -0
- package/dist/services/runtime/claude/capability-mapper.d.ts +84 -0
- package/dist/services/runtime/claude/capability-mapper.d.ts.map +1 -0
- package/dist/services/runtime/claude/capability-mapper.js +245 -0
- package/dist/services/runtime/claude/capability-mapper.js.map +1 -0
- package/dist/services/runtime/claude/claude-adapter.d.ts +80 -0
- package/dist/services/runtime/claude/claude-adapter.d.ts.map +1 -0
- package/dist/services/runtime/claude/claude-adapter.js +287 -0
- package/dist/services/runtime/claude/claude-adapter.js.map +1 -0
- package/dist/services/runtime/claude/manifest-parser.d.ts +77 -0
- package/dist/services/runtime/claude/manifest-parser.d.ts.map +1 -0
- package/dist/services/runtime/claude/manifest-parser.js +169 -0
- package/dist/services/runtime/claude/manifest-parser.js.map +1 -0
- package/dist/services/runtime/claude/types.d.ts +115 -0
- package/dist/services/runtime/claude/types.d.ts.map +1 -0
- package/dist/services/runtime/claude/types.js +6 -0
- package/dist/services/runtime/claude/types.js.map +1 -0
- package/dist/services/runtime/openai.adapter.d.ts.map +1 -1
- package/dist/services/runtime/openai.adapter.js.map +1 -1
- package/dist/services/validation.service.d.ts.map +1 -1
- package/dist/services/validation.service.js +35 -11
- package/dist/services/validation.service.js.map +1 -1
- package/dist/services/validators/anthropic.validator.d.ts +2 -2
- package/dist/services/validators/anthropic.validator.d.ts.map +1 -1
- package/dist/services/validators/anthropic.validator.js +14 -9
- package/dist/services/validators/anthropic.validator.js.map +1 -1
- package/dist/services/validators/autogen.validator.d.ts +2 -2
- package/dist/services/validators/autogen.validator.d.ts.map +1 -1
- package/dist/services/validators/autogen.validator.js +18 -15
- package/dist/services/validators/autogen.validator.js.map +1 -1
- package/dist/services/validators/crewai.validator.d.ts +2 -2
- package/dist/services/validators/crewai.validator.d.ts.map +1 -1
- package/dist/services/validators/crewai.validator.js +18 -17
- package/dist/services/validators/crewai.validator.js.map +1 -1
- package/dist/services/validators/cursor.validator.d.ts +2 -2
- package/dist/services/validators/cursor.validator.d.ts.map +1 -1
- package/dist/services/validators/cursor.validator.js +15 -11
- package/dist/services/validators/cursor.validator.js.map +1 -1
- package/dist/services/validators/langchain.validator.d.ts +2 -2
- package/dist/services/validators/langchain.validator.d.ts.map +1 -1
- package/dist/services/validators/langchain.validator.js +14 -11
- package/dist/services/validators/langchain.validator.js.map +1 -1
- package/dist/services/validators/langflow.validator.d.ts +2 -2
- package/dist/services/validators/langflow.validator.d.ts.map +1 -1
- package/dist/services/validators/langflow.validator.js +14 -9
- package/dist/services/validators/langflow.validator.js.map +1 -1
- package/dist/services/validators/langgraph.validator.d.ts +2 -2
- package/dist/services/validators/langgraph.validator.d.ts.map +1 -1
- package/dist/services/validators/langgraph.validator.js +23 -18
- package/dist/services/validators/langgraph.validator.js.map +1 -1
- package/dist/services/validators/llamaindex.validator.d.ts +2 -2
- package/dist/services/validators/llamaindex.validator.d.ts.map +1 -1
- package/dist/services/validators/llamaindex.validator.js +19 -16
- package/dist/services/validators/llamaindex.validator.js.map +1 -1
- package/dist/services/validators/openai.validator.d.ts +2 -2
- package/dist/services/validators/openai.validator.d.ts.map +1 -1
- package/dist/services/validators/openai.validator.js +20 -16
- package/dist/services/validators/openai.validator.js.map +1 -1
- package/dist/services/validators/vercel-ai.validator.d.ts +2 -2
- package/dist/services/validators/vercel-ai.validator.d.ts.map +1 -1
- package/dist/services/validators/vercel-ai.validator.js +16 -15
- package/dist/services/validators/vercel-ai.validator.js.map +1 -1
- package/dist/spec/v0.2.0/ossa-0.2.0.schema.json +0 -0
- package/dist/spec/v0.2.1/ossa-0.2.1.schema.json +555 -0
- package/dist/spec/v0.2.3/CHANGELOG.md +7 -7
- package/dist/spec/v0.2.3/README.md +9 -9
- package/dist/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +18 -18
- package/{spec/v0.2.4-dev → dist/spec/v0.2.4}/CHANGELOG.md +8 -8
- package/dist/spec/{v0.2.4-dev → v0.2.4}/migrations/v0.2.3-to-v0.2.4.md +10 -10
- package/dist/spec/{v0.2.4-dev/ossa-0.2.4-dev.yaml → v0.2.4/ossa-0.2.4.yaml} +1 -1
- package/dist/spec/v0.2.5/CHANGELOG.md +401 -0
- package/dist/spec/v0.2.5/README.md +72 -0
- package/dist/spec/v0.2.5/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/dist/spec/v0.2.5/ossa-0.2.5.schema.json +1696 -0
- package/dist/spec/v0.2.5/ossa-0.2.5.yaml +581 -0
- package/dist/spec/v0.2.5-RC/CHANGELOG.md +401 -0
- package/dist/spec/v0.2.5-RC/README.md +72 -0
- package/{spec/v0.2.4-dev → dist/spec/v0.2.5-RC}/migrations/v0.2.3-to-v0.2.4.md +10 -10
- package/dist/spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json +1696 -0
- package/dist/spec/v0.2.5-RC/ossa-0.2.5-RC.yaml +581 -0
- package/dist/spec/v0.2.6/CHANGELOG.md +401 -0
- package/dist/spec/v0.2.6/README.md +72 -0
- package/dist/spec/v0.2.6/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/dist/spec/v0.2.6/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
- package/dist/spec/v0.2.6/ossa-0.2.6.schema.json +1786 -0
- package/dist/spec/v0.2.6/ossa-0.2.6.yaml +581 -0
- package/dist/spec/v0.2.6-dev/CHANGELOG.md +164 -0
- package/dist/spec/v0.2.6-dev/README.md +75 -0
- package/dist/spec/v0.2.6-dev/migrations/v0.2.2-to-v0.2.3.md +343 -0
- package/dist/spec/v0.2.6-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/dist/spec/v0.2.6-dev/ossa-0.2.5.schema.json +1696 -0
- package/dist/spec/v0.2.6-dev/ossa-0.2.5.yaml +581 -0
- package/dist/spec/{v0.2.5-dev/ossa-0.2.5-dev.schema.json → v0.2.6-dev/ossa-0.2.6-dev.schema.json} +323 -359
- package/dist/spec/v0.2.6-dev/ossa-0.2.6-dev.yaml +448 -0
- package/dist/spec/v0.2.7/core/agentgraph.md +324 -0
- package/dist/spec/v0.2.7/resources/agentgraph.yaml +135 -0
- package/dist/types/index.d.ts +6 -1
- package/dist/types/index.d.ts.map +1 -1
- package/docs/brand-guide/01-brand-overview.md +37 -0
- package/docs/brand-guide/02-logo-usage.md +43 -0
- package/docs/brand-guide/03-color-palette.md +70 -0
- package/docs/brand-guide/04-typography.md +82 -0
- package/docs/brand-guide/05-voice-and-tone.md +108 -0
- package/docs/brand-guide/06-visual-elements.md +137 -0
- package/docs/brand-guide/07-application-examples.md +153 -0
- package/docs/brand-guide/OssaLogo/OssA_Logo.svg +21 -0
- package/docs/brand-guide/OssaLogo/brand.af +0 -0
- package/docs/brand-guide/README.md +107 -0
- package/docs/comparison.md +315 -0
- package/docs/operations/automation-roadmap.md +245 -0
- package/docs/operations/github-sync-strategy.md +357 -0
- package/examples/anthropic/claude-assistant.ossa.json +5 -4
- package/examples/autogen/multi-agent.ossa.json +6 -4
- package/examples/bridges/Dockerfile.production +1 -1
- package/examples/crewai/research-team.ossa.json +14 -5
- package/examples/cursor/code-review-agent.ossa.json +21 -6
- package/examples/enterprise/agent.yml +1 -1
- package/examples/getting-started/hello-world-complete.ossa.yaml +2 -2
- package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +4 -4
- package/examples/langchain/chain-agent.ossa.json +21 -5
- package/examples/langflow/workflow-agent.ossa.json +2 -3
- package/examples/langgraph/state-machine-agent.ossa.json +2 -3
- package/examples/llamaindex/rag-agent.ossa.json +2 -3
- package/examples/openai/basic-agent.ossa.yaml +61 -0
- package/examples/openai/multi-tool-agent.ossa.json +188 -0
- package/examples/openai/swarm-agent.ossa.json +18 -5
- package/examples/openapi-extensions/README.md +1 -1
- package/examples/quickstart/support-agent.ossa.yaml +1 -1
- package/examples/vercel/edge-agent.ossa.json +5 -4
- package/infrastructure/gitlab-agent/rbac.yaml +126 -0
- package/infrastructure/gitlab-agent/values.yaml +150 -0
- package/infrastructure/k8s/monitoring/00-namespace.yaml +7 -0
- package/infrastructure/k8s/monitoring/01-prometheus.yaml +142 -0
- package/infrastructure/k8s/monitoring/02-grafana.yaml +63 -0
- package/infrastructure/k8s/monitoring/03-lightweight.yaml +121 -0
- package/infrastructure/k8s/monitoring/README.md +73 -0
- package/infrastructure/k8s/monitoring/deploy.sh +38 -0
- package/openapi/CHANGELOG.md +21 -0
- package/openapi/README.md +46 -0
- package/openapi/{ossa-core-api.openapi.yaml → core/ossa-core-api.openapi.yaml} +59 -4
- package/openapi/{ossa-registry.openapi.yaml → core/ossa-registry.openapi.yaml} +75 -2
- package/openapi/{unified-agent-gateway.openapi.yaml → core/unified-agent-gateway.openapi.yaml} +3 -3
- package/openapi/github-sync.yaml +115 -0
- package/openapi/reference-implementations/aiflow-bridge-api.openapi.yaml +136 -0
- package/openapi/reference-implementations/compliance-agent-api.openapi.yaml +192 -0
- package/openapi/reference-implementations/crewai-agent-api.openapi.yaml +149 -0
- package/openapi/reference-implementations/critic-agent-api.openapi.yaml +151 -0
- package/openapi/reference-implementations/document-analyzer-api.openapi.yaml +217 -0
- package/openapi/reference-implementations/getting-started-hello-world-api.openapi.yaml +149 -0
- package/openapi/reference-implementations/gitlab-ml-recommender-api.openapi.yaml +151 -0
- package/openapi/reference-implementations/governor-agent-api.openapi.yaml +193 -0
- package/openapi/reference-implementations/integrator-agent-api.openapi.yaml +165 -0
- package/openapi/reference-implementations/judge-agent-api.openapi.yaml +148 -0
- package/openapi/reference-implementations/k8s-troubleshooter-api.openapi.yaml +167 -0
- package/openapi/reference-implementations/langchain-agent-api.openapi.yaml +171 -0
- package/openapi/reference-implementations/monitor-agent-api.openapi.yaml +171 -0
- package/openapi/reference-implementations/orchestrator-agent-api.openapi.yaml +242 -0
- package/openapi/reference-implementations/quickstart-support-agent-api.openapi.yaml +187 -0
- package/openapi/{self-evolving-ecosystem.openapi.yaml → reference-implementations/self-evolving-ecosystem.openapi.yaml} +2 -2
- package/openapi/reference-implementations/worker-agent-api.openapi.yaml +208 -0
- package/openapi/reference-implementations/workflow-orchestrator-api.openapi.yaml +193 -0
- package/package.json +53 -22
- package/release.config.js +20 -5
- package/scripts/README.md +103 -0
- package/scripts/auto-rebase-mrs.ts +106 -0
- package/scripts/batch-dependabot.sh +57 -0
- package/scripts/bump-version.ts +57 -0
- package/scripts/configure-gitlab-branch-protection.ts +95 -0
- package/scripts/create-issue-helper.ts +238 -0
- package/scripts/create-milestone-issue.ts +73 -0
- package/scripts/enhanced-version-manager.ts +257 -0
- package/scripts/fix-schema-formats.js +82 -0
- package/scripts/gen-types.ts +51 -0
- package/scripts/gen-zod.ts +51 -0
- package/scripts/generate-agents-catalog.ts +77 -0
- package/scripts/generate-api-docs.ts +218 -0
- package/scripts/generate-cli-docs.ts +410 -0
- package/scripts/generate-config-docs.ts +109 -0
- package/scripts/generate-errors-docs.ts +76 -0
- package/scripts/generate-examples-docs.ts +99 -0
- package/scripts/generate-schema-docs.ts +296 -0
- package/scripts/generate-types-docs.ts +48 -0
- package/scripts/lib/exec.ts +37 -0
- package/scripts/lib/file-ops.ts +58 -0
- package/scripts/lib/version.ts +83 -0
- package/scripts/lowercase-docs.ts +43 -0
- package/scripts/manage-milestone-mrs.ts +279 -0
- package/scripts/process-doc-templates.ts +37 -0
- package/scripts/rebase-all-mrs.sh +75 -0
- package/scripts/schemas/package.schema.ts +75 -0
- package/scripts/setup-branch-protection.sh +33 -0
- package/scripts/sync-github-pr.sh +48 -0
- package/scripts/sync-version.js +40 -0
- package/scripts/sync-version.ts +39 -0
- package/scripts/sync-versions.ts +488 -0
- package/scripts/sync-wiki.sh +50 -0
- package/scripts/validate-all.js +127 -0
- package/scripts/validate-schema.ts +49 -0
- package/spec/v0.2.0/ossa-0.2.0.schema.json +0 -0
- package/spec/v0.2.1/ossa-0.2.1.schema.json +555 -0
- package/spec/v0.2.3/CHANGELOG.md +7 -7
- package/spec/v0.2.3/README.md +9 -9
- package/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +18 -18
- package/{dist/spec/v0.2.4-dev → spec/v0.2.4}/CHANGELOG.md +8 -8
- package/spec/v0.2.4/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/{v0.2.4-dev/ossa-0.2.4-dev.yaml → v0.2.4/ossa-0.2.4.yaml} +1 -1
- package/spec/v0.2.5/CHANGELOG.md +401 -0
- package/spec/v0.2.5/README.md +72 -0
- package/spec/v0.2.5/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/v0.2.5/ossa-0.2.5.schema.json +1696 -0
- package/spec/v0.2.5/ossa-0.2.5.yaml +581 -0
- package/spec/v0.2.5-RC/CHANGELOG.md +401 -0
- package/spec/v0.2.5-RC/README.md +72 -0
- package/spec/v0.2.5-RC/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json +1696 -0
- package/spec/v0.2.5-RC/ossa-0.2.5-RC.yaml +581 -0
- package/spec/v0.2.6/CHANGELOG.md +401 -0
- package/spec/v0.2.6/README.md +72 -0
- package/spec/v0.2.6/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/v0.2.6/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
- package/spec/v0.2.6/ossa-0.2.6.schema.json +1786 -0
- package/spec/v0.2.6/ossa-0.2.6.yaml +581 -0
- package/spec/v0.2.6-dev/CHANGELOG.md +164 -0
- package/spec/v0.2.6-dev/README.md +75 -0
- package/spec/v0.2.6-dev/migrations/v0.2.2-to-v0.2.3.md +343 -0
- package/spec/v0.2.6-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/v0.2.6-dev/ossa-0.2.5.schema.json +1696 -0
- package/spec/v0.2.6-dev/ossa-0.2.5.yaml +581 -0
- package/spec/{v0.2.5-dev/ossa-0.2.5-dev.schema.json → v0.2.6-dev/ossa-0.2.6-dev.schema.json} +323 -359
- package/spec/v0.2.6-dev/ossa-0.2.6-dev.yaml +448 -0
- package/spec/v0.2.7/core/agentgraph.md +324 -0
- package/spec/v0.2.7/resources/agentgraph.yaml +135 -0
- package/website/{.lighthouserc.js → .lighthouserc.ts} +5 -1
- package/website/DESIGN_SYSTEM_IMPLEMENTATION.md +445 -0
- package/website/Dockerfile +18 -5
- package/website/app/about/page.tsx +60 -51
- package/website/app/blog/[slug]/page.tsx +61 -20
- package/website/app/blog/page.tsx +120 -33
- package/website/app/design-guide/page.tsx +511 -0
- package/website/app/docs/[[...slug]]/page.tsx +641 -143
- package/website/app/ecosystem/page.tsx +146 -111
- package/website/app/examples/page.tsx +51 -41
- package/website/app/globals.scss +370 -0
- package/website/app/layout.tsx +2 -2
- package/website/app/license/page.tsx +183 -0
- package/website/app/not-found.tsx +18 -0
- package/website/app/page.tsx +513 -236
- package/website/app/page.tsx.bak +679 -0
- package/website/app/page.tsx.bak2 +649 -0
- package/website/app/playground/page.tsx +25 -45
- package/website/app/schema/page.tsx +423 -392
- package/website/app/specification/page.tsx +245 -169
- package/website/components/Logo.tsx +75 -2
- package/website/components/docs/DocsSidebar.tsx +40 -3
- package/website/components/docs/MarkdownContent.tsx +265 -47
- package/website/components/docs/VersionSelector.tsx +64 -8
- package/website/components/examples/ExamplesViewer.tsx +2 -2
- package/website/components/layout/Footer.tsx +6 -1
- package/website/components/layout/Header.tsx +44 -42
- package/website/components/schema/SchemaComponentsAccordion.tsx +84 -0
- package/website/components/schema/SchemaExplorer.tsx +4 -4
- package/website/components/ui/Badge.tsx +82 -0
- package/website/components/ui/Button.tsx +116 -0
- package/website/components/ui/Card.tsx +167 -0
- package/website/components/ui/Checkbox.tsx +141 -0
- package/website/components/ui/Input.tsx +169 -0
- package/website/components/ui/Radio.tsx +141 -0
- package/website/components/ui/Select.tsx +182 -0
- package/website/components/ui/Tag.tsx +158 -0
- package/website/components/ui/Textarea.tsx +195 -0
- package/website/components/ui/index.ts +11 -0
- package/website/content/blog/OpenAPI-AI-Agents-Standard.md +276 -276
- package/website/content/blog/Why-Formal-Standards-Matter-Now.md +3 -14
- package/website/content/blog/gitlab-kubernetes-agent-ecosystem.md +286 -0
- package/website/content/blog/introducing-ossa-framework.md +1 -1
- package/website/content/blog/ossa-production-results.md +5 -5
- package/website/content/blog/welcome-to-ossa.md +2 -2
- package/website/content/blog/why-ai-agents-need-open-standard.md +5 -5
- package/website/content/docs/{00-HOME.md → 00-home.md} +18 -25
- package/website/content/docs/adapters/openai-adapter.md +693 -0
- package/website/content/docs/agents/catalog.md +28 -0
- package/website/content/docs/aiflow-framework-integration-with-ossa.md +107 -0
- package/website/content/docs/api-reference/index.md +38 -0
- package/website/content/docs/api-reference/ossa-core-api.md +634 -0
- package/website/content/docs/api-reference/ossa-registry-api.md +515 -0
- package/website/content/docs/api-reference/unified-agent-gateway.md +599 -0
- package/website/content/docs/architecture/execution-flow.md +3 -3
- package/website/content/docs/architecture/multi-agent-systems.md +4 -4
- package/website/content/docs/architecture/overview.md +4 -4
- package/website/content/docs/architecture/stack-integration.md +4 -4
- package/website/content/docs/changelog.md +4 -4
- package/website/content/docs/cli-reference/index.md +111 -0
- package/website/content/docs/cli-reference/ossa-agents.md +70 -0
- package/website/content/docs/cli-reference/ossa-export.md +56 -0
- package/website/content/docs/cli-reference/ossa-generate.md +66 -0
- package/website/content/docs/cli-reference/ossa-gitlab-agent.md +57 -0
- package/website/content/docs/cli-reference/ossa-import.md +56 -0
- package/website/content/docs/cli-reference/ossa-init.md +57 -0
- package/website/content/docs/cli-reference/ossa-migrate.md +62 -0
- package/website/content/docs/cli-reference/ossa-run.md +66 -0
- package/website/content/docs/cli-reference/ossa-schema.md +57 -0
- package/website/content/docs/cli-reference/ossa-setup.md +57 -0
- package/website/content/docs/cli-reference/ossa-validate.md +66 -0
- package/website/content/docs/configuration/index.md +97 -0
- package/website/content/docs/contributing.md +2 -2
- package/website/content/docs/deployment/github-mirroring.md +924 -0
- package/website/content/docs/documentation.md +100 -0
- package/website/content/docs/ecosystem/framework-support.md +551 -11
- package/website/content/docs/errors/index.md +10 -0
- package/website/content/docs/{AIFlow-Framework-Integration-with-OSSA.md → examples/aiflow-framework-integration-with-ossa.md} +2 -2
- package/website/content/docs/examples/catalog.md +300 -0
- package/website/content/docs/for-audiences/{Students-Researchers.md → students-researchers.md} +1 -1
- package/website/content/docs/getting-started/index.md +92 -0
- package/website/content/docs/getting-started/installation.md +7 -7
- package/website/content/docs/getting-started/running-agents.md +215 -13
- package/{docs → website/content/docs}/getting-started.md +10 -6
- package/website/content/docs/integrations/aiflow.md +2 -2
- package/website/content/docs/integrations/drupal.md +2 -2
- package/website/content/docs/migration-guides/agent-schema-comparison.md +232 -0
- package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +5 -5
- package/website/content/docs/migration-guides/crewai-to-ossa.md +3 -3
- package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +11 -11
- package/{docs/migration → website/content/docs/migration-guides}/general-agent-schema.yml +1 -9
- package/website/content/docs/migration-guides/index.md +1 -1
- package/website/content/docs/migration-guides/langchain-to-ossa.md +17 -17
- package/website/content/docs/migration-guides/langflow-to-ossa.md +3 -3
- package/website/content/docs/migration-guides/openai-to-ossa.md +10 -10
- package/website/content/docs/openapi-extensions/examples.md +9 -9
- package/website/content/docs/openapi-extensions/index.md +59 -3
- package/website/content/docs/openapi-extensions/operation-extensions.md +61 -2
- package/website/content/docs/openapi-extensions/root-extensions.md +49 -3
- package/{docs/OSSA-COMPLIANT-BADGE.md → website/content/docs/ossa-compliant-badge.md} +18 -15
- package/website/content/docs/pre-release/index.md +10 -10
- package/website/content/docs/readme.md +35 -0
- package/website/content/docs/releases/v0.2.6.md +99 -0
- package/website/content/docs/schema-reference/agent-capabilities.md +50 -0
- package/website/content/docs/schema-reference/agent-id.md +52 -0
- package/website/content/docs/schema-reference/agent-name.md +50 -0
- package/website/content/docs/schema-reference/agent-role.md +54 -0
- package/website/content/docs/schema-reference/agent-spec.md +2 -2
- package/website/content/docs/schema-reference/agent-version.md +50 -0
- package/website/content/docs/schema-reference/autonomy.md +5 -5
- package/website/content/docs/schema-reference/constraints.md +5 -5
- package/website/content/docs/schema-reference/index.md +26 -157
- package/website/content/docs/schema-reference/llm-config.md +1 -1
- package/website/content/docs/schema-reference/observability.md +5 -5
- package/website/content/docs/schema-reference/ossa-manifest.md +6 -6
- package/website/content/docs/schema-reference/taxonomy.md +3 -3
- package/website/content/docs/types-reference/index.md +105 -0
- package/website/content/docs/use-cases/00-index.md +1 -1
- package/{docs/VERSIONING.md → website/content/docs/versioning.md} +9 -5
- package/website/dev.sh +53 -0
- package/website/docker-compose.dev.yml +36 -0
- package/website/lib/version.ts +18 -1
- package/website/lib/versions.json +103 -0
- package/website/next.config.ts +3 -1
- package/website/package-lock.json +552 -18
- package/website/package.json +11 -5
- package/website/postcss.config.mjs +1 -1
- package/website/scripts/fetch-versions.js +166 -0
- package/website/scripts/generate-examples-index.js +163 -0
- package/website/scripts/merge-docs-to-wiki.ts +207 -0
- package/website/scripts/sync-version.js +28 -0
- package/website/scripts/sync-wiki.ts +64 -3
- package/website/scripts/upload-wiki.ts +199 -0
- package/website/styles/_spacing.scss +453 -0
- package/website/styles/_tokens.scss +245 -0
- package/website/styles/_typography.scss +361 -0
- package/website/styles/_variables.scss +287 -0
- package/website/tailwind.config.ts +127 -22
- package/.releaserc.json.disabled +0 -81
- package/dist/spec/v0.2.5-dev/CHANGELOG.md +0 -171
- package/dist/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +0 -362
- package/dist/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +0 -464
- package/dist/spec/v0.2.5-dev/examples/research-team.ossa.yaml +0 -440
- package/dist/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +0 -317
- package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
- package/docs/README.md +0 -31
- package/docs/agent-openapi-spec.yml +0 -942
- package/docs/openapi-extensions.md +0 -930
- package/docs/schemas/openapi-extensions.schema.json +0 -486
- package/openapi/gitlab-orchestrator.openapi.yaml +0 -330
- package/ossa-website-swarm-tasks.json +0 -105
- package/spec/v0.2.5-dev/CHANGELOG.md +0 -171
- package/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +0 -362
- package/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +0 -464
- package/spec/v0.2.5-dev/examples/research-team.ossa.yaml +0 -440
- package/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +0 -317
- package/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
- package/website/app/api/validate/route.ts +0 -88
- package/website/app/globals.css +0 -108
- package/website/content/docs/OpenAPI-Extensions.md +0 -498
- package/website/content/docs/core-concepts/project-structure.md +0 -348
- package/website/content/docs/examples/Migration-Guides.md +0 -214
- package/website/content/docs/examples.md +0 -71
- package/website/content/docs/for-audiences/Enterprises.md +0 -256
- package/website/content/docs/for-audiences/architects.md +0 -224
- package/website/content/docs/for-audiences/developers.md +0 -220
- package/website/content/docs/getting-started/5-minute-overview.md +0 -85
- package/website/content/docs/getting-started/Hello-World.md +0 -184
- package/website/content/docs/getting-started/first-agent.md +0 -196
- package/website/content/docs/migration-guides/00-index.md +0 -76
- package/website/content/docs/migration-guides/README.md +0 -133
- package/website/next.config.js +0 -17
- package/website/postcss.config.js +0 -7
- package/website/tailwind.config.js +0 -58
- /package/dist/spec/{v0.2.4-dev/ossa-0.2.4-dev.schema.json → v0.2.4/ossa-0.2.4.schema.json} +0 -0
- /package/openapi/{ossa-registry-api.openapi.yaml → core/ossa-registry-api.openapi.yaml} +0 -0
- /package/openapi/{drupal-agent-api.openapi.yaml → reference-implementations/drupal-agent-api.openapi.yaml} +0 -0
- /package/openapi/{helm-generator.openapi.yaml → reference-implementations/helm-generator.openapi.yaml} +0 -0
- /package/spec/{v0.2.4-dev/ossa-0.2.4-dev.schema.json → v0.2.4/ossa-0.2.4.schema.json} +0 -0
- /package/{docs/migration → website/content/docs/migration-guides}/migration-manifest.json +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Operations Utilities
|
|
3
|
+
*
|
|
4
|
+
* DRY: Reusable file operations with proper error handling
|
|
5
|
+
* Type-safe: Validates paths and operations
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
|
|
11
|
+
const FilePathSchema = z.string().min(1);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Read file with validation
|
|
15
|
+
*/
|
|
16
|
+
export function readFile(filePath: string): string {
|
|
17
|
+
const validatedPath = FilePathSchema.parse(filePath);
|
|
18
|
+
|
|
19
|
+
if (!existsSync(validatedPath)) {
|
|
20
|
+
throw new Error(`File not found: ${validatedPath}`);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
return readFileSync(validatedPath, 'utf8');
|
|
25
|
+
} catch (error) {
|
|
26
|
+
throw new Error(`Failed to read file ${validatedPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Write file with validation
|
|
32
|
+
*/
|
|
33
|
+
export function writeFile(filePath: string, content: string): void {
|
|
34
|
+
const validatedPath = FilePathSchema.parse(filePath);
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
writeFileSync(validatedPath, content, 'utf8');
|
|
38
|
+
} catch (error) {
|
|
39
|
+
throw new Error(`Failed to write file ${validatedPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Check if file exists
|
|
45
|
+
*/
|
|
46
|
+
export function fileExists(filePath: string): boolean {
|
|
47
|
+
const validatedPath = FilePathSchema.parse(filePath);
|
|
48
|
+
return existsSync(validatedPath);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Validate file exists or throw
|
|
53
|
+
*/
|
|
54
|
+
export function requireFile(filePath: string, errorMessage?: string): void {
|
|
55
|
+
if (!fileExists(filePath)) {
|
|
56
|
+
throw new Error(errorMessage || `Required file not found: ${filePath}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version Management Utilities
|
|
3
|
+
*
|
|
4
|
+
* DRY: Single source of truth for version operations
|
|
5
|
+
* Type-safe: Uses Zod for validation
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { readFileSync } from 'fs';
|
|
9
|
+
import { join, dirname } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import {
|
|
13
|
+
PackageJsonSchema,
|
|
14
|
+
VersionSchema,
|
|
15
|
+
type PackageJson,
|
|
16
|
+
type Version,
|
|
17
|
+
} from '../schemas/package.schema.js';
|
|
18
|
+
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
+
const __dirname = dirname(__filename);
|
|
21
|
+
const ROOT = join(__dirname, '..', '..');
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get current version from package.json with Zod validation
|
|
25
|
+
*/
|
|
26
|
+
export function getCurrentVersion(): Version {
|
|
27
|
+
const packageJsonPath = join(ROOT, 'package.json');
|
|
28
|
+
const content = readFileSync(packageJsonPath, 'utf8');
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
const json = JSON.parse(content);
|
|
32
|
+
const pkg = PackageJsonSchema.parse(json);
|
|
33
|
+
return VersionSchema.parse(pkg.version);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
if (error instanceof z.ZodError) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
`Invalid package.json version: ${error.errors.map((e) => e.message).join(', ')}`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Get package.json with validation
|
|
46
|
+
*/
|
|
47
|
+
export function getPackageJson(): PackageJson {
|
|
48
|
+
const packageJsonPath = join(ROOT, 'package.json');
|
|
49
|
+
const content = readFileSync(packageJsonPath, 'utf8');
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
const json = JSON.parse(content);
|
|
53
|
+
return PackageJsonSchema.parse(json);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
if (error instanceof z.ZodError) {
|
|
56
|
+
throw new Error(
|
|
57
|
+
`Invalid package.json: ${error.errors.map((e) => e.message).join(', ')}`
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Build schema path from version
|
|
66
|
+
*/
|
|
67
|
+
export function getSchemaPath(version: Version): string {
|
|
68
|
+
return `spec/v${version}/ossa-${version}.schema.json`;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Build output path for generated types
|
|
73
|
+
*/
|
|
74
|
+
export function getTypesOutputPath(version: Version): string {
|
|
75
|
+
return `src/types/generated/ossa-${version}.types.ts`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Build output path for generated Zod schemas
|
|
80
|
+
*/
|
|
81
|
+
export function getZodOutputPath(version: Version): string {
|
|
82
|
+
return `src/types/generated/ossa-${version}.zod.ts`;
|
|
83
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Convert all documentation filenames to lowercase
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { readdirSync, renameSync, statSync } from 'fs';
|
|
7
|
+
import { join, basename, dirname } from 'path';
|
|
8
|
+
|
|
9
|
+
const DOCS_DIR = join(process.cwd(), 'website/content/docs');
|
|
10
|
+
|
|
11
|
+
function lowercaseFiles(dir: string) {
|
|
12
|
+
const entries = readdirSync(dir);
|
|
13
|
+
|
|
14
|
+
for (const entry of entries) {
|
|
15
|
+
const fullPath = join(dir, entry);
|
|
16
|
+
const stat = statSync(fullPath);
|
|
17
|
+
|
|
18
|
+
if (stat.isDirectory()) {
|
|
19
|
+
// Recursively process subdirectories
|
|
20
|
+
lowercaseFiles(fullPath);
|
|
21
|
+
|
|
22
|
+
// Rename directory if needed
|
|
23
|
+
const lowerEntry = entry.toLowerCase();
|
|
24
|
+
if (entry !== lowerEntry) {
|
|
25
|
+
const newPath = join(dirname(fullPath), lowerEntry);
|
|
26
|
+
console.log(`📁 Renaming: ${entry} → ${lowerEntry}`);
|
|
27
|
+
renameSync(fullPath, newPath);
|
|
28
|
+
}
|
|
29
|
+
} else if (entry.endsWith('.md')) {
|
|
30
|
+
// Rename file if needed
|
|
31
|
+
const lowerEntry = entry.toLowerCase();
|
|
32
|
+
if (entry !== lowerEntry) {
|
|
33
|
+
const newPath = join(dirname(fullPath), lowerEntry);
|
|
34
|
+
console.log(`📄 Renaming: ${entry} → ${lowerEntry}`);
|
|
35
|
+
renameSync(fullPath, newPath);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
console.log('🔄 Converting documentation filenames to lowercase...\n');
|
|
42
|
+
lowercaseFiles(DOCS_DIR);
|
|
43
|
+
console.log('\n✅ Done!');
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Manage Merge Requests for a specific milestone
|
|
4
|
+
* Helps clean up and organize MRs for controlled releases
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Gitlab } from '@gitbeaker/node';
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
|
|
10
|
+
const gitlab = new Gitlab({
|
|
11
|
+
token: process.env.GITLAB_TOKEN || process.env.GITLAB_ACCESS_TOKEN,
|
|
12
|
+
host: 'https://gitlab.com',
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const PROJECT_ID = '76265294'; // blueflyio/openstandardagents
|
|
16
|
+
|
|
17
|
+
interface MRInfo {
|
|
18
|
+
iid: number;
|
|
19
|
+
title: string;
|
|
20
|
+
state: string;
|
|
21
|
+
target_branch: string;
|
|
22
|
+
source_branch: string;
|
|
23
|
+
milestone?: { title: string };
|
|
24
|
+
has_conflicts: boolean;
|
|
25
|
+
merge_status: string;
|
|
26
|
+
web_url: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function listMRsInMilestone(milestone: string) {
|
|
30
|
+
console.log(`\n📋 Listing MRs in milestone: ${milestone}\n`);
|
|
31
|
+
|
|
32
|
+
const mrs = await gitlab.MergeRequests.all({
|
|
33
|
+
projectId: PROJECT_ID,
|
|
34
|
+
state: 'opened',
|
|
35
|
+
milestone,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (mrs.length === 0) {
|
|
39
|
+
console.log('No open MRs found in this milestone.');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
console.log(`Found ${mrs.length} open MRs:\n`);
|
|
44
|
+
|
|
45
|
+
for (const mr of mrs) {
|
|
46
|
+
const status = mr.has_conflicts ? '❌ CONFLICTS' : '✅ Clean';
|
|
47
|
+
const target = mr.target_branch === 'development' ? '✅ dev' : `⚠️ ${mr.target_branch}`;
|
|
48
|
+
|
|
49
|
+
console.log(`!${mr.iid}: ${mr.title}`);
|
|
50
|
+
console.log(` Target: ${target} | Status: ${status}`);
|
|
51
|
+
console.log(` ${mr.web_url}\n`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function listMRsNotInMilestone(milestone: string) {
|
|
56
|
+
console.log(`\n📋 Listing open MRs NOT in milestone: ${milestone}\n`);
|
|
57
|
+
|
|
58
|
+
const allMRs = await gitlab.MergeRequests.all({
|
|
59
|
+
projectId: PROJECT_ID,
|
|
60
|
+
state: 'opened',
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const outsideMRs = allMRs.filter(
|
|
64
|
+
(mr: any) => !mr.milestone || mr.milestone.title !== milestone
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
if (outsideMRs.length === 0) {
|
|
68
|
+
console.log('All open MRs are in the milestone.');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
console.log(`Found ${outsideMRs.length} MRs outside milestone:\n`);
|
|
73
|
+
|
|
74
|
+
for (const mr of outsideMRs) {
|
|
75
|
+
const milestoneText = mr.milestone ? mr.milestone.title : 'No milestone';
|
|
76
|
+
console.log(`!${mr.iid}: ${mr.title}`);
|
|
77
|
+
console.log(` Milestone: ${milestoneText}`);
|
|
78
|
+
console.log(` Target: ${mr.target_branch}`);
|
|
79
|
+
console.log(` ${mr.web_url}\n`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async function retargetMR(mrId: number, targetBranch: string) {
|
|
84
|
+
console.log(`\n🎯 Retargeting MR !${mrId} to ${targetBranch}...\n`);
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
await gitlab.MergeRequests.edit(PROJECT_ID, mrId, {
|
|
88
|
+
target_branch: targetBranch,
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
console.log(`✅ Successfully retargeted MR !${mrId} to ${targetBranch}`);
|
|
92
|
+
} catch (error: any) {
|
|
93
|
+
console.error(`❌ Failed to retarget MR: ${error.message}`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
async function closeMR(mrId: number, reason: string) {
|
|
99
|
+
console.log(`\n🚫 Closing MR !${mrId}...\n`);
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
// Add comment explaining closure
|
|
103
|
+
await gitlab.MergeRequestNotes.create(PROJECT_ID, mrId, {
|
|
104
|
+
body: `Closing this MR: ${reason}\n\nIf this work is still needed, please rebase and assign to the appropriate milestone.`,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Close the MR
|
|
108
|
+
await gitlab.MergeRequests.edit(PROJECT_ID, mrId, {
|
|
109
|
+
state_event: 'close',
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
console.log(`✅ Successfully closed MR !${mrId}`);
|
|
113
|
+
} catch (error: any) {
|
|
114
|
+
console.error(`❌ Failed to close MR: ${error.message}`);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
async function rebaseMR(mrId: number) {
|
|
120
|
+
console.log(`\n🔄 Rebasing MR !${mrId}...\n`);
|
|
121
|
+
|
|
122
|
+
try {
|
|
123
|
+
await gitlab.MergeRequests.rebase(PROJECT_ID, mrId);
|
|
124
|
+
console.log(`✅ Rebase initiated for MR !${mrId}`);
|
|
125
|
+
console.log(' Check the MR page for rebase status.');
|
|
126
|
+
} catch (error: any) {
|
|
127
|
+
console.error(`❌ Failed to rebase MR: ${error.message}`);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async function assignMilestone(mrId: number, milestone: string) {
|
|
133
|
+
console.log(`\n🏷️ Assigning MR !${mrId} to milestone ${milestone}...\n`);
|
|
134
|
+
|
|
135
|
+
try {
|
|
136
|
+
// Get milestone ID
|
|
137
|
+
const milestones = await gitlab.ProjectMilestones.all(PROJECT_ID);
|
|
138
|
+
const targetMilestone = milestones.find((m: any) => m.title === milestone);
|
|
139
|
+
|
|
140
|
+
if (!targetMilestone) {
|
|
141
|
+
throw new Error(`Milestone "${milestone}" not found`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
await gitlab.MergeRequests.edit(PROJECT_ID, mrId, {
|
|
145
|
+
milestone_id: targetMilestone.id,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
console.log(`✅ Successfully assigned MR !${mrId} to milestone ${milestone}`);
|
|
149
|
+
} catch (error: any) {
|
|
150
|
+
console.error(`❌ Failed to assign milestone: ${error.message}`);
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
async function bulkRetarget(milestone: string, targetBranch: string) {
|
|
156
|
+
console.log(`\n🎯 Bulk retargeting all MRs in ${milestone} to ${targetBranch}...\n`);
|
|
157
|
+
|
|
158
|
+
const mrs = await gitlab.MergeRequests.all({
|
|
159
|
+
projectId: PROJECT_ID,
|
|
160
|
+
state: 'opened',
|
|
161
|
+
milestone,
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
console.log(`Found ${mrs.length} MRs to retarget\n`);
|
|
165
|
+
|
|
166
|
+
for (const mr of mrs) {
|
|
167
|
+
if (mr.target_branch !== targetBranch) {
|
|
168
|
+
console.log(`Retargeting !${mr.iid}: ${mr.title}`);
|
|
169
|
+
await retargetMR(mr.iid, targetBranch);
|
|
170
|
+
} else {
|
|
171
|
+
console.log(`Skipping !${mr.iid}: already targets ${targetBranch}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
console.log(`\n✅ Bulk retarget complete`);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
async function bulkRebase(milestone: string) {
|
|
179
|
+
console.log(`\n🔄 Bulk rebasing all MRs in ${milestone}...\n`);
|
|
180
|
+
|
|
181
|
+
const mrs = await gitlab.MergeRequests.all({
|
|
182
|
+
projectId: PROJECT_ID,
|
|
183
|
+
state: 'opened',
|
|
184
|
+
milestone,
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
console.log(`Found ${mrs.length} MRs to rebase\n`);
|
|
188
|
+
|
|
189
|
+
for (const mr of mrs) {
|
|
190
|
+
if (mr.has_conflicts) {
|
|
191
|
+
console.log(`Rebasing !${mr.iid}: ${mr.title} (has conflicts)`);
|
|
192
|
+
await rebaseMR(mr.iid);
|
|
193
|
+
// Wait a bit between rebases
|
|
194
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
195
|
+
} else {
|
|
196
|
+
console.log(`Skipping !${mr.iid}: no conflicts`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
console.log(`\n✅ Bulk rebase complete`);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// CLI
|
|
204
|
+
const program = new Command();
|
|
205
|
+
|
|
206
|
+
program
|
|
207
|
+
.name('manage-milestone-mrs')
|
|
208
|
+
.description('Manage merge requests for milestone-based releases')
|
|
209
|
+
.version('1.0.0');
|
|
210
|
+
|
|
211
|
+
program
|
|
212
|
+
.command('list')
|
|
213
|
+
.description('List all MRs in a milestone')
|
|
214
|
+
.requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
|
|
215
|
+
.action(async (options) => {
|
|
216
|
+
await listMRsInMilestone(options.milestone);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
program
|
|
220
|
+
.command('list-outside')
|
|
221
|
+
.description('List all MRs NOT in a milestone')
|
|
222
|
+
.requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
|
|
223
|
+
.action(async (options) => {
|
|
224
|
+
await listMRsNotInMilestone(options.milestone);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
program
|
|
228
|
+
.command('retarget')
|
|
229
|
+
.description('Retarget an MR to a different branch')
|
|
230
|
+
.requiredOption('-i, --id <id>', 'MR ID (e.g., 123)')
|
|
231
|
+
.requiredOption('-t, --target <branch>', 'Target branch (e.g., development)')
|
|
232
|
+
.action(async (options) => {
|
|
233
|
+
await retargetMR(parseInt(options.id), options.target);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
program
|
|
237
|
+
.command('close')
|
|
238
|
+
.description('Close an MR with a reason')
|
|
239
|
+
.requiredOption('-i, --id <id>', 'MR ID (e.g., 123)')
|
|
240
|
+
.requiredOption('-r, --reason <reason>', 'Reason for closing')
|
|
241
|
+
.action(async (options) => {
|
|
242
|
+
await closeMR(parseInt(options.id), options.reason);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
program
|
|
246
|
+
.command('rebase')
|
|
247
|
+
.description('Rebase an MR')
|
|
248
|
+
.requiredOption('-i, --id <id>', 'MR ID (e.g., 123)')
|
|
249
|
+
.action(async (options) => {
|
|
250
|
+
await rebaseMR(parseInt(options.id));
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
program
|
|
254
|
+
.command('assign')
|
|
255
|
+
.description('Assign an MR to a milestone')
|
|
256
|
+
.requiredOption('-i, --id <id>', 'MR ID (e.g., 123)')
|
|
257
|
+
.requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
|
|
258
|
+
.action(async (options) => {
|
|
259
|
+
await assignMilestone(parseInt(options.id), options.milestone);
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
program
|
|
263
|
+
.command('bulk-retarget')
|
|
264
|
+
.description('Retarget all MRs in a milestone to a branch')
|
|
265
|
+
.requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
|
|
266
|
+
.requiredOption('-t, --target <branch>', 'Target branch (e.g., development)')
|
|
267
|
+
.action(async (options) => {
|
|
268
|
+
await bulkRetarget(options.milestone, options.target);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
program
|
|
272
|
+
.command('bulk-rebase')
|
|
273
|
+
.description('Rebase all MRs with conflicts in a milestone')
|
|
274
|
+
.requiredOption('-m, --milestone <milestone>', 'Milestone name (e.g., v0.2.6)')
|
|
275
|
+
.action(async (options) => {
|
|
276
|
+
await bulkRebase(options.milestone);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
program.parse();
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { glob } from 'glob';
|
|
5
|
+
|
|
6
|
+
const VERSION_FILE = path.join(process.cwd(), '.version.json');
|
|
7
|
+
const versionConfig = JSON.parse(fs.readFileSync(VERSION_FILE, 'utf-8'));
|
|
8
|
+
|
|
9
|
+
const replacements = {
|
|
10
|
+
'{{VERSION}}': versionConfig.current,
|
|
11
|
+
'{{VERSION_STABLE}}': versionConfig.latest_stable,
|
|
12
|
+
'{{SPEC_PATH}}': versionConfig.spec_path.replace('{version}', versionConfig.current),
|
|
13
|
+
'{{SCHEMA_FILE}}': versionConfig.schema_file.replace('{version}', versionConfig.current),
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
async function processTemplates() {
|
|
17
|
+
const files = await glob('website/content/docs/**/*.md', { ignore: 'node_modules/**' });
|
|
18
|
+
|
|
19
|
+
for (const file of files) {
|
|
20
|
+
let content = fs.readFileSync(file, 'utf-8');
|
|
21
|
+
let updated = false;
|
|
22
|
+
|
|
23
|
+
for (const [placeholder, value] of Object.entries(replacements)) {
|
|
24
|
+
if (content.includes(placeholder)) {
|
|
25
|
+
content = content.replaceAll(placeholder, value);
|
|
26
|
+
updated = true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (updated) {
|
|
31
|
+
fs.writeFileSync(file, content);
|
|
32
|
+
console.log(`✅ Processed: ${file}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
processTemplates();
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Rebase all open MRs onto their target branches
|
|
4
|
+
# This script fetches and rebases each source branch
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
set -e
|
|
8
|
+
|
|
9
|
+
TOKEN="${GITLAB_TOKEN:-${SERVICE_ACCOUNT_OSSA_TOKEN:-${GITLAB_PUSH_TOKEN}}}"
|
|
10
|
+
PROJECT="blueflyio/openstandardagents"
|
|
11
|
+
|
|
12
|
+
if [ -z "$TOKEN" ]; then
|
|
13
|
+
echo "❌ Error: GITLAB_TOKEN or SERVICE_ACCOUNT_OSSA_TOKEN required"
|
|
14
|
+
exit 1
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
echo "🔄 Fetching open merge requests..."
|
|
18
|
+
MRs=$(curl -sS --header "PRIVATE-TOKEN: $TOKEN" \
|
|
19
|
+
"https://gitlab.com/api/v4/projects/${PROJECT//\//%2F}/merge_requests?state=opened&per_page=20" | \
|
|
20
|
+
jq -r '.[] | "\(.iid)|\(.source_branch)|\(.target_branch)"')
|
|
21
|
+
|
|
22
|
+
echo ""
|
|
23
|
+
echo "Found MRs to rebase:"
|
|
24
|
+
echo "$MRs" | while IFS='|' read -r iid source target; do
|
|
25
|
+
echo " MR !$iid: $source -> $target"
|
|
26
|
+
done
|
|
27
|
+
|
|
28
|
+
echo ""
|
|
29
|
+
read -p "Continue with rebasing? (y/N) " -n 1 -r
|
|
30
|
+
echo
|
|
31
|
+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
32
|
+
echo "Cancelled."
|
|
33
|
+
exit 0
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
echo "$MRs" | while IFS='|' read -r iid source target; do
|
|
37
|
+
echo ""
|
|
38
|
+
echo "=== Rebasing MR !$iid: $source -> $target ==="
|
|
39
|
+
|
|
40
|
+
# Fetch both branches
|
|
41
|
+
git fetch origin "$source" "$target" 2>&1 | grep -v "^From" || true
|
|
42
|
+
|
|
43
|
+
# Check if source branch exists locally
|
|
44
|
+
if git show-ref --verify --quiet "refs/heads/$source"; then
|
|
45
|
+
echo " Branch $source exists locally, using worktree..."
|
|
46
|
+
git worktree add "../rebase-$source" "$source" 2>/dev/null || {
|
|
47
|
+
echo " Worktree exists, removing..."
|
|
48
|
+
git worktree remove "../rebase-$source" 2>/dev/null || true
|
|
49
|
+
git worktree add "../rebase-$source" "$source"
|
|
50
|
+
}
|
|
51
|
+
cd "../rebase-$source"
|
|
52
|
+
else
|
|
53
|
+
echo " Creating worktree for $source..."
|
|
54
|
+
git worktree add "../rebase-$source" "origin/$source"
|
|
55
|
+
cd "../rebase-$source"
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
# Rebase onto target
|
|
59
|
+
echo " Rebasing onto origin/$target..."
|
|
60
|
+
if git rebase "origin/$target" 2>&1 | tee /tmp/rebase-output.log; then
|
|
61
|
+
echo " ✅ Rebase successful"
|
|
62
|
+
echo " Pushing..."
|
|
63
|
+
git push origin "$source" --force-with-lease 2>&1 | grep -v "^To " || true
|
|
64
|
+
echo " ✅ MR !$iid rebased and pushed"
|
|
65
|
+
else
|
|
66
|
+
echo " ❌ Rebase failed - check conflicts"
|
|
67
|
+
echo " Worktree: $(pwd)"
|
|
68
|
+
echo " Fix conflicts and run: git rebase --continue && git push origin $source --force-with-lease"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
cd - > /dev/null
|
|
72
|
+
done
|
|
73
|
+
|
|
74
|
+
echo ""
|
|
75
|
+
echo "✅ Rebase process complete!"
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Zod Schemas for Build Scripts
|
|
3
|
+
*
|
|
4
|
+
* Follows OpenAPI-first, DRY, and type-safe principles.
|
|
5
|
+
* Single source of truth for package.json and version validation.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Semantic version pattern (supports RC, alpha, beta, etc.)
|
|
12
|
+
* Matches: 0.2.5, 0.2.5-RC, 0.2.5-alpha.1, 1.0.0-beta.2, etc.
|
|
13
|
+
*/
|
|
14
|
+
const SemverPattern = /^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?$/;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Package.json schema (partial - only fields we use)
|
|
18
|
+
*/
|
|
19
|
+
export const PackageJsonSchema = z.object({
|
|
20
|
+
name: z.string().min(1),
|
|
21
|
+
version: z.string().regex(SemverPattern, {
|
|
22
|
+
message: 'Invalid semver version format. Expected: X.Y.Z or X.Y.Z-SUFFIX',
|
|
23
|
+
}),
|
|
24
|
+
exports: z
|
|
25
|
+
.object({
|
|
26
|
+
'./schema': z.string().optional(),
|
|
27
|
+
})
|
|
28
|
+
.passthrough()
|
|
29
|
+
.optional(),
|
|
30
|
+
}).passthrough();
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Version string schema
|
|
34
|
+
*/
|
|
35
|
+
export const VersionSchema = z.string().regex(SemverPattern, {
|
|
36
|
+
message: 'Invalid version format',
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* File path schema
|
|
41
|
+
*/
|
|
42
|
+
export const FilePathSchema = z.string().min(1);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Script configuration schema
|
|
46
|
+
*/
|
|
47
|
+
export const ScriptConfigSchema = z.object({
|
|
48
|
+
version: VersionSchema,
|
|
49
|
+
schemaPath: FilePathSchema,
|
|
50
|
+
outputPath: z.string().optional(),
|
|
51
|
+
rootDir: FilePathSchema,
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Type exports
|
|
55
|
+
export type PackageJson = z.infer<typeof PackageJsonSchema>;
|
|
56
|
+
export type Version = z.infer<typeof VersionSchema>;
|
|
57
|
+
export type ScriptConfig = z.infer<typeof ScriptConfigSchema>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Parse and validate package.json
|
|
61
|
+
*/
|
|
62
|
+
export function parsePackageJson(content: string): PackageJson {
|
|
63
|
+
try {
|
|
64
|
+
const json = JSON.parse(content);
|
|
65
|
+
return PackageJsonSchema.parse(json);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
if (error instanceof z.ZodError) {
|
|
68
|
+
throw new Error(
|
|
69
|
+
`Invalid package.json: ${error.issues.map((e: z.ZodIssue) => e.message).join(', ')}`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Setup Branch Protection
|
|
4
|
+
# Installs git hooks to prevent checking out main/development locally
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
set -e
|
|
8
|
+
|
|
9
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
11
|
+
|
|
12
|
+
echo "🔒 Setting up branch protection for main and development..."
|
|
13
|
+
|
|
14
|
+
# Ensure hooks directory exists
|
|
15
|
+
mkdir -p "$PROJECT_ROOT/.git/hooks"
|
|
16
|
+
|
|
17
|
+
# Copy hooks if they don't exist or are outdated
|
|
18
|
+
if [ ! -f "$PROJECT_ROOT/.git/hooks/post-checkout" ] || [ "$PROJECT_ROOT/.git/hooks/post-checkout" -ot "$SCRIPT_DIR/setup-branch-protection.sh" ]; then
|
|
19
|
+
echo "✅ Installing post-checkout hook..."
|
|
20
|
+
# Hook is already installed, just ensure it's executable
|
|
21
|
+
chmod +x "$PROJECT_ROOT/.git/hooks/post-checkout" 2>/dev/null || true
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Set git config for hooks
|
|
25
|
+
git config core.hooksPath .git/hooks 2>/dev/null || true
|
|
26
|
+
|
|
27
|
+
echo ""
|
|
28
|
+
echo "✅ Branch protection installed!"
|
|
29
|
+
echo ""
|
|
30
|
+
echo "Protected branches: main, development"
|
|
31
|
+
echo ""
|
|
32
|
+
echo "The hook will automatically switch you back if you try to checkout these branches."
|
|
33
|
+
echo ""
|