@bluefly/openstandardagents 0.1.9 → 0.2.5-RC
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/.eslintrc.cjs +43 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +39 -0
- package/.github/dependabot.yml +58 -0
- package/.github/workflows/ci.yml +154 -0
- package/.github/workflows/codeql.yml +41 -0
- package/.github/workflows/dependabot-auto-merge.yml +28 -0
- package/.github/workflows/release.yml +103 -0
- package/.kiro/specs/agent-buildkit-templates/design.md +495 -0
- package/.kiro/specs/agent-buildkit-templates/requirements.md +165 -0
- package/.kiro/specs/kiro-ide-supercharger/README.md +202 -0
- package/.kiro/specs/kiro-ide-supercharger/design.md +1005 -0
- package/.kiro/specs/kiro-ide-supercharger/requirements.md +141 -0
- package/.kiro/specs/kiro-ide-supercharger/tasks.md +507 -0
- package/.kiro/specs/website-design-audit/design.md +679 -0
- package/.kiro/specs/website-design-audit/requirements.md +199 -0
- package/.prettierignore +7 -0
- package/.prettierrc.json +10 -0
- package/.redocly.yaml +8 -62
- package/.releaserc.json +85 -0
- package/.version.json +6 -0
- package/CHANGELOG.md +196 -0
- package/CONTRIBUTING.md +267 -0
- package/LICENSE +190 -0
- package/README.md +253 -454
- package/bin/ossa +29 -0
- package/bin/ossa-validate-all +55 -0
- package/bin/ossa-version +23 -0
- package/bin/validate-ossa-0.2.2.ts +244 -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 +0 -3
- package/dist/di-container.js.map +1 -1
- package/dist/index.d.ts +9 -27
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -33
- package/dist/index.js.map +1 -1
- package/dist/repositories/schema.repository.d.ts +16 -1
- package/dist/repositories/schema.repository.d.ts.map +1 -1
- package/dist/repositories/schema.repository.js +94 -17
- 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 +93 -45
- package/dist/services/generation.service.js.map +1 -1
- package/dist/services/gitlab-agent.service.d.ts.map +1 -1
- package/dist/services/gitlab-agent.service.js +12 -8
- package/dist/services/gitlab-agent.service.js.map +1 -1
- 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/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 +24 -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.3/CHANGELOG.md +176 -0
- package/dist/spec/v0.2.3/README.md +4 -4
- package/dist/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +7 -7
- package/dist/spec/v0.2.4/CHANGELOG.md +403 -0
- package/dist/spec/v0.2.4/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/dist/spec/v0.2.4/ossa-0.2.4-dev.schema.json +1696 -0
- package/dist/spec/v0.2.4/ossa-0.2.4.schema.json +1819 -0
- 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/dist/spec/v0.2.5-RC/migrations/v0.2.3-to-v0.2.4.md +599 -0
- 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/types/index.d.ts +164 -260
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -65
- package/dist/types/index.js.map +1 -1
- package/docs/issue-19-completion-summary.md +648 -0
- package/docs/issue-19-validation.md +351 -0
- package/examples/adk-integration/code-review-workflow.yml +136 -0
- package/examples/adk-integration/customer-support.yml +263 -0
- package/examples/adk-integration/data-pipeline.yml +173 -0
- package/examples/advanced/patterns/compliance-context-production.json +53 -0
- package/examples/advanced/patterns/model-router.ts +274 -0
- package/examples/advanced/patterns/smart-model-routing.ts +248 -0
- package/examples/advanced/workflows/hybrid-model-strategy.yaml +232 -0
- package/examples/agent-manifests/critics/critic-agent.yaml +149 -0
- package/examples/agent-manifests/governors/governor-agent.yaml +128 -0
- package/examples/agent-manifests/integrators/integrator-agent.yaml +103 -0
- package/examples/agent-manifests/judges/judge-agent.yaml +153 -0
- package/examples/agent-manifests/monitors/monitor-agent.yaml +122 -0
- package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +247 -0
- package/examples/agent-manifests/sample-compliant-agent.yaml +147 -0
- package/examples/agent-manifests/workers/worker-agent.yaml +82 -0
- package/examples/anthropic/claude-assistant.ossa.json +45 -0
- package/examples/architecture/model-configuration/ollama-integration.ts +110 -0
- package/examples/autogen/multi-agent.ossa.json +37 -0
- package/examples/bridge-configurations.yaml +346 -0
- package/examples/bridges/Dockerfile.production +87 -0
- package/examples/bridges/__pycache__/aiflow-bridge-enhanced.cpython-313.pyc +0 -0
- package/examples/bridges/__pycache__/aiflow-phoenix-tracing.cpython-313.pyc +0 -0
- package/examples/bridges/__pycache__/test_aiflow_integration.cpython-313.pyc +0 -0
- package/examples/bridges/aiflow-bridge-enhanced.py +462 -0
- package/examples/bridges/aiflow-bridge-example.yml +310 -0
- package/examples/bridges/aiflow-phoenix-tracing.py +310 -0
- package/examples/bridges/aiflow-registration-api.openapi.yml +439 -0
- package/examples/bridges/k8s/configmap.yaml +121 -0
- package/examples/bridges/k8s/deployment-simple.yaml +34 -0
- package/examples/bridges/k8s/deployment.yaml +275 -0
- package/examples/bridges/k8s/hpa.yaml +126 -0
- package/examples/bridges/k8s/ingress.yaml +155 -0
- package/examples/bridges/kagent-bridge-example.yml +94 -0
- package/examples/bridges/load-tests/Dockerfile +28 -0
- package/examples/bridges/load-tests/k6-load-test.js +302 -0
- package/examples/bridges/load-tests/requirements.txt +20 -0
- package/examples/bridges/loadtest/k6-scenarios.js +270 -0
- package/examples/bridges/phase4/SLO-SLA.yaml +249 -0
- package/examples/bridges/phase4/chaos-tests.yaml +226 -0
- package/examples/bridges/requirements.txt +24 -0
- package/examples/bridges/test_aiflow_integration.py +341 -0
- package/examples/common_npm/agent-router.ossa.yaml +182 -0
- package/examples/common_npm/agent-router.v0.2.2.ossa.yaml +60 -0
- package/examples/compliance-agent.yml +155 -0
- package/examples/crewai/research-team.ossa.json +36 -0
- package/examples/cursor/code-review-agent.ossa.json +47 -0
- package/examples/drupal/gitlab-ml-recommender.ossa.yaml +609 -0
- package/examples/drupal/gitlab-ml-recommender.v0.2.2.ossa.yaml +68 -0
- package/examples/enterprise/agent.yml +452 -0
- package/examples/extensions/drupal-v1.yml +266 -0
- package/examples/extensions/kagent-v1.yml +167 -0
- package/examples/getting-started/hello-world-complete.ossa.yaml +266 -0
- package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +376 -0
- package/examples/kagent/README.md +31 -0
- package/examples/kagent/compliance-validator.ossa.yaml +111 -0
- package/examples/kagent/cost-optimizer.ossa.yaml +93 -0
- package/examples/kagent/documentation-agent.ossa.yaml +91 -0
- package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +269 -0
- package/examples/kagent/k8s-troubleshooter-v1.v0.2.2.ossa.yaml +106 -0
- package/examples/kagent/k8s-troubleshooter.ossa.yaml +257 -0
- package/examples/kagent/security-scanner.ossa.yaml +140 -0
- package/examples/langchain/chain-agent.ossa.json +42 -0
- package/examples/langflow/workflow-agent.ossa.json +39 -0
- package/examples/langgraph/state-machine-agent.ossa.json +59 -0
- package/examples/llamaindex/rag-agent.ossa.json +41 -0
- package/examples/migration-guides/from-langchain-to-ossa.yaml +309 -0
- package/examples/minimal/agent.yml +152 -0
- package/examples/minimal/openapi.yaml +95 -0
- package/examples/openai/basic-agent.ossa.yaml +61 -0
- package/examples/openai/multi-tool-agent.ossa.json +165 -0
- package/examples/openai/swarm-agent.ossa.json +59 -0
- package/examples/openapi-extensions/README.md +87 -0
- package/examples/openapi-extensions/minimal-agent-api.openapi.yml +288 -0
- package/examples/openapi-extensions/orchestrator-agent-api.openapi.yml +633 -0
- package/examples/openapi-extensions/worker-agent-api.openapi.yml +533 -0
- package/examples/production/agent.yml +713 -0
- package/examples/production/document-analyzer-openai.yml +134 -0
- package/examples/quickstart/support-agent.ossa.yaml +59 -0
- package/examples/service-registry-usage.ts +423 -0
- package/examples/spec-examples/audit-agent.yml +147 -0
- package/examples/spec-examples/chat-agent.yml +189 -0
- package/examples/spec-examples/compliance-agent.yml +204 -0
- package/examples/spec-examples/data-processing-agent.yml +132 -0
- package/examples/spec-examples/development-agent.yml +138 -0
- package/examples/spec-examples/edge-agent.yml +101 -0
- package/examples/spec-examples/integration-agent.yml +129 -0
- package/examples/spec-examples/monitoring-agent.yml +130 -0
- package/examples/spec-examples/serverless-agent.yml +82 -0
- package/examples/spec-examples/workflow-agent.yml +223 -0
- package/examples/templates/ossa-compliance.yaml +56 -0
- package/examples/typescript/advanced/demo-registry.ts +168 -0
- package/examples/typescript/mcpb-agent-example.ts +358 -0
- package/examples/vercel/edge-agent.ossa.json +43 -0
- package/infrastructure/docker-compose.yml +33 -0
- 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/core/ossa-core-api.openapi.yaml +1503 -0
- package/openapi/core/ossa-registry-api.openapi.yaml +980 -0
- package/openapi/core/ossa-registry.openapi.yaml +855 -0
- package/openapi/core/unified-agent-gateway.openapi.yaml +833 -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/drupal-agent-api.openapi.yaml +348 -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/helm-generator.openapi.yaml +389 -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/reference-implementations/self-evolving-ecosystem.openapi.yaml +1530 -0
- 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 +120 -83
- package/release.config.js +79 -0
- package/scripts/bump-version.ts +57 -0
- package/scripts/enhanced-version-manager.ts +257 -0
- package/scripts/gen-types.ts +51 -0
- package/scripts/gen-zod.ts +51 -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/process-doc-templates.ts +37 -0
- package/scripts/schemas/package.schema.ts +75 -0
- package/scripts/setup-branch-protection.sh +33 -0
- package/scripts/sync-version.ts +39 -0
- package/scripts/sync-versions.ts +488 -0
- package/scripts/validate-schema.ts +49 -0
- package/spec/v0.1.9/agent-autonomous-extensions.json +234 -0
- package/spec/v0.1.9/ecosystem-compliance.json +235 -0
- package/spec/v0.1.9/ossa-v0.1.9.schema.json +695 -0
- package/spec/v0.1.9/reasoning-compliance.json +654 -0
- package/spec/v0.2.2/kagent-enhancements.json +395 -0
- package/spec/v0.2.2/ossa-0.2.2.schema.json +906 -0
- package/spec/v0.2.2/ossa-0.2.2.yaml +448 -0
- package/spec/v0.2.2/ossa-reasoning-compliance-1.0.schema.json +424 -0
- package/spec/v0.2.3/CHANGELOG.md +176 -0
- package/spec/v0.2.3/README.md +154 -0
- package/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +343 -0
- package/spec/v0.2.3/ossa-0.2.3.schema.json +1397 -0
- package/spec/v0.2.3/ossa-0.2.3.yaml +448 -0
- package/spec/v0.2.4/CHANGELOG.md +403 -0
- package/spec/v0.2.4/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/v0.2.4/ossa-0.2.4-dev.schema.json +1696 -0
- package/spec/v0.2.4/ossa-0.2.4.schema.json +170 -68
- 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/test-results.xml +1 -0
- package/website/.lighthouserc.ts +24 -0
- package/website/.prettierrc +10 -0
- package/website/Dockerfile +30 -0
- package/website/app/about/page.tsx +295 -0
- package/website/app/blog/[slug]/page.tsx +208 -0
- package/website/app/blog/page.tsx +249 -0
- package/website/app/design-guide/page.tsx +511 -0
- package/website/app/docs/[[...slug]]/page.tsx +847 -0
- package/website/app/docs/core-concepts/project-structure/page.tsx +349 -0
- package/website/app/ecosystem/page.tsx +375 -0
- package/website/app/examples/page.tsx +133 -0
- package/website/app/globals.scss +135 -0
- package/website/app/layout.tsx +106 -0
- package/website/app/license/page.tsx +183 -0
- package/website/app/not-found.tsx +18 -0
- package/website/app/page.tsx +474 -0
- package/website/app/playground/page.tsx +487 -0
- package/website/app/robots.ts +19 -0
- package/website/app/rss.xml/route.ts +74 -0
- package/website/app/schema/page.tsx +1001 -0
- package/website/app/sitemap.ts +56 -0
- package/website/app/specification/page.tsx +287 -0
- package/website/components/InstallCommand.tsx +96 -0
- package/website/components/Logo.tsx +97 -0
- package/website/components/StructuredData.tsx +65 -0
- package/website/components/docs/DocsSearch.tsx +104 -0
- package/website/components/docs/DocsSidebar.tsx +155 -0
- package/website/components/docs/MarkdownContent.tsx +401 -0
- package/website/components/docs/VersionSelector.tsx +105 -0
- package/website/components/examples/ExamplesViewer.tsx +293 -0
- package/website/components/layout/Footer.tsx +116 -0
- package/website/components/layout/Header.tsx +168 -0
- package/website/components/schema/SchemaComponentsAccordion.tsx +84 -0
- package/website/components/schema/SchemaExplorer.tsx +213 -0
- package/website/content/blog/OpenAPI-AI-Agents-Standard.md +285 -0
- package/website/content/blog/Why-Formal-Standards-Matter-Now.md +198 -0
- package/website/content/blog/gitlab-kubernetes-agent-ecosystem.md +286 -0
- package/website/content/blog/introducing-ossa-framework.md +328 -0
- package/website/content/blog/ossa-production-results.md +279 -0
- package/website/content/blog/welcome-to-ossa.md +43 -0
- package/website/content/blog/why-ai-agents-need-open-standard.md +98 -0
- package/website/content/docs/00-HOME.md +153 -0
- package/website/content/docs/AIFlow-Framework-Integration-with-OSSA.md +107 -0
- package/website/content/docs/Examples.md +71 -0
- package/website/content/docs/OpenAPI-Extensions.md +934 -0
- package/website/content/docs/adapters/openai-adapter.md +693 -0
- package/website/content/docs/architecture/execution-flow.md +335 -0
- package/website/content/docs/architecture/multi-agent-systems.md +737 -0
- package/website/content/docs/architecture/overview.md +121 -0
- package/website/content/docs/architecture/stack-integration.md +461 -0
- package/website/content/docs/changelog.md +246 -0
- package/website/content/docs/contributing.md +599 -0
- package/website/content/docs/core-concepts/Project-Structure.md +348 -0
- package/website/content/docs/ecosystem/framework-support.md +819 -0
- package/website/content/docs/ecosystem/overview.md +366 -0
- package/website/content/docs/examples/AIFlow-Framework-Integration-with-OSSA.md +107 -0
- package/website/content/docs/examples/Migration-Guides.md +214 -0
- package/website/content/docs/for-audiences/Architects.md +224 -0
- package/website/content/docs/for-audiences/Developers.md +220 -0
- package/website/content/docs/for-audiences/Enterprises.md +256 -0
- package/website/content/docs/for-audiences/Students-Researchers.md +122 -0
- package/website/content/docs/getting-started/5-Minute-Overview.md +85 -0
- package/website/content/docs/getting-started/First-Agent.md +196 -0
- package/website/content/docs/getting-started/Hello-World.md +184 -0
- package/website/content/docs/getting-started/Installation.md +155 -0
- package/website/content/docs/getting-started/index.md +92 -0
- package/website/content/docs/getting-started/running-agents.md +309 -0
- package/website/content/docs/getting-started.md +91 -0
- package/website/content/docs/integrations/aiflow.md +104 -0
- package/website/content/docs/integrations/drupal.md +105 -0
- package/website/content/docs/migration-guides/00-INDEX.md +76 -0
- package/website/content/docs/migration-guides/README.md +133 -0
- package/website/content/docs/migration-guides/agent-schema-comparison.md +232 -0
- package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +1750 -0
- package/website/content/docs/migration-guides/crewai-to-ossa.md +274 -0
- package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +2017 -0
- package/website/content/docs/migration-guides/general-agent-schema.yml +247 -0
- package/website/content/docs/migration-guides/index.md +133 -0
- package/website/content/docs/migration-guides/langchain-to-ossa.md +1714 -0
- package/website/content/docs/migration-guides/langflow-to-ossa.md +2075 -0
- package/website/content/docs/migration-guides/migration-manifest.json +64 -0
- package/website/content/docs/migration-guides/openai-to-ossa.md +1202 -0
- package/website/content/docs/openapi-extensions/examples.md +550 -0
- package/website/content/docs/openapi-extensions/index.md +551 -0
- package/website/content/docs/openapi-extensions/operation-extensions.md +457 -0
- package/website/content/docs/openapi-extensions/root-extensions.md +410 -0
- package/website/content/docs/ossa-compliant-badge.md +251 -0
- package/website/content/docs/pre-release/index.md +175 -0
- package/website/content/docs/quick-reference.md +17 -0
- package/website/content/docs/readme.md +35 -0
- package/website/content/docs/schema-reference/agent-spec.md +406 -0
- package/website/content/docs/schema-reference/autonomy.md +568 -0
- package/website/content/docs/schema-reference/constraints.md +543 -0
- package/website/content/docs/schema-reference/index.md +176 -0
- package/website/content/docs/schema-reference/llm-config.md +445 -0
- package/website/content/docs/schema-reference/observability.md +654 -0
- package/website/content/docs/schema-reference/ossa-manifest.md +309 -0
- package/website/content/docs/schema-reference/taxonomy.md +509 -0
- package/website/content/docs/schema-reference/tools.md +628 -0
- package/website/content/docs/templates/blog-post.md +43 -0
- package/website/content/docs/use-cases/00-index.md +395 -0
- package/website/content/docs/use-cases/cicd-code-review.md +1236 -0
- package/website/content/docs/use-cases/customer-support.md +1234 -0
- package/website/content/docs/use-cases/enterprise-compliance.md +1208 -0
- package/website/content/docs/use-cases/research-multi-agent.md +1161 -0
- package/website/content/docs/versioning.md +288 -0
- package/website/lib/version.ts +35 -0
- package/website/lib/versions.json +18 -17
- package/website/next.config.ts +18 -0
- package/website/nginx.conf +32 -0
- package/website/package-lock.json +9679 -0
- package/website/package.json +59 -0
- package/website/postcss.config.mjs +9 -0
- 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 +72 -0
- package/website/scripts/sync-wiki.ts +322 -0
- package/website/scripts/upload-wiki.ts +199 -0
- package/website/styles/_variables.scss +36 -0
- package/website/tailwind.config.ts +136 -0
- package/.buildkit/agent-first-policy.sh +0 -65
- package/.buildkit/branching-workflow.json +0 -41
- package/.buildkit/hooks.yaml +0 -23
- package/.buildkit/install-buildkit-setup.cjs +0 -483
- package/.cursor/plans/ossa-comprehensive-enhancement-issue-audit-plan.plan.md +0 -735
- package/.cursor/plans/ossa-enterprise-transformation-plan-0ccaf09b.plan.md +0 -373
- package/.cursor/plans/ossa-milestone-organization-and-v0-2-4-release-6dafa4ec.plan.md +0 -214
- package/.cursor/rules/problems.json +0 -483
- package/.cursor/settings.json +0 -29
- package/.cursor/worktrees.json +0 -95
- package/.env.local +0 -31
- package/.github/ISSUE_TEMPLATE/README.md +0 -33
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -61
- package/.github/ISSUE_TEMPLATE/config.yml +0 -12
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -75
- package/.github/wiki_templates/home.md +0 -39
- package/.gitignore.bak +0 -489
- package/.gitlab-ci-trigger +0 -1
- package/.husky/pre-commit +0 -31
- package/.lintstagedrc.json +0 -16
- package/.vscode/extensions.json +0 -6
- package/.vscode/settings.json +0 -3
- package/AUDIT_FIXES.md +0 -139
- package/AUDIT_REPORT.md +0 -308
- package/BUILDKIT_INTEGRATION.md +0 -146
- package/Dockerfile +0 -35
- package/dist/adk/adapters/index.d.ts +0 -64
- package/dist/adk/adapters/index.d.ts.map +0 -1
- package/dist/adk/adapters/index.js +0 -257
- package/dist/adk/adapters/index.js.map +0 -1
- package/dist/adk/agents/custom-agent.d.ts +0 -55
- package/dist/adk/agents/custom-agent.d.ts.map +0 -1
- package/dist/adk/agents/custom-agent.js +0 -167
- package/dist/adk/agents/custom-agent.js.map +0 -1
- package/dist/adk/agents/index.d.ts +0 -64
- package/dist/adk/agents/index.d.ts.map +0 -1
- package/dist/adk/agents/index.js +0 -125
- package/dist/adk/agents/index.js.map +0 -1
- package/dist/adk/agents/llm-agent.d.ts +0 -27
- package/dist/adk/agents/llm-agent.d.ts.map +0 -1
- package/dist/adk/agents/llm-agent.js +0 -63
- package/dist/adk/agents/llm-agent.js.map +0 -1
- package/dist/adk/agents/workflow-agent.d.ts +0 -42
- package/dist/adk/agents/workflow-agent.d.ts.map +0 -1
- package/dist/adk/agents/workflow-agent.js +0 -144
- package/dist/adk/agents/workflow-agent.js.map +0 -1
- package/dist/adk/index.d.ts +0 -10
- package/dist/adk/index.d.ts.map +0 -1
- package/dist/adk/index.js +0 -10
- package/dist/adk/index.js.map +0 -1
- package/dist/adk/orchestration/index.d.ts +0 -63
- package/dist/adk/orchestration/index.d.ts.map +0 -1
- package/dist/adk/orchestration/index.js +0 -264
- package/dist/adk/orchestration/index.js.map +0 -1
- package/dist/adk/state/index.d.ts +0 -73
- package/dist/adk/state/index.d.ts.map +0 -1
- package/dist/adk/state/index.js +0 -177
- package/dist/adk/state/index.js.map +0 -1
- package/dist/adk/tools/index.d.ts +0 -65
- package/dist/adk/tools/index.d.ts.map +0 -1
- package/dist/adk/tools/index.js +0 -252
- package/dist/adk/tools/index.js.map +0 -1
- package/dist/cli/agent-deployment.d.ts +0 -34
- package/dist/cli/agent-deployment.d.ts.map +0 -1
- package/dist/cli/agent-deployment.js +0 -396
- package/dist/cli/agent-deployment.js.map +0 -1
- package/dist/cli/commands/discover.command.d.ts +0 -7
- package/dist/cli/commands/discover.command.d.ts.map +0 -1
- package/dist/cli/commands/discover.command.js +0 -80
- package/dist/cli/commands/discover.command.js.map +0 -1
- package/dist/cli/commands/export.command.d.ts +0 -7
- package/dist/cli/commands/export.command.d.ts.map +0 -1
- package/dist/cli/commands/export.command.js +0 -56
- package/dist/cli/commands/export.command.js.map +0 -1
- package/dist/cli/commands/generate.command.d.ts +0 -7
- package/dist/cli/commands/generate.command.d.ts.map +0 -1
- package/dist/cli/commands/generate.command.js +0 -66
- package/dist/cli/commands/generate.command.js.map +0 -1
- package/dist/cli/commands/gitlab-agent.command.d.ts +0 -8
- package/dist/cli/commands/gitlab-agent.command.d.ts.map +0 -1
- package/dist/cli/commands/gitlab-agent.command.js +0 -201
- package/dist/cli/commands/gitlab-agent.command.js.map +0 -1
- package/dist/cli/commands/import.command.d.ts +0 -7
- package/dist/cli/commands/import.command.d.ts.map +0 -1
- package/dist/cli/commands/import.command.js +0 -36
- package/dist/cli/commands/import.command.js.map +0 -1
- package/dist/cli/commands/init.command.d.ts +0 -7
- package/dist/cli/commands/init.command.d.ts.map +0 -1
- package/dist/cli/commands/init.command.js +0 -146
- package/dist/cli/commands/init.command.js.map +0 -1
- package/dist/cli/commands/migrate.command.d.ts +0 -7
- package/dist/cli/commands/migrate.command.d.ts.map +0 -1
- package/dist/cli/commands/migrate.command.js +0 -110
- package/dist/cli/commands/migrate.command.js.map +0 -1
- package/dist/cli/commands/ossa.d.ts +0 -9
- package/dist/cli/commands/ossa.d.ts.map +0 -1
- package/dist/cli/commands/ossa.js +0 -234
- package/dist/cli/commands/ossa.js.map +0 -1
- package/dist/cli/commands/run.command.d.ts +0 -7
- package/dist/cli/commands/run.command.d.ts.map +0 -1
- package/dist/cli/commands/run.command.js +0 -114
- package/dist/cli/commands/run.command.js.map +0 -1
- package/dist/cli/commands/schema.command.d.ts +0 -7
- package/dist/cli/commands/schema.command.d.ts.map +0 -1
- package/dist/cli/commands/schema.command.js +0 -72
- package/dist/cli/commands/schema.command.js.map +0 -1
- package/dist/cli/commands/validate.command.d.ts +0 -7
- package/dist/cli/commands/validate.command.d.ts.map +0 -1
- package/dist/cli/commands/validate.command.js +0 -125
- package/dist/cli/commands/validate.command.js.map +0 -1
- package/dist/cli/commands/worktree.d.ts +0 -7
- package/dist/cli/commands/worktree.d.ts.map +0 -1
- package/dist/cli/commands/worktree.js +0 -509
- package/dist/cli/commands/worktree.js.map +0 -1
- package/dist/cli/index.d.ts +0 -7
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -50
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/ossa-cli.d.ts +0 -52
- package/dist/cli/ossa-cli.d.ts.map +0 -1
- package/dist/cli/ossa-cli.js +0 -1061
- package/dist/cli/ossa-cli.js.map +0 -1
- package/dist/core/index.d.ts +0 -31
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -37
- package/dist/core/index.js.map +0 -1
- package/dist/core/mcp-server-implementation.d.ts +0 -39
- package/dist/core/mcp-server-implementation.d.ts.map +0 -1
- package/dist/core/mcp-server-implementation.js +0 -1262
- package/dist/core/mcp-server-implementation.js.map +0 -1
- package/dist/core/orchestrator/index.d.ts +0 -156
- package/dist/core/orchestrator/index.d.ts.map +0 -1
- package/dist/core/orchestrator/index.js +0 -446
- package/dist/core/orchestrator/index.js.map +0 -1
- package/dist/core/orchestrator/ossa-orchestrator.d.ts +0 -106
- package/dist/core/orchestrator/ossa-orchestrator.d.ts.map +0 -1
- package/dist/core/orchestrator/ossa-orchestrator.js +0 -396
- package/dist/core/orchestrator/ossa-orchestrator.js.map +0 -1
- package/dist/protocols/acap.d.ts +0 -61
- package/dist/protocols/acap.d.ts.map +0 -1
- package/dist/protocols/acap.js +0 -92
- package/dist/protocols/acap.js.map +0 -1
- package/dist/protocols/index.d.ts +0 -8
- package/dist/protocols/index.d.ts.map +0 -1
- package/dist/protocols/index.js +0 -8
- package/dist/protocols/index.js.map +0 -1
- package/dist/protocols/rasp.d.ts +0 -58
- package/dist/protocols/rasp.d.ts.map +0 -1
- package/dist/protocols/rasp.js +0 -212
- package/dist/protocols/rasp.js.map +0 -1
- package/dist/server/simple-app.d.ts +0 -18
- package/dist/server/simple-app.d.ts.map +0 -1
- package/dist/server/simple-app.js +0 -155
- package/dist/server/simple-app.js.map +0 -1
- package/dist/server/types/agent.d.ts +0 -498
- package/dist/server/types/agent.d.ts.map +0 -1
- package/dist/server/types/agent.js +0 -37
- package/dist/server/types/agent.js.map +0 -1
- package/dist/server/types/server.d.ts +0 -370
- package/dist/server/types/server.d.ts.map +0 -1
- package/dist/server/types/server.js +0 -68
- package/dist/server/types/server.js.map +0 -1
- package/dist/services/discovery.service.d.ts +0 -78
- package/dist/services/discovery.service.d.ts.map +0 -1
- package/dist/services/discovery.service.js +0 -212
- package/dist/services/discovery.service.js.map +0 -1
- package/dist/services/orchestration/worktree-orchestrator.d.ts +0 -146
- package/dist/services/orchestration/worktree-orchestrator.d.ts.map +0 -1
- package/dist/services/orchestration/worktree-orchestrator.js +0 -591
- package/dist/services/orchestration/worktree-orchestrator.js.map +0 -1
- package/dist/services/worktree/branching-strategy.d.ts +0 -17
- package/dist/services/worktree/branching-strategy.d.ts.map +0 -1
- package/dist/services/worktree/branching-strategy.js +0 -66
- package/dist/services/worktree/branching-strategy.js.map +0 -1
- package/dist/services/worktree/git-worktree-manager.d.ts +0 -32
- package/dist/services/worktree/git-worktree-manager.d.ts.map +0 -1
- package/dist/services/worktree/git-worktree-manager.js +0 -61
- package/dist/services/worktree/git-worktree-manager.js.map +0 -1
- package/dist/spec/v0.2.4-dev/README.md +0 -61
- package/dist/spec/v0.2.4-dev/RELEASE-PROCESS.md +0 -130
- package/dist/spec/v0.2.4-dev/migrations/v0.2.3-to-v0.2.4.md +0 -599
- package/dist/spec/v0.2.4-dev/openapi/CHANGELOG-0.2.4.md +0 -177
- package/dist/spec/v0.2.4-dev/openapi/README-0.2.4.md +0 -51
- package/dist/spec/v0.2.4-dev/openapi/VERIFICATION-0.2.4.md +0 -147
- package/dist/spec/v0.2.4-dev/ossa-0.2.4-dev.schema.json +0 -1717
- 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.schema.json +0 -1732
- package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
- package/dist/specification/validator.d.ts +0 -82
- package/dist/specification/validator.d.ts.map +0 -1
- package/dist/specification/validator.js +0 -562
- package/dist/specification/validator.js.map +0 -1
- package/dist/types/acdl-api.d.ts +0 -335
- package/dist/types/acdl-api.d.ts.map +0 -1
- package/dist/types/acdl-api.js +0 -6
- package/dist/types/acdl-api.js.map +0 -1
- package/dist/types/agents/index.d.ts +0 -53
- package/dist/types/agents/index.d.ts.map +0 -1
- package/dist/types/agents/index.js +0 -5
- package/dist/types/agents/index.js.map +0 -1
- package/dist/types/api.d.ts +0 -225
- package/dist/types/api.d.ts.map +0 -1
- package/dist/types/api.js +0 -6
- package/dist/types/api.js.map +0 -1
- package/dist/types/architecture/index.d.ts +0 -530
- package/dist/types/architecture/index.d.ts.map +0 -1
- package/dist/types/architecture/index.js +0 -258
- package/dist/types/architecture/index.js.map +0 -1
- package/dist/types/policies/index.d.ts +0 -35
- package/dist/types/policies/index.d.ts.map +0 -1
- package/dist/types/policies/index.js +0 -5
- package/dist/types/policies/index.js.map +0 -1
- package/dist/types/workflows/index.d.ts +0 -40
- package/dist/types/workflows/index.d.ts.map +0 -1
- package/dist/types/workflows/index.js +0 -5
- package/dist/types/workflows/index.js.map +0 -1
- package/dist/utils/version-resolver.d.ts +0 -28
- package/dist/utils/version-resolver.d.ts.map +0 -1
- package/dist/utils/version-resolver.js +0 -110
- package/dist/utils/version-resolver.js.map +0 -1
- package/docker-compose.yml +0 -160
- package/public/api-docs.html +0 -206
- package/public/assets/favicon.svg +0 -8
- package/public/assets/script.js +0 -279
- package/public/assets/style.css +0 -632
- package/public/index.html +0 -307
- package/public/redocly-config.yaml +0 -80
- package/public/src/api/acdl-specification.yml +0 -531
- package/public/src/api/clean-architecture.openapi.yml +0 -1435
- package/public/src/api/context7-mcp.openapi.yml +0 -313
- package/public/src/api/magic-mcp.openapi.yml +0 -647
- package/public/src/api/mcp-infrastructure.openapi.yml +0 -904
- package/public/src/api/orchestration.openapi.yml +0 -444
- package/public/src/api/ossa-complete.openapi.yml +0 -2250
- package/public/src/api/project-discovery.openapi.yml +0 -1293
- package/public/src/api/rebuild-audit.openapi.yml +0 -800
- package/public/src/api/specification.openapi.yml +0 -498
- package/public/src/api/voice-agent-specification.yml +0 -640
- package/public/src/api/web-eval-mcp.openapi.yml +0 -426
- package/pyrightconfig.json +0 -13
- package/redocly.yaml +0 -56
- package/specs/README.md +0 -31
- package/specs/acdl-specification.yml +0 -531
- package/specs/clean-architecture.openapi.yml +0 -1435
- package/specs/context7-mcp.openapi.yml +0 -313
- package/specs/magic-mcp.openapi.yml +0 -647
- package/specs/mcp-infrastructure.openapi.yml +0 -904
- package/specs/orchestration.openapi.yml +0 -444
- package/specs/ossa-complete.openapi.yml +0 -2250
- package/specs/project-discovery.openapi.yml +0 -1293
- package/specs/rebuild-audit.openapi.yml +0 -800
- package/specs/specification.openapi.yml +0 -498
- package/specs/test-api.openapi.yml +0 -20
- package/specs/voice-agent-specification.yml +0 -640
- package/specs/web-eval-mcp.openapi.yml +0 -426
- package/src/adk/adapters/index.ts +0 -310
- package/src/adk/agents/custom-agent.ts +0 -206
- package/src/adk/agents/index.ts +0 -158
- package/src/adk/agents/llm-agent.ts +0 -76
- package/src/adk/agents/workflow-agent.ts +0 -191
- package/src/adk/index.ts +0 -10
- package/src/adk/orchestration/index.ts +0 -352
- package/src/adk/state/index.ts +0 -217
- package/src/adk/tools/index.ts +0 -291
- package/src/api/acdl-specification.yml +0 -531
- package/src/api/agent-manifest.schema.json +0 -859
- package/src/api/agent-worktree-schema.json +0 -320
- package/src/api/clean-architecture.openapi.yml +0 -1435
- package/src/api/context7-mcp.openapi.yml +0 -313
- package/src/api/magic-mcp.openapi.yml +0 -647
- package/src/api/mcp-infrastructure.openapi.yml +0 -904
- package/src/api/openapi.redoc.config.json +0 -6
- package/src/api/orchestration.openapi.yml +0 -444
- package/src/api/ossa-complete.openapi.yml +0 -2250
- package/src/api/project-discovery.openapi.yml +0 -1293
- package/src/api/rebuild-audit.openapi.yml +0 -800
- package/src/api/specification.openapi.yml +0 -498
- package/src/api/test-api.openapi.yml +0 -20
- package/src/api/voice-agent-specification.yml +0 -640
- package/src/api/web-eval-mcp.openapi.yml +0 -426
- package/src/api/workflow.schema.json +0 -524
- package/src/cli/agent-deployment.ts +0 -452
- package/src/cli/commands/ossa.ts +0 -272
- package/src/cli/commands/worktree.ts +0 -603
- package/src/cli/ossa-cli.ts +0 -1176
- package/src/core/index.ts +0 -42
- package/src/core/mcp-server-implementation.ts +0 -1409
- package/src/core/orchestrator/index.ts +0 -611
- package/src/core/orchestrator/ossa-orchestrator.ts +0 -504
- package/src/mcp/simple-server.ts +0 -322
- package/src/protocols/acap.ts +0 -146
- package/src/protocols/index.ts +0 -8
- package/src/protocols/rasp.ts +0 -263
- package/src/server/app.ts +0 -472
- package/src/server/middleware/agentAccess.ts +0 -10
- package/src/server/middleware/asyncHandler.ts +0 -10
- package/src/server/middleware/auth.ts +0 -10
- package/src/server/middleware/errorHandler.ts +0 -9
- package/src/server/middleware/logging.ts +0 -10
- package/src/server/middleware/metrics.ts +0 -10
- package/src/server/middleware/validation.ts +0 -10
- package/src/server/routes/agents.ts +0 -632
- package/src/server/routes/monitoring.ts +0 -13
- package/src/server/routes/orchestration.ts +0 -13
- package/src/server/routes/specifications.ts +0 -13
- package/src/server/services/AgentService.ts +0 -46
- package/src/server/services/ExecutionService.ts +0 -51
- package/src/server/services/SpecificationService.ts +0 -22
- package/src/server/services/WebhookService.ts +0 -24
- package/src/server/simple-app.ts +0 -174
- package/src/server/types/agent.ts +0 -612
- package/src/server/types/server.ts +0 -465
- package/src/services/orchestration/worktree-orchestrator.ts +0 -779
- package/src/services/worktree/branching-strategy.ts +0 -76
- package/src/services/worktree/git-worktree-manager.ts +0 -86
- package/website/.next/BUILD_ID +0 -1
- package/website/.next/app-build-manifest.json +0 -151
- package/website/.next/app-path-routes-manifest.json +0 -19
- package/website/.next/build-manifest.json +0 -33
- package/website/.next/cache/.previewinfo +0 -1
- package/website/.next/cache/.rscinfo +0 -1
- package/website/.next/cache/.tsbuildinfo +0 -1
- package/website/.next/cache/fetch-cache/920aec34c288eefa97c5efba3baf95a846a0beb0c48a5064980a2c24b83e941c +0 -1
- package/website/.next/cache/fetch-cache/c2ad7a72b43463a0daaa85ca926a8af38defd17ecb64f1fdd2dd4fe2293e8b26 +0 -1
- package/website/.next/cache/fetch-cache/d10eb963d5980c8a50ee9ed24472339ee6da054ead33e00676e61e8b8e62cc83 +0 -1
- package/website/.next/cache/fetch-cache/f243d84640477f3205b74a85013018acd63b692144675630a74d1af8a3e9eab5 +0 -1
- package/website/.next/cache/webpack/client-production/0.pack +0 -0
- package/website/.next/cache/webpack/client-production/1.pack +0 -0
- package/website/.next/cache/webpack/client-production/10.pack +0 -0
- package/website/.next/cache/webpack/client-production/11.pack +0 -0
- package/website/.next/cache/webpack/client-production/12.pack +0 -0
- package/website/.next/cache/webpack/client-production/13.pack +0 -0
- package/website/.next/cache/webpack/client-production/14.pack +0 -0
- package/website/.next/cache/webpack/client-production/15.pack +0 -0
- package/website/.next/cache/webpack/client-production/16.pack +0 -0
- package/website/.next/cache/webpack/client-production/17.pack +0 -0
- package/website/.next/cache/webpack/client-production/18.pack +0 -0
- package/website/.next/cache/webpack/client-production/2.pack +0 -0
- package/website/.next/cache/webpack/client-production/3.pack +0 -0
- package/website/.next/cache/webpack/client-production/4.pack +0 -0
- package/website/.next/cache/webpack/client-production/5.pack +0 -0
- package/website/.next/cache/webpack/client-production/6.pack +0 -0
- package/website/.next/cache/webpack/client-production/7.pack +0 -0
- package/website/.next/cache/webpack/client-production/8.pack +0 -0
- package/website/.next/cache/webpack/client-production/9.pack +0 -0
- package/website/.next/cache/webpack/client-production/index.pack +0 -0
- package/website/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/website/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/website/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/website/.next/cache/webpack/server-production/0.pack +0 -0
- package/website/.next/cache/webpack/server-production/1.pack +0 -0
- package/website/.next/cache/webpack/server-production/10.pack +0 -0
- package/website/.next/cache/webpack/server-production/11.pack +0 -0
- package/website/.next/cache/webpack/server-production/12.pack +0 -0
- package/website/.next/cache/webpack/server-production/2.pack +0 -0
- package/website/.next/cache/webpack/server-production/3.pack +0 -0
- package/website/.next/cache/webpack/server-production/4.pack +0 -0
- package/website/.next/cache/webpack/server-production/5.pack +0 -0
- package/website/.next/cache/webpack/server-production/6.pack +0 -0
- package/website/.next/cache/webpack/server-production/7.pack +0 -0
- package/website/.next/cache/webpack/server-production/8.pack +0 -0
- package/website/.next/cache/webpack/server-production/9.pack +0 -0
- package/website/.next/cache/webpack/server-production/index.pack +0 -0
- package/website/.next/cache/webpack/server-production/index.pack.old +0 -0
- package/website/.next/diagnostics/build-diagnostics.json +0 -6
- package/website/.next/diagnostics/framework.json +0 -1
- package/website/.next/export-detail.json +0 -5
- package/website/.next/export-marker.json +0 -6
- package/website/.next/images-manifest.json +0 -57
- package/website/.next/next-minimal-server.js.nft.json +0 -1
- package/website/.next/next-server.js.nft.json +0 -1
- package/website/.next/package.json +0 -1
- package/website/.next/prerender-manifest.json +0 -2143
- package/website/.next/react-loadable-manifest.json +0 -1898
- package/website/.next/required-server-files.json +0 -320
- package/website/.next/routes-manifest.json +0 -161
- package/website/.next/server/app/_not-found/page.js +0 -2
- package/website/.next/server/app/_not-found/page.js.nft.json +0 -1
- package/website/.next/server/app/_not-found/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/_not-found.html +0 -1
- package/website/.next/server/app/_not-found.meta +0 -8
- package/website/.next/server/app/_not-found.rsc +0 -23
- package/website/.next/server/app/about/page.js +0 -2
- package/website/.next/server/app/about/page.js.nft.json +0 -1
- package/website/.next/server/app/about/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/about.html +0 -1
- package/website/.next/server/app/about.meta +0 -7
- package/website/.next/server/app/about.rsc +0 -40
- package/website/.next/server/app/blog/OpenAPI-AI-Agents-Standard.html +0 -217
- package/website/.next/server/app/blog/OpenAPI-AI-Agents-Standard.meta +0 -7
- package/website/.next/server/app/blog/OpenAPI-AI-Agents-Standard.rsc +0 -308
- package/website/.next/server/app/blog/Why-Formal-Standards-Matter-Now.html +0 -180
- package/website/.next/server/app/blog/Why-Formal-Standards-Matter-Now.meta +0 -7
- package/website/.next/server/app/blog/Why-Formal-Standards-Matter-Now.rsc +0 -232
- package/website/.next/server/app/blog/[slug]/page.js +0 -2
- package/website/.next/server/app/blog/[slug]/page.js.nft.json +0 -1
- package/website/.next/server/app/blog/[slug]/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/blog/introducing-ossa-framework.html +0 -263
- package/website/.next/server/app/blog/introducing-ossa-framework.meta +0 -7
- package/website/.next/server/app/blog/introducing-ossa-framework.rsc +0 -351
- package/website/.next/server/app/blog/ossa-production-results.html +0 -198
- package/website/.next/server/app/blog/ossa-production-results.meta +0 -7
- package/website/.next/server/app/blog/ossa-production-results.rsc +0 -302
- package/website/.next/server/app/blog/page.js +0 -2
- package/website/.next/server/app/blog/page.js.nft.json +0 -1
- package/website/.next/server/app/blog/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/blog/welcome-to-ossa.html +0 -22
- package/website/.next/server/app/blog/welcome-to-ossa.meta +0 -7
- package/website/.next/server/app/blog/welcome-to-ossa.rsc +0 -31
- package/website/.next/server/app/blog/why-ai-agents-need-open-standard.html +0 -63
- package/website/.next/server/app/blog/why-ai-agents-need-open-standard.meta +0 -7
- package/website/.next/server/app/blog/why-ai-agents-need-open-standard.rsc +0 -121
- package/website/.next/server/app/blog.html +0 -1
- package/website/.next/server/app/blog.meta +0 -7
- package/website/.next/server/app/blog.rsc +0 -35
- package/website/.next/server/app/design-guide/page.js +0 -12
- package/website/.next/server/app/design-guide/page.js.nft.json +0 -1
- package/website/.next/server/app/design-guide/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/design-guide.html +0 -11
- package/website/.next/server/app/design-guide.meta +0 -7
- package/website/.next/server/app/design-guide.rsc +0 -41
- package/website/.next/server/app/docs.html +0 -1
- package/website/.next/server/app/docs.meta +0 -7
- package/website/.next/server/app/docs.rsc +0 -42
- package/website/.next/server/app/ecosystem/page.js +0 -2
- package/website/.next/server/app/ecosystem/page.js.nft.json +0 -1
- package/website/.next/server/app/ecosystem/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/ecosystem.html +0 -1
- package/website/.next/server/app/ecosystem.meta +0 -7
- package/website/.next/server/app/ecosystem.rsc +0 -40
- package/website/.next/server/app/examples.html +0 -1
- package/website/.next/server/app/examples.meta +0 -7
- package/website/.next/server/app/examples.rsc +0 -14559
- package/website/.next/server/app/index.html +0 -3
- package/website/.next/server/app/index.meta +0 -7
- package/website/.next/server/app/index.rsc +0 -40
- package/website/.next/server/app/license/page.js +0 -2
- package/website/.next/server/app/license/page.js.nft.json +0 -1
- package/website/.next/server/app/license/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/license.html +0 -191
- package/website/.next/server/app/license.meta +0 -7
- package/website/.next/server/app/license.rsc +0 -222
- package/website/.next/server/app/page.js +0 -4
- package/website/.next/server/app/page.js.nft.json +0 -1
- package/website/.next/server/app/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/playground/page.js +0 -111
- package/website/.next/server/app/playground/page.js.nft.json +0 -1
- package/website/.next/server/app/playground/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/playground.html +0 -1
- package/website/.next/server/app/playground.meta +0 -7
- package/website/.next/server/app/playground.rsc +0 -30
- package/website/.next/server/app/robots.txt/route.js +0 -1
- package/website/.next/server/app/robots.txt/route.js.nft.json +0 -1
- package/website/.next/server/app/robots.txt/route_client-reference-manifest.js +0 -1
- package/website/.next/server/app/robots.txt.body +0 -6
- package/website/.next/server/app/robots.txt.meta +0 -1
- package/website/.next/server/app/rss.xml/route.js +0 -18
- package/website/.next/server/app/rss.xml/route.js.nft.json +0 -1
- package/website/.next/server/app/rss.xml/route_client-reference-manifest.js +0 -1
- package/website/.next/server/app/rss.xml.body +0 -11
- package/website/.next/server/app/rss.xml.meta +0 -1
- package/website/.next/server/app/schema/page.js +0 -76
- package/website/.next/server/app/schema/page.js.nft.json +0 -1
- package/website/.next/server/app/schema/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/schema.html +0 -1
- package/website/.next/server/app/schema.meta +0 -7
- package/website/.next/server/app/schema.rsc +0 -26
- package/website/.next/server/app/sitemap.xml/route.js +0 -1
- package/website/.next/server/app/sitemap.xml/route.js.nft.json +0 -1
- package/website/.next/server/app/sitemap.xml/route_client-reference-manifest.js +0 -1
- package/website/.next/server/app/sitemap.xml.body +0 -39
- package/website/.next/server/app/sitemap.xml.meta +0 -1
- package/website/.next/server/app/specification/page.js +0 -10
- package/website/.next/server/app/specification/page.js.nft.json +0 -1
- package/website/.next/server/app/specification/page_client-reference-manifest.js +0 -1
- package/website/.next/server/app/specification.html +0 -9
- package/website/.next/server/app/specification.meta +0 -7
- package/website/.next/server/app/specification.rsc +0 -32
- package/website/.next/server/app-paths-manifest.json +0 -19
- package/website/.next/server/chunks/18.js +0 -1
- package/website/.next/server/chunks/227.js +0 -9
- package/website/.next/server/chunks/339.js +0 -25
- package/website/.next/server/chunks/49.js +0 -1
- package/website/.next/server/chunks/51.js +0 -1
- package/website/.next/server/chunks/57.js +0 -1
- package/website/.next/server/chunks/579.js +0 -16
- package/website/.next/server/chunks/611.js +0 -6
- package/website/.next/server/chunks/873.js +0 -22
- package/website/.next/server/chunks/900.js +0 -1
- package/website/.next/server/chunks/97.js +0 -1
- package/website/.next/server/functions-config-manifest.json +0 -4
- package/website/.next/server/interception-route-rewrite-manifest.js +0 -1
- package/website/.next/server/middleware-build-manifest.js +0 -1
- package/website/.next/server/middleware-manifest.json +0 -6
- package/website/.next/server/middleware-react-loadable-manifest.js +0 -1
- package/website/.next/server/next-font-manifest.js +0 -1
- package/website/.next/server/next-font-manifest.json +0 -1
- package/website/.next/server/pages/404.html +0 -1
- package/website/.next/server/pages/500.html +0 -1
- package/website/.next/server/pages/_app.js +0 -1
- package/website/.next/server/pages/_app.js.nft.json +0 -1
- package/website/.next/server/pages/_document.js +0 -1
- package/website/.next/server/pages/_document.js.nft.json +0 -1
- package/website/.next/server/pages/_error.js +0 -19
- package/website/.next/server/pages/_error.js.nft.json +0 -1
- package/website/.next/server/pages-manifest.json +0 -6
- package/website/.next/server/server-reference-manifest.js +0 -1
- package/website/.next/server/server-reference-manifest.json +0 -1
- package/website/.next/server/webpack-runtime.js +0 -1
- package/website/.next/static/IDhDQiozPwOaA3PpMqvTE/_buildManifest.js +0 -1
- package/website/.next/static/IDhDQiozPwOaA3PpMqvTE/_ssgManifest.js +0 -1
- package/website/.next/static/chunks/119.05f66060d7798fc9.js +0 -25
- package/website/.next/static/chunks/255-bf407b21685f2318.js +0 -1
- package/website/.next/static/chunks/451-235273497e501ae9.js +0 -1
- package/website/.next/static/chunks/4bd1b696-409494caf8c83275.js +0 -1
- package/website/.next/static/chunks/619-f072ac750404f9da.js +0 -1
- package/website/.next/static/chunks/651-5cd3c87d43b7eb46.js +0 -1
- package/website/.next/static/chunks/778.278ac2aadb2a1105.js +0 -1
- package/website/.next/static/chunks/890-ab915e0570e1961b.js +0 -1
- package/website/.next/static/chunks/app/_not-found/page-ccdaf9d90b537c5d.js +0 -1
- package/website/.next/static/chunks/app/about/page-bd4cb2219b41f933.js +0 -1
- package/website/.next/static/chunks/app/blog/[slug]/page-8fd43000c4969233.js +0 -1
- package/website/.next/static/chunks/app/blog/page-bd4cb2219b41f933.js +0 -1
- package/website/.next/static/chunks/app/design-guide/page-bd4cb2219b41f933.js +0 -1
- package/website/.next/static/chunks/app/ecosystem/page-bd4cb2219b41f933.js +0 -1
- package/website/.next/static/chunks/app/layout-ccacbd90656baa78.js +0 -1
- package/website/.next/static/chunks/app/license/page-bd4cb2219b41f933.js +0 -1
- package/website/.next/static/chunks/app/page-31241dc7465f9590.js +0 -1
- package/website/.next/static/chunks/app/playground/page-c2af00885374900f.js +0 -1
- package/website/.next/static/chunks/app/robots.txt/route-032c05054032342f.js +0 -1
- package/website/.next/static/chunks/app/rss.xml/route-032c05054032342f.js +0 -1
- package/website/.next/static/chunks/app/schema/page-f7c224b281771083.js +0 -1
- package/website/.next/static/chunks/app/sitemap.xml/route-032c05054032342f.js +0 -1
- package/website/.next/static/chunks/app/specification/page-bd4cb2219b41f933.js +0 -1
- package/website/.next/static/chunks/framework-1ce91eb6f9ecda85.js +0 -1
- package/website/.next/static/chunks/main-3099e141650ec47a.js +0 -1
- package/website/.next/static/chunks/main-app-a2fc6ac9305e3090.js +0 -1
- package/website/.next/static/chunks/pages/_app-5addca2b3b969fde.js +0 -1
- package/website/.next/static/chunks/pages/_error-022e4ac7bbb9914f.js +0 -1
- package/website/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
- package/website/.next/static/chunks/webpack-6ecb09e5c6e34cb4.js +0 -1
- package/website/.next/static/css/23135390005d4468.css +0 -3
- package/website/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
- package/website/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
- package/website/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
- package/website/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
- package/website/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
- package/website/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
- package/website/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
- package/website/.next/trace +0 -3
- package/website/.next/types/app/about/page.ts +0 -84
- package/website/.next/types/app/blog/[slug]/page.ts +0 -84
- package/website/.next/types/app/blog/page.ts +0 -84
- package/website/.next/types/app/design-guide/page.ts +0 -84
- package/website/.next/types/app/ecosystem/page.ts +0 -84
- package/website/.next/types/app/license/page.ts +0 -84
- package/website/.next/types/app/page.ts +0 -84
- package/website/.next/types/app/playground/page.ts +0 -84
- package/website/.next/types/app/rss.xml/route.ts +0 -347
- package/website/.next/types/app/schema/page.ts +0 -84
- package/website/.next/types/app/specification/page.ts +0 -84
- package/website/.next/types/cache-life.d.ts +0 -141
- package/website/.next/types/package.json +0 -1
- package/website/.next/types/routes.d.ts +0 -85
- package/website/.next/types/validator.ts +0 -187
- package/website/.wiki-export/Agent-Folder-Structure.md +0 -215
- package/website/.wiki-export/CI-STATUS.md +0 -66
- package/website/.wiki-export/COMPLETE-IMPLEMENTATION-CHECKLIST.md +0 -74
- package/website/.wiki-export/DRUPAL-MODULE-INTEGRATION.md +0 -103
- package/website/.wiki-export/FINAL-STATUS.md +0 -63
- package/website/.wiki-export/Getting-Started.md +0 -87
- package/website/.wiki-export/INSTRUCTIONS.md +0 -46
- package/website/.wiki-export/INTEGRATION-ANALYSIS.md +0 -216
- package/website/.wiki-export/MANIFEST.json +0 -62
- package/website/.wiki-export/OSSA-COMPLIANT-BADGE.md +0 -247
- package/website/.wiki-export/Openapi-Extensions.md +0 -930
- package/website/.wiki-export/README.md +0 -31
- package/website/.wiki-export/RELEASE-READINESS.md +0 -95
- package/website/.wiki-export/VERSIONING.md +0 -284
- package/website/next-env.d.ts +0 -6
- package/website/out/app-build-manifest.json +0 -3
- package/website/out/build-manifest.json +0 -17
- package/website/out/cache/.rscinfo +0 -1
- package/website/out/cache/next-devtools-config.json +0 -1
- package/website/out/cache/webpack/client-development/0.pack.gz +0 -0
- package/website/out/cache/webpack/client-development/1.pack.gz +0 -0
- package/website/out/cache/webpack/client-development/2.pack.gz +0 -0
- package/website/out/cache/webpack/client-development/3.pack.gz +0 -0
- package/website/out/cache/webpack/client-development/index.pack.gz +0 -0
- package/website/out/cache/webpack/client-development/index.pack.gz.old +0 -0
- package/website/out/cache/webpack/client-development-fallback/0.pack.gz +0 -0
- package/website/out/cache/webpack/client-development-fallback/index.pack.gz +0 -0
- package/website/out/cache/webpack/server-development/0.pack.gz +0 -0
- package/website/out/cache/webpack/server-development/1.pack.gz +0 -0
- package/website/out/cache/webpack/server-development/2.pack.gz +0 -0
- package/website/out/cache/webpack/server-development/3.pack.gz +0 -0
- package/website/out/cache/webpack/server-development/index.pack.gz +0 -0
- package/website/out/cache/webpack/server-development/index.pack.gz.old +0 -0
- package/website/out/package.json +0 -1
- package/website/out/prerender-manifest.json +0 -11
- package/website/out/react-loadable-manifest.json +0 -1
- package/website/out/routes-manifest.json +0 -1
- package/website/out/server/app-paths-manifest.json +0 -1
- package/website/out/server/interception-route-rewrite-manifest.js +0 -1
- package/website/out/server/middleware-build-manifest.js +0 -19
- package/website/out/server/middleware-manifest.json +0 -6
- package/website/out/server/middleware-react-loadable-manifest.js +0 -1
- package/website/out/server/next-font-manifest.js +0 -1
- package/website/out/server/next-font-manifest.json +0 -1
- package/website/out/server/pages-manifest.json +0 -1
- package/website/out/server/server-reference-manifest.js +0 -1
- package/website/out/server/server-reference-manifest.json +0 -5
- package/website/out/static/chunks/polyfills.js +0 -1
- package/website/out/static/development/_buildManifest.js +0 -1
- package/website/out/static/development/_ssgManifest.js +0 -1
- package/website/out/trace +0 -2
- package/website/out/types/cache-life.d.ts +0 -141
- package/website/out/types/package.json +0 -1
- package/website/out/types/routes.d.ts +0 -85
- package/website/out/types/validator.ts +0 -187
- package/website/public/examples.json +0 -476
- package/website/public/schemas/openapi-extensions.schema.json +0 -486
- package/website/tsconfig.tsbuildinfo +0 -1
- /package/dist/spec/{v0.2.4-dev → v0.2.4}/ossa-0.2.4-dev.yaml +0 -0
- /package/spec/v0.2.4/{ossa-0.2.4.yaml → ossa-0.2.4-dev.yaml} +0 -0
|
@@ -0,0 +1,1714 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "LangChain to OSSA"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# LangChain to OSSA Migration Guide
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
### What is LangChain?
|
|
10
|
+
LangChain is a Python framework for building applications powered by large language models (LLMs). It provides abstractions for:
|
|
11
|
+
- **Agents**: Autonomous decision-making systems that use LLMs
|
|
12
|
+
- **Tools**: External functions agents can call
|
|
13
|
+
- **Chains**: Sequential execution pipelines
|
|
14
|
+
- **Memory**: Conversation and state persistence
|
|
15
|
+
- **Prompt Templates**: Reusable prompt structures
|
|
16
|
+
- **Vector Stores**: Document retrieval and embedding management
|
|
17
|
+
|
|
18
|
+
### Why Migrate to OSSA?
|
|
19
|
+
|
|
20
|
+
**OSSA (Open Standard for Scalable Agents)** provides several advantages over LangChain:
|
|
21
|
+
|
|
22
|
+
1. **Language Agnostic**: OSSA is a specification, not a framework. Works with TypeScript, Python, Go, Rust, etc.
|
|
23
|
+
2. **OpenAPI-First**: Built on web standards with REST APIs at the core
|
|
24
|
+
3. **Production-Ready**: Built-in monitoring, health checks, resource management, and compliance
|
|
25
|
+
4. **Interoperability**: Native bridges to MCP, OpenAPI, LangChain, CrewAI, AutoGen, and A2A protocols
|
|
26
|
+
5. **Enterprise Features**: Audit logging, policy enforcement, encryption, and compliance frameworks (ISO42001, SOC2, GDPR)
|
|
27
|
+
6. **Cloud Native**: Kubernetes-ready with proper resource limits and scaling
|
|
28
|
+
7. **Type Safety**: JSON Schema for all inputs/outputs with automatic validation
|
|
29
|
+
|
|
30
|
+
### Migration Complexity: **Medium**
|
|
31
|
+
|
|
32
|
+
**Estimated Time**: 2-4 hours per agent depending on complexity
|
|
33
|
+
|
|
34
|
+
**Difficulty Factors**:
|
|
35
|
+
- ✅ Straightforward for simple agents with basic tools
|
|
36
|
+
- ⚠️ Moderate for agents with memory and chains
|
|
37
|
+
- ⚠️ Complex for multi-agent orchestration and custom callbacks
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Conceptual Mapping
|
|
42
|
+
|
|
43
|
+
| LangChain Concept | OSSA Equivalent | Notes |
|
|
44
|
+
|-------------------|-----------------|-------|
|
|
45
|
+
| `Agent` | OSSA Agent manifest | Define in `agent.yml` with metadata |
|
|
46
|
+
| `Tool` | OSSA Capability | Each tool becomes a capability with JSON schemas |
|
|
47
|
+
| `Chain` / `LLMChain` | OSSA workflow capabilities | Sequential or parallel execution |
|
|
48
|
+
| `ConversationBufferMemory` | OSSA state management | Redis, PostgreSQL, or in-memory |
|
|
49
|
+
| `Prompt Template` | OSSA `input_schema` | Define expected inputs as JSON Schema |
|
|
50
|
+
| `LLM (OpenAI, Anthropic)` | OSSA `llm` configuration | Configure provider and model |
|
|
51
|
+
| `VectorStore` | External service | Integrate via capability or MCP server |
|
|
52
|
+
| `Document Loaders` | Custom capability | Implement as file processing capability |
|
|
53
|
+
| `Embeddings` | External service | Use OpenAI, Cohere, or custom embedding service |
|
|
54
|
+
| `Callbacks` | OSSA monitoring/events | Built-in traces, metrics, logs, and events |
|
|
55
|
+
| `OutputParser` | OSSA `output_schema` | Define structured output with JSON Schema |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Migration Strategy
|
|
60
|
+
|
|
61
|
+
### Phase 1: Assessment
|
|
62
|
+
1. **Inventory your LangChain components**
|
|
63
|
+
- List all agents, tools, chains, and memory stores
|
|
64
|
+
- Document LLM providers and models used
|
|
65
|
+
- Identify custom callbacks and parsers
|
|
66
|
+
|
|
67
|
+
2. **Map dependencies**
|
|
68
|
+
- External APIs and services
|
|
69
|
+
- Vector databases and document stores
|
|
70
|
+
- Authentication and secrets management
|
|
71
|
+
|
|
72
|
+
3. **Define success criteria**
|
|
73
|
+
- Functional parity with existing LangChain implementation
|
|
74
|
+
- Performance benchmarks
|
|
75
|
+
- Monitoring and observability requirements
|
|
76
|
+
|
|
77
|
+
### Phase 2: Design
|
|
78
|
+
1. **Create OSSA agent structure**
|
|
79
|
+
```bash
|
|
80
|
+
buildkit agents create \
|
|
81
|
+
--name your-agent \
|
|
82
|
+
--type worker \
|
|
83
|
+
--capabilities tool1,tool2,tool3 \
|
|
84
|
+
--enable-mcp \
|
|
85
|
+
--enable-openapi
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
2. **Map each LangChain tool to OSSA capability**
|
|
89
|
+
- Define input schemas (replace prompt templates)
|
|
90
|
+
- Define output schemas (replace output parsers)
|
|
91
|
+
- Document capability purpose and examples
|
|
92
|
+
|
|
93
|
+
3. **Design state management strategy**
|
|
94
|
+
- Choose state provider (Redis, PostgreSQL, in-memory)
|
|
95
|
+
- Define state schema
|
|
96
|
+
- Plan state persistence and retrieval
|
|
97
|
+
|
|
98
|
+
### Phase 3: Implementation
|
|
99
|
+
1. **Migrate tools to capabilities** (see examples below)
|
|
100
|
+
2. **Implement LLM integration** (OpenAI, Anthropic, etc.)
|
|
101
|
+
3. **Add state management** (if using memory)
|
|
102
|
+
4. **Configure monitoring and health checks**
|
|
103
|
+
5. **Set up authentication and security**
|
|
104
|
+
|
|
105
|
+
### Phase 4: Testing
|
|
106
|
+
1. **Unit tests** for each capability
|
|
107
|
+
2. **Integration tests** for workflows
|
|
108
|
+
3. **Performance testing** against benchmarks
|
|
109
|
+
4. **Load testing** for production readiness
|
|
110
|
+
|
|
111
|
+
### Phase 5: Deployment
|
|
112
|
+
1. **Deploy to staging environment**
|
|
113
|
+
2. **Run parallel with LangChain** (if possible)
|
|
114
|
+
3. **Monitor metrics and compare**
|
|
115
|
+
4. **Gradually shift traffic**
|
|
116
|
+
5. **Decommission LangChain implementation**
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Migration Examples
|
|
121
|
+
|
|
122
|
+
### Example 1: Simple LangChain Agent with Tools
|
|
123
|
+
|
|
124
|
+
#### Original LangChain Code
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
from langchain.agents import initialize_agent, Tool, AgentType
|
|
128
|
+
from langchain.llms import OpenAI
|
|
129
|
+
from langchain.tools import BaseTool
|
|
130
|
+
|
|
131
|
+
# Define tools
|
|
132
|
+
class CalculatorTool(BaseTool):
|
|
133
|
+
name = "Calculator"
|
|
134
|
+
description = "Useful for math calculations. Input should be a math expression."
|
|
135
|
+
|
|
136
|
+
def _run(self, query: str) -> str:
|
|
137
|
+
try:
|
|
138
|
+
return str(eval(query))
|
|
139
|
+
except Exception as e:
|
|
140
|
+
return f"Error: {str(e)}"
|
|
141
|
+
|
|
142
|
+
def _arun(self, query: str):
|
|
143
|
+
raise NotImplementedError("Async not supported")
|
|
144
|
+
|
|
145
|
+
class WeatherTool(BaseTool):
|
|
146
|
+
name = "Weather"
|
|
147
|
+
description = "Get current weather for a location. Input should be a city name."
|
|
148
|
+
|
|
149
|
+
def _run(self, city: str) -> str:
|
|
150
|
+
# Simplified for example
|
|
151
|
+
return f"The weather in {city} is sunny, 72°F"
|
|
152
|
+
|
|
153
|
+
def _arun(self, city: str):
|
|
154
|
+
raise NotImplementedError("Async not supported")
|
|
155
|
+
|
|
156
|
+
# Create agent
|
|
157
|
+
tools = [CalculatorTool(), WeatherTool()]
|
|
158
|
+
llm = OpenAI(temperature=0, model="gpt-4")
|
|
159
|
+
agent = initialize_agent(
|
|
160
|
+
tools,
|
|
161
|
+
llm,
|
|
162
|
+
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
|
|
163
|
+
verbose=True
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
# Run agent
|
|
167
|
+
result = agent.run("What's the weather in San Francisco? Also calculate 25 * 4.")
|
|
168
|
+
print(result)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### OSSA Equivalent
|
|
172
|
+
|
|
173
|
+
**Step 1: Create agent manifest** - `.agents/assistant-agent/agent.yml`
|
|
174
|
+
|
|
175
|
+
```yaml
|
|
176
|
+
ossaVersion: "0.2.5-RC"
|
|
177
|
+
metadata:
|
|
178
|
+
name: assistant-agent
|
|
179
|
+
version: "1.0.0"
|
|
180
|
+
description: "Assistant agent with calculator and weather capabilities"
|
|
181
|
+
author: "Your Team"
|
|
182
|
+
license: "MIT"
|
|
183
|
+
tags:
|
|
184
|
+
- assistant
|
|
185
|
+
- calculator
|
|
186
|
+
- weather
|
|
187
|
+
created: "2025-11-10T00:00:00Z"
|
|
188
|
+
updated: "2025-11-10T00:00:00Z"
|
|
189
|
+
|
|
190
|
+
agent:
|
|
191
|
+
id: assistant-agent
|
|
192
|
+
name: Assistant Agent
|
|
193
|
+
version: 1.0.0
|
|
194
|
+
role: workflow
|
|
195
|
+
|
|
196
|
+
runtime:
|
|
197
|
+
type: local
|
|
198
|
+
command: ["node", "dist/index.js"]
|
|
199
|
+
environment:
|
|
200
|
+
NODE_ENV: production
|
|
201
|
+
OPENAI_API_KEY: ${OPENAI_API_KEY}
|
|
202
|
+
resources:
|
|
203
|
+
cpu: "500m"
|
|
204
|
+
memory: "512Mi"
|
|
205
|
+
|
|
206
|
+
llm:
|
|
207
|
+
provider: openai
|
|
208
|
+
model: gpt-4
|
|
209
|
+
temperature: 0
|
|
210
|
+
max_tokens: 2000
|
|
211
|
+
|
|
212
|
+
capabilities:
|
|
213
|
+
- name: calculate
|
|
214
|
+
description: "Perform mathematical calculations. Input should be a math expression."
|
|
215
|
+
input_schema:
|
|
216
|
+
type: object
|
|
217
|
+
required: ["expression"]
|
|
218
|
+
properties:
|
|
219
|
+
expression:
|
|
220
|
+
type: string
|
|
221
|
+
description: "Mathematical expression to evaluate"
|
|
222
|
+
examples: ["2 + 2", "sqrt(16)", "25 * 4"]
|
|
223
|
+
output_schema:
|
|
224
|
+
type: object
|
|
225
|
+
required: ["result"]
|
|
226
|
+
properties:
|
|
227
|
+
result:
|
|
228
|
+
type: number
|
|
229
|
+
description: "Calculated result"
|
|
230
|
+
error:
|
|
231
|
+
type: string
|
|
232
|
+
description: "Error message if calculation failed"
|
|
233
|
+
|
|
234
|
+
- name: get_weather
|
|
235
|
+
description: "Get current weather for a location. Input should be a city name."
|
|
236
|
+
input_schema:
|
|
237
|
+
type: object
|
|
238
|
+
required: ["city"]
|
|
239
|
+
properties:
|
|
240
|
+
city:
|
|
241
|
+
type: string
|
|
242
|
+
description: "City name to get weather for"
|
|
243
|
+
examples: ["San Francisco", "New York", "London"]
|
|
244
|
+
country:
|
|
245
|
+
type: string
|
|
246
|
+
description: "Optional country code (e.g., US, GB)"
|
|
247
|
+
output_schema:
|
|
248
|
+
type: object
|
|
249
|
+
required: ["city", "temperature", "conditions"]
|
|
250
|
+
properties:
|
|
251
|
+
city:
|
|
252
|
+
type: string
|
|
253
|
+
description: "City name"
|
|
254
|
+
temperature:
|
|
255
|
+
type: string
|
|
256
|
+
description: "Temperature with unit"
|
|
257
|
+
conditions:
|
|
258
|
+
type: string
|
|
259
|
+
description: "Weather conditions"
|
|
260
|
+
|
|
261
|
+
integration:
|
|
262
|
+
protocol: http
|
|
263
|
+
endpoints:
|
|
264
|
+
base_url: "http://localhost:3000"
|
|
265
|
+
health: "/health"
|
|
266
|
+
metrics: "/metrics"
|
|
267
|
+
openapi: "/openapi.json"
|
|
268
|
+
|
|
269
|
+
monitoring:
|
|
270
|
+
traces: true
|
|
271
|
+
metrics: true
|
|
272
|
+
logs: true
|
|
273
|
+
health_check:
|
|
274
|
+
enabled: true
|
|
275
|
+
interval_seconds: 30
|
|
276
|
+
timeout_seconds: 5
|
|
277
|
+
|
|
278
|
+
policies:
|
|
279
|
+
encryption: true
|
|
280
|
+
audit: true
|
|
281
|
+
rate_limiting:
|
|
282
|
+
enabled: true
|
|
283
|
+
requests_per_minute: 60
|
|
284
|
+
|
|
285
|
+
bridge:
|
|
286
|
+
mcp:
|
|
287
|
+
enabled: true
|
|
288
|
+
server_type: stdio
|
|
289
|
+
tools:
|
|
290
|
+
- name: calculate
|
|
291
|
+
capability: calculate
|
|
292
|
+
- name: get_weather
|
|
293
|
+
capability: get_weather
|
|
294
|
+
openapi:
|
|
295
|
+
enabled: true
|
|
296
|
+
spec_version: "3.1"
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
**Step 2: Implement capabilities** - `.agents/assistant-agent/src/index.ts`
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
import { FastifyInstance } from 'fastify';
|
|
303
|
+
import { OSSAAgent } from '@agent-buildkit/core';
|
|
304
|
+
|
|
305
|
+
interface CalculateInput {
|
|
306
|
+
expression: string;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
interface CalculateOutput {
|
|
310
|
+
result?: number;
|
|
311
|
+
error?: string;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
interface WeatherInput {
|
|
315
|
+
city: string;
|
|
316
|
+
country?: string;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
interface WeatherOutput {
|
|
320
|
+
city: string;
|
|
321
|
+
temperature: string;
|
|
322
|
+
conditions: string;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
class AssistantAgent extends OSSAAgent {
|
|
326
|
+
async onCapability(
|
|
327
|
+
name: string,
|
|
328
|
+
input: Record<string, any>
|
|
329
|
+
): Promise<Record<string, any>> {
|
|
330
|
+
switch (name) {
|
|
331
|
+
case 'calculate':
|
|
332
|
+
return this.calculate(input as CalculateInput);
|
|
333
|
+
case 'get_weather':
|
|
334
|
+
return this.getWeather(input as WeatherInput);
|
|
335
|
+
default:
|
|
336
|
+
throw new Error(`Unknown capability: ${name}`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
private async calculate(input: CalculateInput): Promise<CalculateOutput> {
|
|
341
|
+
try {
|
|
342
|
+
// Safe evaluation using a math library instead of eval()
|
|
343
|
+
const { evaluate } = await import('mathjs');
|
|
344
|
+
const result = evaluate(input.expression);
|
|
345
|
+
|
|
346
|
+
this.logger.info('Calculation performed', {
|
|
347
|
+
expression: input.expression,
|
|
348
|
+
result,
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
return { result: Number(result) };
|
|
352
|
+
} catch (error) {
|
|
353
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
354
|
+
this.logger.error('Calculation failed', {
|
|
355
|
+
expression: input.expression,
|
|
356
|
+
error: errorMessage,
|
|
357
|
+
});
|
|
358
|
+
return { error: errorMessage };
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
private async getWeather(input: WeatherInput): Promise<WeatherOutput> {
|
|
363
|
+
// In production, call actual weather API
|
|
364
|
+
// For example purposes, simplified response
|
|
365
|
+
this.logger.info('Weather lookup', { city: input.city });
|
|
366
|
+
|
|
367
|
+
// Example: Call OpenWeatherMap API
|
|
368
|
+
// const response = await fetch(
|
|
369
|
+
// `https://api.openweathermap.org/data/2.5/weather?q=${input.city}&appid=${process.env.WEATHER_API_KEY}`
|
|
370
|
+
// );
|
|
371
|
+
// const data = await response.json();
|
|
372
|
+
|
|
373
|
+
return {
|
|
374
|
+
city: input.city,
|
|
375
|
+
temperature: '72°F',
|
|
376
|
+
conditions: 'sunny',
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Start the agent
|
|
382
|
+
const agent = new AssistantAgent({
|
|
383
|
+
manifestPath: './agent.yml',
|
|
384
|
+
port: 3000,
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
agent.start().catch((error) => {
|
|
388
|
+
console.error('Failed to start agent:', error);
|
|
389
|
+
process.exit(1);
|
|
390
|
+
});
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
**Step 3: Package configuration** - `.agents/assistant-agent/package.json`
|
|
394
|
+
|
|
395
|
+
```json
|
|
396
|
+
{
|
|
397
|
+
"name": "assistant-agent",
|
|
398
|
+
"version": "1.0.0",
|
|
399
|
+
"description": "OSSA assistant agent with calculator and weather capabilities",
|
|
400
|
+
"main": "dist/index.js",
|
|
401
|
+
"scripts": {
|
|
402
|
+
"build": "tsc",
|
|
403
|
+
"start": "node dist/index.js",
|
|
404
|
+
"dev": "tsx watch src/index.ts",
|
|
405
|
+
"test": "jest"
|
|
406
|
+
},
|
|
407
|
+
"dependencies": {
|
|
408
|
+
"@agent-buildkit/core": "^1.0.0",
|
|
409
|
+
"fastify": "^4.25.0",
|
|
410
|
+
"mathjs": "^12.0.0"
|
|
411
|
+
},
|
|
412
|
+
"devDependencies": {
|
|
413
|
+
"@types/node": "^20.0.0",
|
|
414
|
+
"tsx": "^4.0.0",
|
|
415
|
+
"typescript": "^5.3.0"
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**Conversion Steps**:
|
|
421
|
+
1. ✅ Mapped `CalculatorTool` → `calculate` capability with JSON schemas
|
|
422
|
+
2. ✅ Mapped `WeatherTool` → `get_weather` capability with JSON schemas
|
|
423
|
+
3. ✅ Configured OpenAI LLM in manifest (no code changes needed)
|
|
424
|
+
4. ✅ Added monitoring, health checks, and policies
|
|
425
|
+
5. ✅ Enabled MCP bridge for Claude Desktop integration
|
|
426
|
+
6. ✅ Used type-safe implementation with proper error handling
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
### Example 2: LangChain Agent with Memory
|
|
431
|
+
|
|
432
|
+
#### Original LangChain Code
|
|
433
|
+
|
|
434
|
+
```python
|
|
435
|
+
from langchain.agents import initialize_agent, Tool, AgentType
|
|
436
|
+
from langchain.llms import OpenAI
|
|
437
|
+
from langchain.memory import ConversationBufferMemory
|
|
438
|
+
|
|
439
|
+
# Define tools
|
|
440
|
+
tools = [
|
|
441
|
+
Tool(
|
|
442
|
+
name="Search",
|
|
443
|
+
func=lambda query: f"Search results for: {query}",
|
|
444
|
+
description="Useful for searching information"
|
|
445
|
+
)
|
|
446
|
+
]
|
|
447
|
+
|
|
448
|
+
# Create memory
|
|
449
|
+
memory = ConversationBufferMemory(
|
|
450
|
+
memory_key="chat_history",
|
|
451
|
+
return_messages=True
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
# Create agent with memory
|
|
455
|
+
llm = OpenAI(temperature=0.7)
|
|
456
|
+
agent = initialize_agent(
|
|
457
|
+
tools,
|
|
458
|
+
llm,
|
|
459
|
+
agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
|
|
460
|
+
memory=memory,
|
|
461
|
+
verbose=True
|
|
462
|
+
)
|
|
463
|
+
|
|
464
|
+
# Conversations persist across runs
|
|
465
|
+
agent.run("Hi, my name is Alice")
|
|
466
|
+
agent.run("What's my name?") # Should remember "Alice"
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
#### OSSA Equivalent
|
|
470
|
+
|
|
471
|
+
**Agent manifest** - `.agents/conversational-agent/agent.yml`
|
|
472
|
+
|
|
473
|
+
```yaml
|
|
474
|
+
ossaVersion: "0.2.5-RC"
|
|
475
|
+
metadata:
|
|
476
|
+
name: conversational-agent
|
|
477
|
+
version: "1.0.0"
|
|
478
|
+
description: "Conversational agent with memory and search capability"
|
|
479
|
+
|
|
480
|
+
agent:
|
|
481
|
+
id: conversational-agent
|
|
482
|
+
name: Conversational Agent
|
|
483
|
+
version: 1.0.0
|
|
484
|
+
role: workflow
|
|
485
|
+
|
|
486
|
+
runtime:
|
|
487
|
+
type: local
|
|
488
|
+
command: ["node", "dist/index.js"]
|
|
489
|
+
environment:
|
|
490
|
+
NODE_ENV: production
|
|
491
|
+
OPENAI_API_KEY: ${OPENAI_API_KEY}
|
|
492
|
+
REDIS_URL: ${REDIS_URL}
|
|
493
|
+
resources:
|
|
494
|
+
cpu: "500m"
|
|
495
|
+
memory: "512Mi"
|
|
496
|
+
|
|
497
|
+
llm:
|
|
498
|
+
provider: openai
|
|
499
|
+
model: gpt-4
|
|
500
|
+
temperature: 0.7
|
|
501
|
+
max_tokens: 2000
|
|
502
|
+
|
|
503
|
+
# State management configuration
|
|
504
|
+
state:
|
|
505
|
+
provider: redis
|
|
506
|
+
config:
|
|
507
|
+
url: ${REDIS_URL}
|
|
508
|
+
ttl_seconds: 3600
|
|
509
|
+
key_prefix: "agent:conversational:"
|
|
510
|
+
|
|
511
|
+
capabilities:
|
|
512
|
+
- name: search
|
|
513
|
+
description: "Search for information on the web"
|
|
514
|
+
input_schema:
|
|
515
|
+
type: object
|
|
516
|
+
required: ["query"]
|
|
517
|
+
properties:
|
|
518
|
+
query:
|
|
519
|
+
type: string
|
|
520
|
+
description: "Search query"
|
|
521
|
+
output_schema:
|
|
522
|
+
type: object
|
|
523
|
+
required: ["results"]
|
|
524
|
+
properties:
|
|
525
|
+
results:
|
|
526
|
+
type: string
|
|
527
|
+
description: "Search results"
|
|
528
|
+
|
|
529
|
+
- name: chat
|
|
530
|
+
description: "Have a conversation with memory of previous interactions"
|
|
531
|
+
input_schema:
|
|
532
|
+
type: object
|
|
533
|
+
required: ["message", "user_id"]
|
|
534
|
+
properties:
|
|
535
|
+
message:
|
|
536
|
+
type: string
|
|
537
|
+
description: "User message"
|
|
538
|
+
user_id:
|
|
539
|
+
type: string
|
|
540
|
+
description: "Unique user identifier for memory isolation"
|
|
541
|
+
output_schema:
|
|
542
|
+
type: object
|
|
543
|
+
required: ["response"]
|
|
544
|
+
properties:
|
|
545
|
+
response:
|
|
546
|
+
type: string
|
|
547
|
+
description: "Agent response"
|
|
548
|
+
context:
|
|
549
|
+
type: object
|
|
550
|
+
description: "Conversation context"
|
|
551
|
+
|
|
552
|
+
integration:
|
|
553
|
+
protocol: http
|
|
554
|
+
endpoints:
|
|
555
|
+
base_url: "http://localhost:3000"
|
|
556
|
+
|
|
557
|
+
monitoring:
|
|
558
|
+
traces: true
|
|
559
|
+
metrics: true
|
|
560
|
+
logs: true
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
**Implementation** - `.agents/conversational-agent/src/index.ts`
|
|
564
|
+
|
|
565
|
+
```typescript
|
|
566
|
+
import { FastifyInstance } from 'fastify';
|
|
567
|
+
import { OSSAAgent } from '@agent-buildkit/core';
|
|
568
|
+
import { Redis } from 'ioredis';
|
|
569
|
+
import { OpenAI } from 'openai';
|
|
570
|
+
|
|
571
|
+
interface ChatInput {
|
|
572
|
+
message: string;
|
|
573
|
+
user_id: string;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
interface ChatOutput {
|
|
577
|
+
response: string;
|
|
578
|
+
context: {
|
|
579
|
+
history_length: number;
|
|
580
|
+
timestamp: string;
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
interface SearchInput {
|
|
585
|
+
query: string;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
interface SearchOutput {
|
|
589
|
+
results: string;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
interface ConversationMessage {
|
|
593
|
+
role: 'user' | 'assistant';
|
|
594
|
+
content: string;
|
|
595
|
+
timestamp: string;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
class ConversationalAgent extends OSSAAgent {
|
|
599
|
+
private redis: Redis;
|
|
600
|
+
private openai: OpenAI;
|
|
601
|
+
|
|
602
|
+
constructor(config: any) {
|
|
603
|
+
super(config);
|
|
604
|
+
|
|
605
|
+
// Initialize Redis for state management
|
|
606
|
+
this.redis = new Redis(process.env.REDIS_URL || 'redis://localhost:6379');
|
|
607
|
+
|
|
608
|
+
// Initialize OpenAI client
|
|
609
|
+
this.openai = new OpenAI({
|
|
610
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
async onCapability(
|
|
615
|
+
name: string,
|
|
616
|
+
input: Record<string, any>
|
|
617
|
+
): Promise<Record<string, any>> {
|
|
618
|
+
switch (name) {
|
|
619
|
+
case 'search':
|
|
620
|
+
return this.search(input as SearchInput);
|
|
621
|
+
case 'chat':
|
|
622
|
+
return this.chat(input as ChatInput);
|
|
623
|
+
default:
|
|
624
|
+
throw new Error(`Unknown capability: ${name}`);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
private async search(input: SearchInput): Promise<SearchOutput> {
|
|
629
|
+
// In production, integrate with actual search API (Google, Bing, etc.)
|
|
630
|
+
this.logger.info('Performing search', { query: input.query });
|
|
631
|
+
|
|
632
|
+
return {
|
|
633
|
+
results: `Search results for: ${input.query}`,
|
|
634
|
+
};
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
private async chat(input: ChatInput): Promise<ChatOutput> {
|
|
638
|
+
const { message, user_id } = input;
|
|
639
|
+
|
|
640
|
+
// Get conversation history from Redis
|
|
641
|
+
const history = await this.getConversationHistory(user_id);
|
|
642
|
+
|
|
643
|
+
// Add user message to history
|
|
644
|
+
const userMessage: ConversationMessage = {
|
|
645
|
+
role: 'user',
|
|
646
|
+
content: message,
|
|
647
|
+
timestamp: new Date().toISOString(),
|
|
648
|
+
};
|
|
649
|
+
history.push(userMessage);
|
|
650
|
+
|
|
651
|
+
// Prepare messages for OpenAI
|
|
652
|
+
const messages = history.map((msg) => ({
|
|
653
|
+
role: msg.role,
|
|
654
|
+
content: msg.content,
|
|
655
|
+
}));
|
|
656
|
+
|
|
657
|
+
// Call OpenAI
|
|
658
|
+
const completion = await this.openai.chat.completions.create({
|
|
659
|
+
model: 'gpt-4',
|
|
660
|
+
messages: messages as any,
|
|
661
|
+
temperature: 0.7,
|
|
662
|
+
});
|
|
663
|
+
|
|
664
|
+
const assistantResponse = completion.choices[0].message.content || '';
|
|
665
|
+
|
|
666
|
+
// Add assistant response to history
|
|
667
|
+
const assistantMessage: ConversationMessage = {
|
|
668
|
+
role: 'assistant',
|
|
669
|
+
content: assistantResponse,
|
|
670
|
+
timestamp: new Date().toISOString(),
|
|
671
|
+
};
|
|
672
|
+
history.push(assistantMessage);
|
|
673
|
+
|
|
674
|
+
// Save updated history to Redis
|
|
675
|
+
await this.saveConversationHistory(user_id, history);
|
|
676
|
+
|
|
677
|
+
this.logger.info('Chat response generated', {
|
|
678
|
+
user_id,
|
|
679
|
+
history_length: history.length,
|
|
680
|
+
});
|
|
681
|
+
|
|
682
|
+
return {
|
|
683
|
+
response: assistantResponse,
|
|
684
|
+
context: {
|
|
685
|
+
history_length: history.length,
|
|
686
|
+
timestamp: new Date().toISOString(),
|
|
687
|
+
},
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
private async getConversationHistory(
|
|
692
|
+
userId: string
|
|
693
|
+
): Promise<ConversationMessage[]> {
|
|
694
|
+
const key = `agent:conversational:${userId}:history`;
|
|
695
|
+
const data = await this.redis.get(key);
|
|
696
|
+
|
|
697
|
+
if (!data) {
|
|
698
|
+
return [];
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
try {
|
|
702
|
+
return JSON.parse(data);
|
|
703
|
+
} catch (error) {
|
|
704
|
+
this.logger.error('Failed to parse conversation history', { error });
|
|
705
|
+
return [];
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
private async saveConversationHistory(
|
|
710
|
+
userId: string,
|
|
711
|
+
history: ConversationMessage[]
|
|
712
|
+
): Promise<void> {
|
|
713
|
+
const key = `agent:conversational:${userId}:history`;
|
|
714
|
+
|
|
715
|
+
// Keep only last 20 messages to prevent unlimited growth
|
|
716
|
+
const trimmedHistory = history.slice(-20);
|
|
717
|
+
|
|
718
|
+
await this.redis.setex(
|
|
719
|
+
key,
|
|
720
|
+
3600, // 1 hour TTL
|
|
721
|
+
JSON.stringify(trimmedHistory)
|
|
722
|
+
);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
async onShutdown(): Promise<void> {
|
|
726
|
+
await this.redis.quit();
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
// Start the agent
|
|
731
|
+
const agent = new ConversationalAgent({
|
|
732
|
+
manifestPath: './agent.yml',
|
|
733
|
+
port: 3000,
|
|
734
|
+
});
|
|
735
|
+
|
|
736
|
+
agent.start().catch((error) => {
|
|
737
|
+
console.error('Failed to start agent:', error);
|
|
738
|
+
process.exit(1);
|
|
739
|
+
});
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
**Conversion Steps**:
|
|
743
|
+
1. ✅ Replaced `ConversationBufferMemory` with Redis state management
|
|
744
|
+
2. ✅ Added `state` configuration in manifest
|
|
745
|
+
3. ✅ Implemented conversation history persistence with TTL
|
|
746
|
+
4. ✅ Added user isolation (separate history per user_id)
|
|
747
|
+
5. ✅ Implemented history trimming to prevent unlimited growth
|
|
748
|
+
6. ✅ Added proper cleanup on shutdown
|
|
749
|
+
|
|
750
|
+
---
|
|
751
|
+
|
|
752
|
+
### Example 3: LangChain Sequential Chain
|
|
753
|
+
|
|
754
|
+
#### Original LangChain Code
|
|
755
|
+
|
|
756
|
+
```python
|
|
757
|
+
from langchain import PromptTemplate, LLMChain
|
|
758
|
+
from langchain.chains import SequentialChain
|
|
759
|
+
from langchain.llms import OpenAI
|
|
760
|
+
|
|
761
|
+
llm = OpenAI(temperature=0.7)
|
|
762
|
+
|
|
763
|
+
# First chain: Generate synopsis
|
|
764
|
+
synopsis_template = """You are a creative writer. Write a one-sentence synopsis for a story about {topic}."""
|
|
765
|
+
synopsis_prompt = PromptTemplate(input_variables=["topic"], template=synopsis_template)
|
|
766
|
+
synopsis_chain = LLMChain(llm=llm, prompt=synopsis_prompt, output_key="synopsis")
|
|
767
|
+
|
|
768
|
+
# Second chain: Expand synopsis into story
|
|
769
|
+
story_template = """Based on this synopsis: {synopsis}
|
|
770
|
+
|
|
771
|
+
Write a short story (3 paragraphs) that brings this synopsis to life."""
|
|
772
|
+
story_prompt = PromptTemplate(input_variables=["synopsis"], template=story_template)
|
|
773
|
+
story_chain = LLMChain(llm=llm, prompt=story_prompt, output_key="story")
|
|
774
|
+
|
|
775
|
+
# Third chain: Generate title
|
|
776
|
+
title_template = """Given this story: {story}
|
|
777
|
+
|
|
778
|
+
Generate a catchy title (5 words or less)."""
|
|
779
|
+
title_prompt = PromptTemplate(input_variables=["story"], template=title_template)
|
|
780
|
+
title_chain = LLMChain(llm=llm, prompt=title_prompt, output_key="title")
|
|
781
|
+
|
|
782
|
+
# Sequential chain
|
|
783
|
+
overall_chain = SequentialChain(
|
|
784
|
+
chains=[synopsis_chain, story_chain, title_chain],
|
|
785
|
+
input_variables=["topic"],
|
|
786
|
+
output_variables=["synopsis", "story", "title"],
|
|
787
|
+
verbose=True
|
|
788
|
+
)
|
|
789
|
+
|
|
790
|
+
# Run
|
|
791
|
+
result = overall_chain({"topic": "artificial intelligence"})
|
|
792
|
+
print(f"Title: {result['title']}")
|
|
793
|
+
print(f"Synopsis: {result['synopsis']}")
|
|
794
|
+
print(f"Story: {result['story']}")
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
#### OSSA Equivalent
|
|
798
|
+
|
|
799
|
+
**Agent manifest** - `.agents/story-writer-agent/agent.yml`
|
|
800
|
+
|
|
801
|
+
```yaml
|
|
802
|
+
ossaVersion: "0.2.5-RC"
|
|
803
|
+
metadata:
|
|
804
|
+
name: story-writer-agent
|
|
805
|
+
version: "1.0.0"
|
|
806
|
+
description: "Sequential story generation agent with synopsis, story, and title generation"
|
|
807
|
+
|
|
808
|
+
agent:
|
|
809
|
+
id: story-writer-agent
|
|
810
|
+
name: Story Writer Agent
|
|
811
|
+
version: 1.0.0
|
|
812
|
+
role: workflow
|
|
813
|
+
|
|
814
|
+
runtime:
|
|
815
|
+
type: local
|
|
816
|
+
command: ["node", "dist/index.js"]
|
|
817
|
+
environment:
|
|
818
|
+
NODE_ENV: production
|
|
819
|
+
OPENAI_API_KEY: ${OPENAI_API_KEY}
|
|
820
|
+
resources:
|
|
821
|
+
cpu: "1000m"
|
|
822
|
+
memory: "1Gi"
|
|
823
|
+
|
|
824
|
+
llm:
|
|
825
|
+
provider: openai
|
|
826
|
+
model: gpt-4
|
|
827
|
+
temperature: 0.7
|
|
828
|
+
max_tokens: 4000
|
|
829
|
+
|
|
830
|
+
capabilities:
|
|
831
|
+
- name: generate_synopsis
|
|
832
|
+
description: "Generate a one-sentence story synopsis"
|
|
833
|
+
input_schema:
|
|
834
|
+
type: object
|
|
835
|
+
required: ["topic"]
|
|
836
|
+
properties:
|
|
837
|
+
topic:
|
|
838
|
+
type: string
|
|
839
|
+
description: "Story topic"
|
|
840
|
+
output_schema:
|
|
841
|
+
type: object
|
|
842
|
+
required: ["synopsis"]
|
|
843
|
+
properties:
|
|
844
|
+
synopsis:
|
|
845
|
+
type: string
|
|
846
|
+
description: "One-sentence story synopsis"
|
|
847
|
+
|
|
848
|
+
- name: expand_story
|
|
849
|
+
description: "Expand synopsis into full story"
|
|
850
|
+
input_schema:
|
|
851
|
+
type: object
|
|
852
|
+
required: ["synopsis"]
|
|
853
|
+
properties:
|
|
854
|
+
synopsis:
|
|
855
|
+
type: string
|
|
856
|
+
description: "Story synopsis to expand"
|
|
857
|
+
output_schema:
|
|
858
|
+
type: object
|
|
859
|
+
required: ["story"]
|
|
860
|
+
properties:
|
|
861
|
+
story:
|
|
862
|
+
type: string
|
|
863
|
+
description: "Full story (3 paragraphs)"
|
|
864
|
+
|
|
865
|
+
- name: generate_title
|
|
866
|
+
description: "Generate catchy title from story"
|
|
867
|
+
input_schema:
|
|
868
|
+
type: object
|
|
869
|
+
required: ["story"]
|
|
870
|
+
properties:
|
|
871
|
+
story:
|
|
872
|
+
type: string
|
|
873
|
+
description: "Full story text"
|
|
874
|
+
output_schema:
|
|
875
|
+
type: object
|
|
876
|
+
required: ["title"]
|
|
877
|
+
properties:
|
|
878
|
+
title:
|
|
879
|
+
type: string
|
|
880
|
+
description: "Catchy title (5 words or less)"
|
|
881
|
+
|
|
882
|
+
- name: write_complete_story
|
|
883
|
+
description: "Write complete story with synopsis, body, and title (sequential workflow)"
|
|
884
|
+
workflow:
|
|
885
|
+
type: sequential
|
|
886
|
+
steps:
|
|
887
|
+
- capability: generate_synopsis
|
|
888
|
+
input_mapping:
|
|
889
|
+
topic: "$.input.topic"
|
|
890
|
+
output_key: "synopsis_result"
|
|
891
|
+
|
|
892
|
+
- capability: expand_story
|
|
893
|
+
input_mapping:
|
|
894
|
+
synopsis: "$.synopsis_result.synopsis"
|
|
895
|
+
output_key: "story_result"
|
|
896
|
+
|
|
897
|
+
- capability: generate_title
|
|
898
|
+
input_mapping:
|
|
899
|
+
story: "$.story_result.story"
|
|
900
|
+
output_key: "title_result"
|
|
901
|
+
|
|
902
|
+
input_schema:
|
|
903
|
+
type: object
|
|
904
|
+
required: ["topic"]
|
|
905
|
+
properties:
|
|
906
|
+
topic:
|
|
907
|
+
type: string
|
|
908
|
+
description: "Story topic"
|
|
909
|
+
|
|
910
|
+
output_schema:
|
|
911
|
+
type: object
|
|
912
|
+
required: ["title", "synopsis", "story"]
|
|
913
|
+
properties:
|
|
914
|
+
title:
|
|
915
|
+
type: string
|
|
916
|
+
description: "Story title"
|
|
917
|
+
synopsis:
|
|
918
|
+
type: string
|
|
919
|
+
description: "Story synopsis"
|
|
920
|
+
story:
|
|
921
|
+
type: string
|
|
922
|
+
description: "Full story"
|
|
923
|
+
|
|
924
|
+
integration:
|
|
925
|
+
protocol: http
|
|
926
|
+
endpoints:
|
|
927
|
+
base_url: "http://localhost:3000"
|
|
928
|
+
|
|
929
|
+
monitoring:
|
|
930
|
+
traces: true
|
|
931
|
+
metrics: true
|
|
932
|
+
logs: true
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
**Implementation** - `.agents/story-writer-agent/src/index.ts`
|
|
936
|
+
|
|
937
|
+
```typescript
|
|
938
|
+
import { OSSAAgent } from '@agent-buildkit/core';
|
|
939
|
+
import { OpenAI } from 'openai';
|
|
940
|
+
|
|
941
|
+
interface SynopsisInput {
|
|
942
|
+
topic: string;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
interface SynopsisOutput {
|
|
946
|
+
synopsis: string;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
interface StoryInput {
|
|
950
|
+
synopsis: string;
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
interface StoryOutput {
|
|
954
|
+
story: string;
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
interface TitleInput {
|
|
958
|
+
story: string;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
interface TitleOutput {
|
|
962
|
+
title: string;
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
interface CompleteStoryInput {
|
|
966
|
+
topic: string;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
interface CompleteStoryOutput {
|
|
970
|
+
title: string;
|
|
971
|
+
synopsis: string;
|
|
972
|
+
story: string;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
class StoryWriterAgent extends OSSAAgent {
|
|
976
|
+
private openai: OpenAI;
|
|
977
|
+
|
|
978
|
+
constructor(config: any) {
|
|
979
|
+
super(config);
|
|
980
|
+
this.openai = new OpenAI({
|
|
981
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
982
|
+
});
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
async onCapability(
|
|
986
|
+
name: string,
|
|
987
|
+
input: Record<string, any>
|
|
988
|
+
): Promise<Record<string, any>> {
|
|
989
|
+
switch (name) {
|
|
990
|
+
case 'generate_synopsis':
|
|
991
|
+
return this.generateSynopsis(input as SynopsisInput);
|
|
992
|
+
case 'expand_story':
|
|
993
|
+
return this.expandStory(input as StoryInput);
|
|
994
|
+
case 'generate_title':
|
|
995
|
+
return this.generateTitle(input as TitleInput);
|
|
996
|
+
case 'write_complete_story':
|
|
997
|
+
return this.writeCompleteStory(input as CompleteStoryInput);
|
|
998
|
+
default:
|
|
999
|
+
throw new Error(`Unknown capability: ${name}`);
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
private async generateSynopsis(input: SynopsisInput): Promise<SynopsisOutput> {
|
|
1004
|
+
const completion = await this.openai.chat.completions.create({
|
|
1005
|
+
model: 'gpt-4',
|
|
1006
|
+
messages: [
|
|
1007
|
+
{
|
|
1008
|
+
role: 'system',
|
|
1009
|
+
content: 'You are a creative writer.',
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
role: 'user',
|
|
1013
|
+
content: `Write a one-sentence synopsis for a story about ${input.topic}.`,
|
|
1014
|
+
},
|
|
1015
|
+
],
|
|
1016
|
+
temperature: 0.7,
|
|
1017
|
+
});
|
|
1018
|
+
|
|
1019
|
+
const synopsis = completion.choices[0].message.content || '';
|
|
1020
|
+
|
|
1021
|
+
this.logger.info('Synopsis generated', { topic: input.topic });
|
|
1022
|
+
|
|
1023
|
+
return { synopsis };
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
private async expandStory(input: StoryInput): Promise<StoryOutput> {
|
|
1027
|
+
const completion = await this.openai.chat.completions.create({
|
|
1028
|
+
model: 'gpt-4',
|
|
1029
|
+
messages: [
|
|
1030
|
+
{
|
|
1031
|
+
role: 'system',
|
|
1032
|
+
content: 'You are a creative writer who expands story synopses into full narratives.',
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
role: 'user',
|
|
1036
|
+
content: `Based on this synopsis: ${input.synopsis}\n\nWrite a short story (3 paragraphs) that brings this synopsis to life.`,
|
|
1037
|
+
},
|
|
1038
|
+
],
|
|
1039
|
+
temperature: 0.7,
|
|
1040
|
+
max_tokens: 2000,
|
|
1041
|
+
});
|
|
1042
|
+
|
|
1043
|
+
const story = completion.choices[0].message.content || '';
|
|
1044
|
+
|
|
1045
|
+
this.logger.info('Story expanded', { synopsis_length: input.synopsis.length });
|
|
1046
|
+
|
|
1047
|
+
return { story };
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
private async generateTitle(input: TitleInput): Promise<TitleOutput> {
|
|
1051
|
+
const completion = await this.openai.chat.completions.create({
|
|
1052
|
+
model: 'gpt-4',
|
|
1053
|
+
messages: [
|
|
1054
|
+
{
|
|
1055
|
+
role: 'system',
|
|
1056
|
+
content: 'You are a creative writer who creates catchy titles.',
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
role: 'user',
|
|
1060
|
+
content: `Given this story: ${input.story}\n\nGenerate a catchy title (5 words or less).`,
|
|
1061
|
+
},
|
|
1062
|
+
],
|
|
1063
|
+
temperature: 0.7,
|
|
1064
|
+
});
|
|
1065
|
+
|
|
1066
|
+
const title = completion.choices[0].message.content || '';
|
|
1067
|
+
|
|
1068
|
+
this.logger.info('Title generated');
|
|
1069
|
+
|
|
1070
|
+
return { title };
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
private async writeCompleteStory(
|
|
1074
|
+
input: CompleteStoryInput
|
|
1075
|
+
): Promise<CompleteStoryOutput> {
|
|
1076
|
+
// Execute sequential workflow
|
|
1077
|
+
this.logger.info('Starting complete story workflow', { topic: input.topic });
|
|
1078
|
+
|
|
1079
|
+
// Step 1: Generate synopsis
|
|
1080
|
+
const synopsisResult = await this.generateSynopsis({ topic: input.topic });
|
|
1081
|
+
|
|
1082
|
+
// Step 2: Expand to full story
|
|
1083
|
+
const storyResult = await this.expandStory({ synopsis: synopsisResult.synopsis });
|
|
1084
|
+
|
|
1085
|
+
// Step 3: Generate title
|
|
1086
|
+
const titleResult = await this.generateTitle({ story: storyResult.story });
|
|
1087
|
+
|
|
1088
|
+
this.logger.info('Complete story workflow finished', {
|
|
1089
|
+
topic: input.topic,
|
|
1090
|
+
title: titleResult.title,
|
|
1091
|
+
});
|
|
1092
|
+
|
|
1093
|
+
return {
|
|
1094
|
+
title: titleResult.title,
|
|
1095
|
+
synopsis: synopsisResult.synopsis,
|
|
1096
|
+
story: storyResult.story,
|
|
1097
|
+
};
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
// Start the agent
|
|
1102
|
+
const agent = new StoryWriterAgent({
|
|
1103
|
+
manifestPath: './agent.yml',
|
|
1104
|
+
port: 3000,
|
|
1105
|
+
});
|
|
1106
|
+
|
|
1107
|
+
agent.start().catch((error) => {
|
|
1108
|
+
console.error('Failed to start agent:', error);
|
|
1109
|
+
process.exit(1);
|
|
1110
|
+
});
|
|
1111
|
+
```
|
|
1112
|
+
|
|
1113
|
+
**Conversion Steps**:
|
|
1114
|
+
1. ✅ Mapped each `LLMChain` to an OSSA capability
|
|
1115
|
+
2. ✅ Defined workflow with `sequential` execution type
|
|
1116
|
+
3. ✅ Used `input_mapping` to pass outputs between steps
|
|
1117
|
+
4. ✅ Implemented sequential execution in code
|
|
1118
|
+
5. ✅ Added comprehensive logging for each step
|
|
1119
|
+
6. ✅ Made each step independently testable
|
|
1120
|
+
|
|
1121
|
+
---
|
|
1122
|
+
|
|
1123
|
+
## Advanced Migration Topics
|
|
1124
|
+
|
|
1125
|
+
### Migrating Custom Callbacks
|
|
1126
|
+
|
|
1127
|
+
**LangChain**:
|
|
1128
|
+
```python
|
|
1129
|
+
from langchain.callbacks.base import BaseCallbackHandler
|
|
1130
|
+
|
|
1131
|
+
class MyCallback(BaseCallbackHandler):
|
|
1132
|
+
def on_llm_start(self, serialized, prompts, **kwargs):
|
|
1133
|
+
print(f"LLM started with prompts: {prompts}")
|
|
1134
|
+
|
|
1135
|
+
def on_llm_end(self, response, **kwargs):
|
|
1136
|
+
print(f"LLM finished: {response}")
|
|
1137
|
+
```
|
|
1138
|
+
|
|
1139
|
+
**OSSA**:
|
|
1140
|
+
Use built-in monitoring with OpenTelemetry traces:
|
|
1141
|
+
|
|
1142
|
+
```typescript
|
|
1143
|
+
class MyAgent extends OSSAAgent {
|
|
1144
|
+
async onCapability(name: string, input: any): Promise<any> {
|
|
1145
|
+
// Automatic tracing with spans
|
|
1146
|
+
const span = this.tracer.startSpan(`capability.${name}`);
|
|
1147
|
+
|
|
1148
|
+
try {
|
|
1149
|
+
span.setAttribute('input.size', JSON.stringify(input).length);
|
|
1150
|
+
|
|
1151
|
+
const result = await this.processCapability(name, input);
|
|
1152
|
+
|
|
1153
|
+
span.setAttribute('output.size', JSON.stringify(result).length);
|
|
1154
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
1155
|
+
|
|
1156
|
+
return result;
|
|
1157
|
+
} catch (error) {
|
|
1158
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
1159
|
+
throw error;
|
|
1160
|
+
} finally {
|
|
1161
|
+
span.end();
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
}
|
|
1165
|
+
```
|
|
1166
|
+
|
|
1167
|
+
### Migrating Vector Stores
|
|
1168
|
+
|
|
1169
|
+
**LangChain**:
|
|
1170
|
+
```python
|
|
1171
|
+
from langchain.vectorstores import Pinecone
|
|
1172
|
+
from langchain.embeddings import OpenAIEmbeddings
|
|
1173
|
+
|
|
1174
|
+
embeddings = OpenAIEmbeddings()
|
|
1175
|
+
vectorstore = Pinecone.from_documents(docs, embeddings)
|
|
1176
|
+
results = vectorstore.similarity_search(query, k=5)
|
|
1177
|
+
```
|
|
1178
|
+
|
|
1179
|
+
**OSSA**:
|
|
1180
|
+
Create a separate capability for vector search:
|
|
1181
|
+
|
|
1182
|
+
```yaml
|
|
1183
|
+
capabilities:
|
|
1184
|
+
- name: vector_search
|
|
1185
|
+
description: "Search documents using semantic similarity"
|
|
1186
|
+
input_schema:
|
|
1187
|
+
type: object
|
|
1188
|
+
required: ["query"]
|
|
1189
|
+
properties:
|
|
1190
|
+
query:
|
|
1191
|
+
type: string
|
|
1192
|
+
top_k:
|
|
1193
|
+
type: integer
|
|
1194
|
+
default: 5
|
|
1195
|
+
output_schema:
|
|
1196
|
+
type: object
|
|
1197
|
+
required: ["results"]
|
|
1198
|
+
properties:
|
|
1199
|
+
results:
|
|
1200
|
+
type: array
|
|
1201
|
+
items:
|
|
1202
|
+
type: object
|
|
1203
|
+
properties:
|
|
1204
|
+
document:
|
|
1205
|
+
type: string
|
|
1206
|
+
score:
|
|
1207
|
+
type: number
|
|
1208
|
+
```
|
|
1209
|
+
|
|
1210
|
+
```typescript
|
|
1211
|
+
private async vectorSearch(input: VectorSearchInput): Promise<VectorSearchOutput> {
|
|
1212
|
+
// Use Pinecone SDK directly
|
|
1213
|
+
const pinecone = new Pinecone({ apiKey: process.env.PINECONE_API_KEY });
|
|
1214
|
+
const index = pinecone.index('your-index');
|
|
1215
|
+
|
|
1216
|
+
// Generate embedding
|
|
1217
|
+
const embedding = await this.openai.embeddings.create({
|
|
1218
|
+
model: 'text-embedding-3-small',
|
|
1219
|
+
input: input.query,
|
|
1220
|
+
});
|
|
1221
|
+
|
|
1222
|
+
// Query Pinecone
|
|
1223
|
+
const queryResponse = await index.query({
|
|
1224
|
+
vector: embedding.data[0].embedding,
|
|
1225
|
+
topK: input.top_k || 5,
|
|
1226
|
+
includeMetadata: true,
|
|
1227
|
+
});
|
|
1228
|
+
|
|
1229
|
+
return {
|
|
1230
|
+
results: queryResponse.matches.map((match) => ({
|
|
1231
|
+
document: match.metadata?.text as string,
|
|
1232
|
+
score: match.score || 0,
|
|
1233
|
+
})),
|
|
1234
|
+
};
|
|
1235
|
+
}
|
|
1236
|
+
```
|
|
1237
|
+
|
|
1238
|
+
### Migrating Multi-Agent Systems
|
|
1239
|
+
|
|
1240
|
+
**LangChain**:
|
|
1241
|
+
```python
|
|
1242
|
+
from langchain.agents import initialize_agent
|
|
1243
|
+
from langchain.agents import AgentType
|
|
1244
|
+
|
|
1245
|
+
# Create multiple agents
|
|
1246
|
+
researcher = initialize_agent(research_tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
|
|
1247
|
+
writer = initialize_agent(writing_tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
|
|
1248
|
+
editor = initialize_agent(editing_tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
|
|
1249
|
+
|
|
1250
|
+
# Coordinate manually
|
|
1251
|
+
research = researcher.run("Research AI trends")
|
|
1252
|
+
draft = writer.run(f"Write article based on: {research}")
|
|
1253
|
+
final = editor.run(f"Edit this draft: {draft}")
|
|
1254
|
+
```
|
|
1255
|
+
|
|
1256
|
+
**OSSA**:
|
|
1257
|
+
Use orchestrator agent with A2A (Agent-to-Agent) communication:
|
|
1258
|
+
|
|
1259
|
+
```yaml
|
|
1260
|
+
ossaVersion: "0.2.5-RC"
|
|
1261
|
+
agent:
|
|
1262
|
+
id: article-orchestrator
|
|
1263
|
+
name: Article Orchestrator
|
|
1264
|
+
role: orchestration
|
|
1265
|
+
|
|
1266
|
+
capabilities:
|
|
1267
|
+
- name: produce_article
|
|
1268
|
+
description: "Coordinate research, writing, and editing agents to produce an article"
|
|
1269
|
+
workflow:
|
|
1270
|
+
type: sequential
|
|
1271
|
+
agents:
|
|
1272
|
+
- agent_id: researcher-agent
|
|
1273
|
+
capability: research
|
|
1274
|
+
input_mapping:
|
|
1275
|
+
topic: "$.input.topic"
|
|
1276
|
+
output_key: "research_results"
|
|
1277
|
+
|
|
1278
|
+
- agent_id: writer-agent
|
|
1279
|
+
capability: write_article
|
|
1280
|
+
input_mapping:
|
|
1281
|
+
research: "$.research_results.findings"
|
|
1282
|
+
output_key: "draft_article"
|
|
1283
|
+
|
|
1284
|
+
- agent_id: editor-agent
|
|
1285
|
+
capability: edit
|
|
1286
|
+
input_mapping:
|
|
1287
|
+
draft: "$.draft_article.text"
|
|
1288
|
+
output_key: "final_article"
|
|
1289
|
+
|
|
1290
|
+
bridge:
|
|
1291
|
+
a2a:
|
|
1292
|
+
enabled: true
|
|
1293
|
+
protocol: grpc
|
|
1294
|
+
discovery:
|
|
1295
|
+
type: service_mesh
|
|
1296
|
+
namespace: agents
|
|
1297
|
+
```
|
|
1298
|
+
|
|
1299
|
+
---
|
|
1300
|
+
|
|
1301
|
+
## Validation
|
|
1302
|
+
|
|
1303
|
+
### Test Your Migration
|
|
1304
|
+
|
|
1305
|
+
```bash
|
|
1306
|
+
# Navigate to agent directory
|
|
1307
|
+
cd .agents/your-agent
|
|
1308
|
+
|
|
1309
|
+
# Install dependencies
|
|
1310
|
+
npm install
|
|
1311
|
+
|
|
1312
|
+
# Build
|
|
1313
|
+
npm run build
|
|
1314
|
+
|
|
1315
|
+
# Validate manifest
|
|
1316
|
+
buildkit agents validate ./agent.yml
|
|
1317
|
+
|
|
1318
|
+
# Run agent locally
|
|
1319
|
+
npm start
|
|
1320
|
+
|
|
1321
|
+
# Test capability
|
|
1322
|
+
curl -X POST http://localhost:3000/execute \
|
|
1323
|
+
-H "Content-Type: application/json" \
|
|
1324
|
+
-d '{
|
|
1325
|
+
"operation": "your_capability",
|
|
1326
|
+
"input": {
|
|
1327
|
+
"test": "data"
|
|
1328
|
+
}
|
|
1329
|
+
}'
|
|
1330
|
+
|
|
1331
|
+
# Check health
|
|
1332
|
+
curl http://localhost:3000/health
|
|
1333
|
+
|
|
1334
|
+
# View metrics
|
|
1335
|
+
curl http://localhost:3000/metrics
|
|
1336
|
+
|
|
1337
|
+
# View OpenAPI spec
|
|
1338
|
+
curl http://localhost:3000/openapi.json
|
|
1339
|
+
```
|
|
1340
|
+
|
|
1341
|
+
### Integration Tests
|
|
1342
|
+
|
|
1343
|
+
Create integration tests to verify parity:
|
|
1344
|
+
|
|
1345
|
+
```typescript
|
|
1346
|
+
import { describe, it, expect } from '@jest/globals';
|
|
1347
|
+
import { OSSAAgentClient } from '@agent-buildkit/client';
|
|
1348
|
+
|
|
1349
|
+
describe('Agent Migration Tests', () => {
|
|
1350
|
+
const client = new OSSAAgentClient({
|
|
1351
|
+
baseUrl: 'http://localhost:3000',
|
|
1352
|
+
});
|
|
1353
|
+
|
|
1354
|
+
it('should produce same results as LangChain version', async () => {
|
|
1355
|
+
const input = { topic: 'artificial intelligence' };
|
|
1356
|
+
|
|
1357
|
+
const result = await client.execute('your_capability', input);
|
|
1358
|
+
|
|
1359
|
+
expect(result).toHaveProperty('expected_output');
|
|
1360
|
+
// Compare with LangChain baseline results
|
|
1361
|
+
});
|
|
1362
|
+
|
|
1363
|
+
it('should handle errors gracefully', async () => {
|
|
1364
|
+
const invalidInput = { invalid: 'data' };
|
|
1365
|
+
|
|
1366
|
+
await expect(
|
|
1367
|
+
client.execute('your_capability', invalidInput)
|
|
1368
|
+
).rejects.toThrow();
|
|
1369
|
+
});
|
|
1370
|
+
});
|
|
1371
|
+
```
|
|
1372
|
+
|
|
1373
|
+
---
|
|
1374
|
+
|
|
1375
|
+
## FAQ
|
|
1376
|
+
|
|
1377
|
+
### Q: Can I use existing LangChain tools directly in OSSA?
|
|
1378
|
+
|
|
1379
|
+
**A**: Yes, with the LangChain bridge. Add to your manifest:
|
|
1380
|
+
|
|
1381
|
+
```yaml
|
|
1382
|
+
bridge:
|
|
1383
|
+
langchain:
|
|
1384
|
+
enabled: true
|
|
1385
|
+
tool_class: YourLangChainTool
|
|
1386
|
+
chain_type: agent
|
|
1387
|
+
```
|
|
1388
|
+
|
|
1389
|
+
Then wrap your LangChain tools:
|
|
1390
|
+
|
|
1391
|
+
```typescript
|
|
1392
|
+
import { LangChainBridge } from '@agent-buildkit/bridges';
|
|
1393
|
+
import { YourLangChainTool } from './langchain-tools';
|
|
1394
|
+
|
|
1395
|
+
const bridge = new LangChainBridge({
|
|
1396
|
+
tools: [new YourLangChainTool()],
|
|
1397
|
+
});
|
|
1398
|
+
|
|
1399
|
+
// Use in your agent
|
|
1400
|
+
private async yourCapability(input: any): Promise<any> {
|
|
1401
|
+
return bridge.executeTool('YourLangChainTool', input);
|
|
1402
|
+
}
|
|
1403
|
+
```
|
|
1404
|
+
|
|
1405
|
+
### Q: How do I handle async operations in OSSA?
|
|
1406
|
+
|
|
1407
|
+
**A**: All OSSA capabilities are async by default. Use standard async/await:
|
|
1408
|
+
|
|
1409
|
+
```typescript
|
|
1410
|
+
async onCapability(name: string, input: any): Promise<any> {
|
|
1411
|
+
// All operations are naturally async
|
|
1412
|
+
const result1 = await this.externalApiCall();
|
|
1413
|
+
const result2 = await this.databaseQuery();
|
|
1414
|
+
|
|
1415
|
+
return { result1, result2 };
|
|
1416
|
+
}
|
|
1417
|
+
```
|
|
1418
|
+
|
|
1419
|
+
For parallel execution:
|
|
1420
|
+
|
|
1421
|
+
```typescript
|
|
1422
|
+
const [result1, result2, result3] = await Promise.all([
|
|
1423
|
+
this.operation1(),
|
|
1424
|
+
this.operation2(),
|
|
1425
|
+
this.operation3(),
|
|
1426
|
+
]);
|
|
1427
|
+
```
|
|
1428
|
+
|
|
1429
|
+
### Q: What about LangChain agents with multiple LLMs?
|
|
1430
|
+
|
|
1431
|
+
**A**: Configure multiple LLM providers in your agent:
|
|
1432
|
+
|
|
1433
|
+
```yaml
|
|
1434
|
+
agent:
|
|
1435
|
+
llm:
|
|
1436
|
+
primary:
|
|
1437
|
+
provider: openai
|
|
1438
|
+
model: gpt-4
|
|
1439
|
+
secondary:
|
|
1440
|
+
provider: anthropic
|
|
1441
|
+
model: claude-3-opus
|
|
1442
|
+
fallback:
|
|
1443
|
+
provider: openai
|
|
1444
|
+
model: gpt-3.5-turbo
|
|
1445
|
+
```
|
|
1446
|
+
|
|
1447
|
+
Then use in code:
|
|
1448
|
+
|
|
1449
|
+
```typescript
|
|
1450
|
+
private async generateResponse(input: any): Promise<any> {
|
|
1451
|
+
try {
|
|
1452
|
+
// Try primary LLM
|
|
1453
|
+
return await this.callLLM('primary', input);
|
|
1454
|
+
} catch (error) {
|
|
1455
|
+
this.logger.warn('Primary LLM failed, trying secondary');
|
|
1456
|
+
try {
|
|
1457
|
+
return await this.callLLM('secondary', input);
|
|
1458
|
+
} catch (error) {
|
|
1459
|
+
this.logger.warn('Secondary LLM failed, using fallback');
|
|
1460
|
+
return await this.callLLM('fallback', input);
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
```
|
|
1465
|
+
|
|
1466
|
+
### Q: How do I migrate LangChain's output parsers?
|
|
1467
|
+
|
|
1468
|
+
**A**: Use JSON Schema in `output_schema` for automatic validation:
|
|
1469
|
+
|
|
1470
|
+
```yaml
|
|
1471
|
+
capabilities:
|
|
1472
|
+
- name: extract_data
|
|
1473
|
+
output_schema:
|
|
1474
|
+
type: object
|
|
1475
|
+
required: ["name", "email", "phone"]
|
|
1476
|
+
properties:
|
|
1477
|
+
name:
|
|
1478
|
+
type: string
|
|
1479
|
+
pattern: "^[A-Za-z ]+$"
|
|
1480
|
+
email:
|
|
1481
|
+
type: string
|
|
1482
|
+
format: email
|
|
1483
|
+
phone:
|
|
1484
|
+
type: string
|
|
1485
|
+
pattern: "^\\+?[1-9]\\d{1,14}$"
|
|
1486
|
+
```
|
|
1487
|
+
|
|
1488
|
+
OSSA automatically validates output against the schema and returns errors if validation fails.
|
|
1489
|
+
|
|
1490
|
+
### Q: What about LangChain's document loaders?
|
|
1491
|
+
|
|
1492
|
+
**A**: Create dedicated capabilities for document processing:
|
|
1493
|
+
|
|
1494
|
+
```yaml
|
|
1495
|
+
capabilities:
|
|
1496
|
+
- name: load_documents
|
|
1497
|
+
description: "Load and process documents from various sources"
|
|
1498
|
+
input_schema:
|
|
1499
|
+
type: object
|
|
1500
|
+
required: ["source_type", "source_path"]
|
|
1501
|
+
properties:
|
|
1502
|
+
source_type:
|
|
1503
|
+
type: string
|
|
1504
|
+
enum: ["pdf", "docx", "txt", "url", "s3"]
|
|
1505
|
+
source_path:
|
|
1506
|
+
type: string
|
|
1507
|
+
output_schema:
|
|
1508
|
+
type: object
|
|
1509
|
+
required: ["documents"]
|
|
1510
|
+
properties:
|
|
1511
|
+
documents:
|
|
1512
|
+
type: array
|
|
1513
|
+
items:
|
|
1514
|
+
type: object
|
|
1515
|
+
properties:
|
|
1516
|
+
content:
|
|
1517
|
+
type: string
|
|
1518
|
+
metadata:
|
|
1519
|
+
type: object
|
|
1520
|
+
```
|
|
1521
|
+
|
|
1522
|
+
### Q: How do I monitor agent performance compared to LangChain?
|
|
1523
|
+
|
|
1524
|
+
**A**: OSSA has built-in monitoring with OpenTelemetry:
|
|
1525
|
+
|
|
1526
|
+
1. **Traces**: Every capability execution is automatically traced
|
|
1527
|
+
2. **Metrics**: Built-in metrics (execution time, success rate, etc.)
|
|
1528
|
+
3. **Logs**: Structured logging with correlation IDs
|
|
1529
|
+
4. **Dashboards**: Grafana/Prometheus integration
|
|
1530
|
+
|
|
1531
|
+
View metrics:
|
|
1532
|
+
```bash
|
|
1533
|
+
curl http://localhost:3000/metrics
|
|
1534
|
+
|
|
1535
|
+
# Example output:
|
|
1536
|
+
# agent_executions_total{capability="chat",status="success"} 1523
|
|
1537
|
+
# agent_execution_duration_ms{capability="chat",quantile="0.95"} 245
|
|
1538
|
+
# agent_llm_tokens_used{model="gpt-4"} 45234
|
|
1539
|
+
```
|
|
1540
|
+
|
|
1541
|
+
### Q: Can I gradually migrate from LangChain?
|
|
1542
|
+
|
|
1543
|
+
**A**: Yes! Run both in parallel:
|
|
1544
|
+
|
|
1545
|
+
1. Deploy OSSA agent alongside LangChain
|
|
1546
|
+
2. Route percentage of traffic to OSSA (e.g., 10%)
|
|
1547
|
+
3. Compare results and metrics
|
|
1548
|
+
4. Gradually increase OSSA traffic as confidence grows
|
|
1549
|
+
5. Deprecate LangChain once OSSA is proven
|
|
1550
|
+
|
|
1551
|
+
Use feature flags or load balancer to control traffic split.
|
|
1552
|
+
|
|
1553
|
+
---
|
|
1554
|
+
|
|
1555
|
+
## Performance Comparison
|
|
1556
|
+
|
|
1557
|
+
| Metric | LangChain | OSSA | Notes |
|
|
1558
|
+
|--------|-----------|------|-------|
|
|
1559
|
+
| **Startup Time** | ~500ms | ~200ms | OSSA precompiles and uses native Node.js |
|
|
1560
|
+
| **Memory Usage** | ~150MB | ~80MB | OSSA has smaller runtime footprint |
|
|
1561
|
+
| **Latency (p95)** | 300ms | 250ms | OSSA uses optimized HTTP/2 with gRPC option |
|
|
1562
|
+
| **Throughput** | 100 req/s | 250 req/s | OSSA uses async I/O and connection pooling |
|
|
1563
|
+
| **Cold Start** | 2-3s | 500ms | OSSA containers start faster |
|
|
1564
|
+
| **LLM Token Efficiency** | Baseline | Same | Both use same LLM APIs |
|
|
1565
|
+
|
|
1566
|
+
*Benchmarks based on simple agent with 3 tools, tested on m5.large EC2 instance*
|
|
1567
|
+
|
|
1568
|
+
---
|
|
1569
|
+
|
|
1570
|
+
## Next Steps
|
|
1571
|
+
|
|
1572
|
+
### After Migration
|
|
1573
|
+
|
|
1574
|
+
1. **Set up CI/CD**
|
|
1575
|
+
```yaml
|
|
1576
|
+
# .gitlab-ci.yml
|
|
1577
|
+
test:
|
|
1578
|
+
script:
|
|
1579
|
+
- cd .agents/your-agent
|
|
1580
|
+
- npm test
|
|
1581
|
+
- buildkit agents validate ./agent.yml
|
|
1582
|
+
|
|
1583
|
+
deploy:
|
|
1584
|
+
script:
|
|
1585
|
+
- buildkit agents deploy --name your-agent --env production
|
|
1586
|
+
```
|
|
1587
|
+
|
|
1588
|
+
2. **Configure monitoring**
|
|
1589
|
+
```bash
|
|
1590
|
+
# Enable Prometheus metrics
|
|
1591
|
+
buildkit monitoring setup --agent your-agent
|
|
1592
|
+
|
|
1593
|
+
# Set up alerts
|
|
1594
|
+
buildkit monitoring alerts create \
|
|
1595
|
+
--agent your-agent \
|
|
1596
|
+
--metric execution_duration_ms \
|
|
1597
|
+
--threshold 1000 \
|
|
1598
|
+
--severity critical
|
|
1599
|
+
```
|
|
1600
|
+
|
|
1601
|
+
3. **Enable MCP for Claude Desktop**
|
|
1602
|
+
```bash
|
|
1603
|
+
# Generate Claude Desktop config
|
|
1604
|
+
buildkit mcpb claude-config --agent your-agent
|
|
1605
|
+
|
|
1606
|
+
# Add to ~/.config/claude/claude_desktop_config.json
|
|
1607
|
+
```
|
|
1608
|
+
|
|
1609
|
+
4. **Create documentation**
|
|
1610
|
+
```bash
|
|
1611
|
+
# Auto-generate API docs
|
|
1612
|
+
buildkit docs generate --agent your-agent
|
|
1613
|
+
|
|
1614
|
+
# Publish to GitLab wiki
|
|
1615
|
+
buildkit docs publish --agent your-agent
|
|
1616
|
+
```
|
|
1617
|
+
|
|
1618
|
+
5. **Join the community**
|
|
1619
|
+
- [OSSA Specification](https://github.com/blueflyio/openstandardagents/wiki/home)
|
|
1620
|
+
- [Agent BuildKit](https://github.com/blueflyio/agent-buildkit)
|
|
1621
|
+
- [Examples Repository](https://github.com/blueflyio/agent-buildkit/-/tree/main/examples)
|
|
1622
|
+
- [Issue Tracker](https://github.com/blueflyio/agent-buildkit/-/issues)
|
|
1623
|
+
|
|
1624
|
+
---
|
|
1625
|
+
|
|
1626
|
+
## Additional Resources
|
|
1627
|
+
|
|
1628
|
+
### Documentation
|
|
1629
|
+
- [OSSA Complete Agent Reference](/OSSA-COMPLETE-AGENT-REFERENCE)
|
|
1630
|
+
- [OSSA Quick Reference](/OSSA-QUICK-REFERENCE)
|
|
1631
|
+
- [Agent BuildKit CLI Reference](/BuildKit-Commands-Reference)
|
|
1632
|
+
- [MCP Integration Guide](/MCPB-QUICKSTART)
|
|
1633
|
+
- [Getting Started Guide](/Getting-Started)
|
|
1634
|
+
|
|
1635
|
+
### Examples
|
|
1636
|
+
- [Simple Worker Agent](https://github.com/blueflyio/agent-buildkit/-/tree/main/agents/review-agents)
|
|
1637
|
+
- [Orchestrator Agent](https://github.com/blueflyio/agent-buildkit/-/tree/main/agents/executive-agents)
|
|
1638
|
+
- [Multi-Agent System](https://github.com/blueflyio/agent-buildkit/-/tree/main/examples)
|
|
1639
|
+
|
|
1640
|
+
### Tools
|
|
1641
|
+
- [Agent Validator](https://github.com/blueflyio/agent-buildkit/-/blob/main/src/cli/agents/validate.ts)
|
|
1642
|
+
- [Migration Script](https://github.com/blueflyio/agent-buildkit/-/blob/main/scripts/migrate-agents-to-ossa.ts)
|
|
1643
|
+
- [Agent Templates](https://github.com/blueflyio/agent-buildkit/-/tree/main/templates/agents)
|
|
1644
|
+
|
|
1645
|
+
### Support
|
|
1646
|
+
- **Issues**: https://github.com/blueflyio/agent-buildkit/-/issues
|
|
1647
|
+
- **Discussions**: https://github.com/blueflyio/agent-buildkit/-/merge_requests
|
|
1648
|
+
- **Wiki**: https://github.com/blueflyio/agent-buildkit/-/wikis/home
|
|
1649
|
+
|
|
1650
|
+
---
|
|
1651
|
+
|
|
1652
|
+
## Troubleshooting
|
|
1653
|
+
|
|
1654
|
+
### Common Migration Issues
|
|
1655
|
+
|
|
1656
|
+
#### Issue: "Cannot find module '@agent-buildkit/core'"
|
|
1657
|
+
**Solution**: Install the OSSA SDK:
|
|
1658
|
+
```bash
|
|
1659
|
+
npm install @agent-buildkit/core @agent-buildkit/client
|
|
1660
|
+
```
|
|
1661
|
+
|
|
1662
|
+
#### Issue: "Invalid manifest: missing required field 'capabilities'"
|
|
1663
|
+
**Solution**: Every OSSA agent must have at least one capability. Add:
|
|
1664
|
+
```yaml
|
|
1665
|
+
capabilities:
|
|
1666
|
+
- name: your_capability
|
|
1667
|
+
input_schema: { type: object }
|
|
1668
|
+
output_schema: { type: object }
|
|
1669
|
+
```
|
|
1670
|
+
|
|
1671
|
+
#### Issue: "LLM API key not found"
|
|
1672
|
+
**Solution**: Set environment variable in manifest:
|
|
1673
|
+
```yaml
|
|
1674
|
+
runtime:
|
|
1675
|
+
environment:
|
|
1676
|
+
OPENAI_API_KEY: ${OPENAI_API_KEY}
|
|
1677
|
+
```
|
|
1678
|
+
|
|
1679
|
+
Or use secrets management:
|
|
1680
|
+
```bash
|
|
1681
|
+
buildkit secrets create --name openai-api-key --value sk-...
|
|
1682
|
+
```
|
|
1683
|
+
|
|
1684
|
+
#### Issue: "Port 3000 already in use"
|
|
1685
|
+
**Solution**: Change port in manifest or runtime:
|
|
1686
|
+
```yaml
|
|
1687
|
+
integration:
|
|
1688
|
+
endpoints:
|
|
1689
|
+
base_url: "http://localhost:3001"
|
|
1690
|
+
```
|
|
1691
|
+
|
|
1692
|
+
Or set via environment:
|
|
1693
|
+
```bash
|
|
1694
|
+
PORT=3001 npm start
|
|
1695
|
+
```
|
|
1696
|
+
|
|
1697
|
+
#### Issue: "Memory limit exceeded"
|
|
1698
|
+
**Solution**: Increase resource allocation:
|
|
1699
|
+
```yaml
|
|
1700
|
+
runtime:
|
|
1701
|
+
resources:
|
|
1702
|
+
memory: "1Gi" # Increase from default 512Mi
|
|
1703
|
+
```
|
|
1704
|
+
|
|
1705
|
+
---
|
|
1706
|
+
|
|
1707
|
+
**Version**: 1.0.0
|
|
1708
|
+
**Last Updated**: 2025-11-10
|
|
1709
|
+
**Migration Complexity**: Medium
|
|
1710
|
+
**Estimated Time**: 2-4 hours per agent
|
|
1711
|
+
|
|
1712
|
+
---
|
|
1713
|
+
|
|
1714
|
+
*For questions or issues with this migration guide, please create an issue at: https://github.com/blueflyio/agent-buildkit/-/issues*
|