@bluefly/openstandardagents 0.2.7 → 0.2.9

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.
Files changed (327) hide show
  1. package/.devfile.yaml +1 -1
  2. package/.env.example +1 -1
  3. package/.github/AGENTS.md +245 -0
  4. package/.github/agents/github-issue-triage.ossa.yaml +99 -0
  5. package/.github/agents/github-pr-triage.ossa.yaml +137 -0
  6. package/.github/workflows/issue-sync-to-gitlab.yml +138 -0
  7. package/.github/workflows/pr-triage-to-gitlab.yml +164 -0
  8. package/.version.json +2 -2
  9. package/.wiki-config.json +24 -0
  10. package/CHANGELOG.md +44 -18
  11. package/CODEOWNERS +75 -0
  12. package/CONTRIBUTING.md +103 -4
  13. package/README.md +178 -243
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/repositories/schema.repository.d.ts +6 -1
  19. package/dist/repositories/schema.repository.d.ts.map +1 -1
  20. package/dist/repositories/schema.repository.js +49 -27
  21. package/dist/repositories/schema.repository.js.map +1 -1
  22. package/dist/services/migration.service.d.ts +4 -3
  23. package/dist/services/migration.service.d.ts.map +1 -1
  24. package/dist/services/migration.service.js +11 -10
  25. package/dist/services/migration.service.js.map +1 -1
  26. package/dist/services/release-automation/release.service.js +1 -1
  27. package/dist/services/release-automation/release.service.js.map +1 -1
  28. package/dist/services/release-automation/schemas/release.schema.js +1 -1
  29. package/dist/services/release-automation/webhook.service.js +3 -3
  30. package/dist/services/release-automation/webhook.service.js.map +1 -1
  31. package/dist/services/runtime/claude/claude-adapter.d.ts +1 -1
  32. package/dist/services/runtime/claude/claude-adapter.d.ts.map +1 -1
  33. package/dist/services/runtime/claude/claude-adapter.js +2 -2
  34. package/dist/services/runtime/claude/claude-adapter.js.map +1 -1
  35. package/dist/spec/v0.2.8/CHANGELOG.md +401 -0
  36. package/dist/spec/v0.2.8/README.md +72 -0
  37. package/dist/spec/v0.2.8/migrations/v0.2.3-to-v0.2.4.md +599 -0
  38. package/dist/spec/v0.2.8/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  39. package/dist/spec/v0.2.8/migrations/v0.2.6-to-v0.2.8.md +81 -0
  40. package/{spec/v0.2.6-dev/ossa-0.2.5.schema.json → dist/spec/v0.2.8/ossa-0.2.8.schema.json} +1509 -52
  41. package/dist/spec/v0.2.8/ossa-0.2.8.yaml +581 -0
  42. package/dist/spec/v0.2.9/a2a-protocol.md +1337 -0
  43. package/dist/spec/v0.2.9/agent.md +1946 -0
  44. package/dist/spec/v0.2.9/capabilities/index.yaml +25 -0
  45. package/dist/spec/v0.2.9/capabilities/memory.yaml +251 -0
  46. package/dist/spec/v0.2.9/capability-schema.md +576 -0
  47. package/dist/spec/v0.2.9/compliance-profiles.md +533 -0
  48. package/dist/spec/v0.2.9/conformance-testing.md +1527 -0
  49. package/dist/spec/v0.2.9/gitlab-duo-integration.md +621 -0
  50. package/dist/spec/v0.2.9/ossa-0.2.9.schema.json +3699 -0
  51. package/dist/spec/v0.2.9/runtime-semantics.md +464 -0
  52. package/dist/spec/v0.2.9/security-model.md +1245 -0
  53. package/dist/spec/v0.2.9/semantic-conventions.md +347 -0
  54. package/dist/spec/v0.2.9/types.ts +522 -0
  55. package/dist/types/index.d.ts +3 -2
  56. package/dist/types/index.d.ts.map +1 -1
  57. package/dist/types/policy.d.ts +377 -0
  58. package/dist/types/policy.d.ts.map +1 -0
  59. package/dist/types/policy.js +84 -0
  60. package/dist/types/policy.js.map +1 -0
  61. package/dist/utils/index.d.ts +6 -0
  62. package/dist/utils/index.d.ts.map +1 -0
  63. package/dist/utils/index.js +6 -0
  64. package/dist/utils/index.js.map +1 -0
  65. package/dist/utils/version.d.ts +68 -0
  66. package/dist/utils/version.d.ts.map +1 -0
  67. package/dist/utils/version.js +156 -0
  68. package/dist/utils/version.js.map +1 -0
  69. package/docs/specs/policy-dsl.md +925 -0
  70. package/eslint-report.json +1 -0
  71. package/examples/adk-integration/code-review-workflow.yml +1 -1
  72. package/examples/adk-integration/customer-support.yml +1 -1
  73. package/examples/adk-integration/data-pipeline.yml +1 -1
  74. package/examples/advanced/reasoning-agent.yaml +136 -0
  75. package/examples/advanced/workflows/hybrid-model-strategy.yaml +1 -1
  76. package/examples/agent-manifests/critics/critic-agent.yaml +1 -1
  77. package/examples/agent-manifests/governors/governor-agent.yaml +1 -1
  78. package/examples/agent-manifests/integrators/integrator-agent.yaml +1 -1
  79. package/examples/agent-manifests/judges/judge-agent.yaml +1 -1
  80. package/examples/agent-manifests/monitors/monitor-agent.yaml +1 -1
  81. package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +1 -1
  82. package/examples/agent-manifests/sample-compliant-agent.yaml +1 -1
  83. package/examples/agent-manifests/workers/worker-agent.yaml +1 -1
  84. package/examples/agents-md/code-agent.ossa.json +100 -0
  85. package/examples/agents-md/monorepo-agent.ossa.yaml +180 -0
  86. package/examples/anthropic/claude-assistant.ossa.json +1 -1
  87. package/examples/autogen/multi-agent.ossa.json +1 -1
  88. package/examples/claude-code/code-reviewer.ossa.yaml +78 -0
  89. package/examples/claude-code/ossa-validator.ossa.yaml +80 -0
  90. package/examples/common_npm/agent-router.ossa.yaml +1 -0
  91. package/examples/common_npm/agent-router.v0.2.2.ossa.yaml +1 -1
  92. package/examples/crewai/research-team.ossa.json +1 -1
  93. package/examples/cursor/code-review-agent.ossa.json +1 -1
  94. package/examples/drupal/gitlab-ml-recommender.ossa.yaml +1 -0
  95. package/examples/drupal/gitlab-ml-recommender.v0.2.2.ossa.yaml +1 -1
  96. package/examples/extensions/agents-md-v1.yml +175 -0
  97. package/examples/extensions/drupal-v1.yml +1 -1
  98. package/examples/extensions/kagent-v1.yml +1 -1
  99. package/examples/getting-started/hello-world-complete.ossa.yaml +1 -1
  100. package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +4 -4
  101. package/examples/kagent/compliance-validator.ossa.yaml +1 -1
  102. package/examples/kagent/cost-optimizer.ossa.yaml +1 -1
  103. package/examples/kagent/documentation-agent.ossa.yaml +1 -1
  104. package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +1 -0
  105. package/examples/kagent/k8s-troubleshooter-v1.v0.2.2.ossa.yaml +1 -1
  106. package/examples/kagent/k8s-troubleshooter.ossa.yaml +1 -1
  107. package/examples/kagent/security-scanner.ossa.yaml +1 -1
  108. package/examples/langchain/chain-agent.ossa.json +1 -1
  109. package/examples/langflow/workflow-agent.ossa.json +1 -1
  110. package/examples/langgraph/state-machine-agent.ossa.json +1 -1
  111. package/examples/llamaindex/rag-agent.ossa.json +1 -1
  112. package/examples/migration-guides/from-langchain-to-ossa.yaml +4 -4
  113. package/examples/multi-agent/README.md +74 -0
  114. package/examples/multi-agent/conditional-router.ossa.yaml +42 -0
  115. package/examples/multi-agent/parallel-execution.ossa.yaml +54 -0
  116. package/examples/multi-agent/sequential-pipeline.ossa.yaml +45 -0
  117. package/examples/openai/basic-agent.ossa.yaml +1 -1
  118. package/examples/openai/multi-tool-agent.ossa.json +1 -1
  119. package/examples/openai/swarm-agent.ossa.json +1 -1
  120. package/examples/production/document-analyzer-openai.yml +1 -1
  121. package/examples/quickstart/support-agent.ossa.yaml +1 -1
  122. package/examples/spec-examples/audit-agent.yml +1 -1
  123. package/examples/spec-examples/chat-agent.yml +1 -1
  124. package/examples/spec-examples/compliance-agent.yml +1 -1
  125. package/examples/spec-examples/monitoring-agent.yml +1 -1
  126. package/examples/spec-examples/workflow-agent.yml +1 -1
  127. package/examples/templates/ossa-compliance.yaml +1 -1
  128. package/examples/vercel/edge-agent.ossa.json +1 -1
  129. package/gl-code-quality-report.json +62 -0
  130. package/llms-ctx-full.txt +39 -0
  131. package/llms-ctx.txt +39 -0
  132. package/llms.txt +47 -0
  133. package/package.json +6 -3
  134. package/scripts/README.md +25 -0
  135. package/scripts/compliance-audit.ts +796 -0
  136. package/scripts/eslint-to-codequality.cjs +34 -0
  137. package/scripts/generate-agents-catalog.ts +2 -1
  138. package/scripts/generate-api-docs.ts +2 -1
  139. package/scripts/generate-examples-docs.ts +2 -1
  140. package/scripts/generate-llms-ctx.sh +17 -0
  141. package/scripts/generate-schema-docs.ts +31 -10
  142. package/scripts/sync-version.js +4 -12
  143. package/scripts/validate-schema.ts +2 -1
  144. package/spec/v0.2.8/CHANGELOG.md +401 -0
  145. package/spec/v0.2.8/README.md +72 -0
  146. package/spec/v0.2.8/migrations/v0.2.3-to-v0.2.4.md +599 -0
  147. package/spec/v0.2.8/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  148. package/spec/v0.2.8/migrations/v0.2.6-to-v0.2.8.md +81 -0
  149. package/spec/{v0.2.6-dev/ossa-0.2.6-dev.schema.json → v0.2.8/ossa-0.2.8.schema.json} +1509 -52
  150. package/spec/v0.2.8/ossa-0.2.8.yaml +581 -0
  151. package/spec/v0.2.9/a2a-protocol.md +1337 -0
  152. package/spec/v0.2.9/agent.md +1946 -0
  153. package/spec/v0.2.9/capabilities/index.yaml +25 -0
  154. package/spec/v0.2.9/capabilities/memory.yaml +251 -0
  155. package/spec/v0.2.9/capability-schema.md +576 -0
  156. package/spec/v0.2.9/compliance-profiles.md +533 -0
  157. package/spec/v0.2.9/conformance-testing.md +1527 -0
  158. package/spec/v0.2.9/gitlab-duo-integration.md +621 -0
  159. package/spec/v0.2.9/ossa-0.2.9.schema.json +3699 -0
  160. package/spec/v0.2.9/runtime-semantics.md +464 -0
  161. package/spec/v0.2.9/security-model.md +1245 -0
  162. package/spec/v0.2.9/semantic-conventions.md +347 -0
  163. package/spec/v0.2.9/types.ts +522 -0
  164. package/test-results/junit.xml +337 -0
  165. package/.github/workflows/pr-comment.yml +0 -33
  166. package/bin/validate-ossa-0.2.5-RC.ts +0 -244
  167. package/dist/spec/v0.2.6-dev/ossa-0.2.5.schema.json +0 -1696
  168. package/dist/spec/v0.2.6-dev/ossa-0.2.6-dev.schema.json +0 -1696
  169. package/scripts/lib/exec.ts +0 -37
  170. package/scripts/lib/file-ops.ts +0 -58
  171. package/scripts/lib/version.ts +0 -83
  172. package/website/.lighthouserc.ts +0 -24
  173. package/website/.prettierrc +0 -10
  174. package/website/DESIGN_SYSTEM_IMPLEMENTATION.md +0 -445
  175. package/website/Dockerfile +0 -30
  176. package/website/app/about/page.tsx +0 -304
  177. package/website/app/blog/[slug]/page.tsx +0 -208
  178. package/website/app/blog/page.tsx +0 -249
  179. package/website/app/design-guide/page.tsx +0 -511
  180. package/website/app/docs/[[...slug]]/page.tsx +0 -847
  181. package/website/app/docs/core-concepts/project-structure/page.tsx +0 -349
  182. package/website/app/ecosystem/page.tsx +0 -410
  183. package/website/app/examples/page.tsx +0 -133
  184. package/website/app/globals.scss +0 -370
  185. package/website/app/layout.tsx +0 -106
  186. package/website/app/license/page.tsx +0 -183
  187. package/website/app/not-found.tsx +0 -18
  188. package/website/app/page.tsx +0 -686
  189. package/website/app/page.tsx.bak +0 -679
  190. package/website/app/page.tsx.bak2 +0 -649
  191. package/website/app/playground/page.tsx +0 -487
  192. package/website/app/robots.ts +0 -19
  193. package/website/app/rss.xml/route.ts +0 -74
  194. package/website/app/schema/page.tsx +0 -1001
  195. package/website/app/sitemap.ts +0 -56
  196. package/website/app/specification/page.tsx +0 -287
  197. package/website/components/InstallCommand.tsx +0 -96
  198. package/website/components/Logo.tsx +0 -97
  199. package/website/components/StructuredData.tsx +0 -65
  200. package/website/components/docs/DocsSearch.tsx +0 -104
  201. package/website/components/docs/DocsSidebar.tsx +0 -155
  202. package/website/components/docs/MarkdownContent.tsx +0 -401
  203. package/website/components/docs/VersionSelector.tsx +0 -105
  204. package/website/components/examples/ExamplesViewer.tsx +0 -293
  205. package/website/components/layout/Footer.tsx +0 -116
  206. package/website/components/layout/Header.tsx +0 -172
  207. package/website/components/schema/SchemaComponentsAccordion.tsx +0 -84
  208. package/website/components/schema/SchemaExplorer.tsx +0 -213
  209. package/website/components/ui/Badge.tsx +0 -82
  210. package/website/components/ui/Button.tsx +0 -116
  211. package/website/components/ui/Card.tsx +0 -167
  212. package/website/components/ui/Checkbox.tsx +0 -141
  213. package/website/components/ui/Input.tsx +0 -169
  214. package/website/components/ui/Radio.tsx +0 -141
  215. package/website/components/ui/Select.tsx +0 -182
  216. package/website/components/ui/Tag.tsx +0 -158
  217. package/website/components/ui/Textarea.tsx +0 -195
  218. package/website/components/ui/index.ts +0 -11
  219. package/website/content/blog/OpenAPI-AI-Agents-Standard.md +0 -285
  220. package/website/content/blog/Why-Formal-Standards-Matter-Now.md +0 -198
  221. package/website/content/blog/gitlab-kubernetes-agent-ecosystem.md +0 -286
  222. package/website/content/blog/introducing-ossa-framework.md +0 -328
  223. package/website/content/blog/ossa-production-results.md +0 -279
  224. package/website/content/blog/welcome-to-ossa.md +0 -43
  225. package/website/content/blog/why-ai-agents-need-open-standard.md +0 -98
  226. package/website/content/docs/00-home.md +0 -153
  227. package/website/content/docs/adapters/openai-adapter.md +0 -693
  228. package/website/content/docs/agents/catalog.md +0 -28
  229. package/website/content/docs/aiflow-framework-integration-with-ossa.md +0 -107
  230. package/website/content/docs/api-reference/index.md +0 -38
  231. package/website/content/docs/api-reference/ossa-core-api.md +0 -634
  232. package/website/content/docs/api-reference/ossa-registry-api.md +0 -515
  233. package/website/content/docs/api-reference/unified-agent-gateway.md +0 -599
  234. package/website/content/docs/architecture/execution-flow.md +0 -335
  235. package/website/content/docs/architecture/multi-agent-systems.md +0 -737
  236. package/website/content/docs/architecture/overview.md +0 -121
  237. package/website/content/docs/architecture/stack-integration.md +0 -461
  238. package/website/content/docs/changelog.md +0 -246
  239. package/website/content/docs/cli-reference/index.md +0 -111
  240. package/website/content/docs/cli-reference/ossa-agents.md +0 -70
  241. package/website/content/docs/cli-reference/ossa-export.md +0 -56
  242. package/website/content/docs/cli-reference/ossa-generate.md +0 -66
  243. package/website/content/docs/cli-reference/ossa-gitlab-agent.md +0 -57
  244. package/website/content/docs/cli-reference/ossa-import.md +0 -56
  245. package/website/content/docs/cli-reference/ossa-init.md +0 -57
  246. package/website/content/docs/cli-reference/ossa-migrate.md +0 -62
  247. package/website/content/docs/cli-reference/ossa-run.md +0 -66
  248. package/website/content/docs/cli-reference/ossa-schema.md +0 -57
  249. package/website/content/docs/cli-reference/ossa-setup.md +0 -57
  250. package/website/content/docs/cli-reference/ossa-validate.md +0 -66
  251. package/website/content/docs/configuration/index.md +0 -97
  252. package/website/content/docs/contributing.md +0 -599
  253. package/website/content/docs/deployment/github-mirroring.md +0 -924
  254. package/website/content/docs/documentation.md +0 -100
  255. package/website/content/docs/ecosystem/framework-support.md +0 -1361
  256. package/website/content/docs/ecosystem/overview.md +0 -366
  257. package/website/content/docs/errors/index.md +0 -10
  258. package/website/content/docs/examples/aiflow-framework-integration-with-ossa.md +0 -107
  259. package/website/content/docs/examples/catalog.md +0 -300
  260. package/website/content/docs/for-audiences/students-researchers.md +0 -122
  261. package/website/content/docs/getting-started/index.md +0 -92
  262. package/website/content/docs/getting-started/installation.md +0 -155
  263. package/website/content/docs/getting-started/running-agents.md +0 -309
  264. package/website/content/docs/getting-started.md +0 -91
  265. package/website/content/docs/integrations/aiflow.md +0 -104
  266. package/website/content/docs/integrations/drupal.md +0 -105
  267. package/website/content/docs/migration-guides/agent-schema-comparison.md +0 -232
  268. package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +0 -1750
  269. package/website/content/docs/migration-guides/crewai-to-ossa.md +0 -274
  270. package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +0 -2017
  271. package/website/content/docs/migration-guides/general-agent-schema.yml +0 -247
  272. package/website/content/docs/migration-guides/index.md +0 -133
  273. package/website/content/docs/migration-guides/langchain-to-ossa.md +0 -1714
  274. package/website/content/docs/migration-guides/langflow-to-ossa.md +0 -2075
  275. package/website/content/docs/migration-guides/migration-manifest.json +0 -64
  276. package/website/content/docs/migration-guides/openai-to-ossa.md +0 -1202
  277. package/website/content/docs/openapi-extensions/examples.md +0 -550
  278. package/website/content/docs/openapi-extensions/index.md +0 -551
  279. package/website/content/docs/openapi-extensions/operation-extensions.md +0 -457
  280. package/website/content/docs/openapi-extensions/root-extensions.md +0 -410
  281. package/website/content/docs/ossa-compliant-badge.md +0 -251
  282. package/website/content/docs/pre-release/index.md +0 -175
  283. package/website/content/docs/quick-reference.md +0 -17
  284. package/website/content/docs/readme.md +0 -35
  285. package/website/content/docs/releases/v0.2.6.md +0 -99
  286. package/website/content/docs/schema-reference/agent-capabilities.md +0 -50
  287. package/website/content/docs/schema-reference/agent-id.md +0 -52
  288. package/website/content/docs/schema-reference/agent-name.md +0 -50
  289. package/website/content/docs/schema-reference/agent-role.md +0 -54
  290. package/website/content/docs/schema-reference/agent-spec.md +0 -406
  291. package/website/content/docs/schema-reference/agent-version.md +0 -50
  292. package/website/content/docs/schema-reference/autonomy.md +0 -568
  293. package/website/content/docs/schema-reference/constraints.md +0 -543
  294. package/website/content/docs/schema-reference/index.md +0 -45
  295. package/website/content/docs/schema-reference/llm-config.md +0 -445
  296. package/website/content/docs/schema-reference/observability.md +0 -654
  297. package/website/content/docs/schema-reference/ossa-manifest.md +0 -309
  298. package/website/content/docs/schema-reference/taxonomy.md +0 -509
  299. package/website/content/docs/schema-reference/tools.md +0 -628
  300. package/website/content/docs/templates/blog-post.md +0 -43
  301. package/website/content/docs/types-reference/index.md +0 -105
  302. package/website/content/docs/use-cases/00-index.md +0 -395
  303. package/website/content/docs/use-cases/cicd-code-review.md +0 -1236
  304. package/website/content/docs/use-cases/customer-support.md +0 -1234
  305. package/website/content/docs/use-cases/enterprise-compliance.md +0 -1208
  306. package/website/content/docs/use-cases/research-multi-agent.md +0 -1161
  307. package/website/content/docs/versioning.md +0 -288
  308. package/website/dev.sh +0 -53
  309. package/website/docker-compose.dev.yml +0 -36
  310. package/website/lib/version.ts +0 -35
  311. package/website/lib/versions.json +0 -103
  312. package/website/next.config.ts +0 -18
  313. package/website/nginx.conf +0 -32
  314. package/website/package-lock.json +0 -9679
  315. package/website/package.json +0 -59
  316. package/website/postcss.config.mjs +0 -9
  317. package/website/scripts/fetch-versions.js +0 -166
  318. package/website/scripts/generate-examples-index.js +0 -163
  319. package/website/scripts/merge-docs-to-wiki.ts +0 -207
  320. package/website/scripts/sync-version.js +0 -72
  321. package/website/scripts/sync-wiki.ts +0 -322
  322. package/website/scripts/upload-wiki.ts +0 -199
  323. package/website/styles/_spacing.scss +0 -453
  324. package/website/styles/_tokens.scss +0 -245
  325. package/website/styles/_typography.scss +0 -361
  326. package/website/styles/_variables.scss +0 -287
  327. package/website/tailwind.config.ts +0 -170
@@ -0,0 +1 @@
1
+ [{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/export.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/generate.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/github-sync.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/gitlab-agent.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/import.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/init.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/migrate.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/release.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/run.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/schema.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/setup.command.ts","messages":[{"ruleId":"@typescript-eslint/no-unused-vars","severity":1,"message":"'options' is defined but never used. Allowed unused args must match /^_/u.","line":214,"column":15,"nodeType":null,"messageId":"unusedVar","endLine":214,"endColumn":22}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * OSSA Setup Command\n * Professional setup commands for branch protection and release automation\n * Follows DRY, OpenAPI, Zod, CRUD principles\n */\n\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\nimport { z } from 'zod';\n\n/**\n * Zod Schema for Setup Options\n */\nconst SetupOptionsSchema = z.object({\n force: z.boolean().optional().default(false),\n verbose: z.boolean().optional().default(false),\n});\n\ntype SetupOptions = z.infer<typeof SetupOptionsSchema>;\n\n/**\n * Base Setup Service (DRY)\n */\nclass SetupService {\n protected projectRoot: string;\n\n constructor() {\n this.projectRoot = this.findProjectRoot();\n }\n\n protected findProjectRoot(): string {\n let current = process.cwd();\n for (let i = 0; i < 10; i++) {\n const packageJson = path.join(current, 'package.json');\n if (fs.existsSync(packageJson)) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return process.cwd();\n }\n\n protected log(message: string, type: 'info' | 'success' | 'warning' | 'error' = 'info'): void {\n const colors = {\n info: chalk.blue,\n success: chalk.green,\n warning: chalk.yellow,\n error: chalk.red,\n };\n console.log(colors[type](message));\n }\n\n protected exec(command: string, options?: { cwd?: string; silent?: boolean }): string {\n try {\n const result = execSync(command, {\n cwd: options?.cwd || this.projectRoot,\n encoding: 'utf-8',\n stdio: options?.silent ? 'pipe' : 'inherit',\n });\n return result.toString();\n } catch {\n throw new Error(`Command failed: ${command}`);\n }\n }\n\n protected fileExists(filePath: string): boolean {\n return fs.existsSync(path.resolve(this.projectRoot, filePath));\n }\n\n protected ensureDirectory(dirPath: string): void {\n const fullPath = path.resolve(this.projectRoot, dirPath);\n if (!fs.existsSync(fullPath)) {\n fs.mkdirSync(fullPath, { recursive: true });\n }\n }\n}\n\n/**\n * Branch Protection Setup Service\n */\nclass BranchProtectionService extends SetupService {\n private readonly protectedBranches = ['main', 'development'];\n private readonly hooksDir = '.git/hooks';\n private readonly hookFile = 'post-checkout';\n\n async setup(options: SetupOptions): Promise<void> {\n this.log('🔒 Setting up branch protection for main and development...', 'info');\n this.log('');\n\n // Ensure hooks directory exists\n this.ensureDirectory(this.hooksDir);\n\n // Create post-checkout hook\n await this.createPostCheckoutHook(options.force);\n\n // Configure git hooks path\n this.exec('git config core.hooksPath .git/hooks', { silent: true });\n\n this.log('');\n this.log('✅ Branch protection installed!', 'success');\n this.log('');\n this.log(`Protected branches: ${this.protectedBranches.join(', ')}`);\n this.log('');\n this.log(\n 'The hook will automatically switch you back if you try to checkout these branches.'\n );\n this.log('');\n }\n\n private async createPostCheckoutHook(force: boolean): Promise<void> {\n const hookPath = path.resolve(this.projectRoot, this.hooksDir, this.hookFile);\n\n if (fs.existsSync(hookPath) && !force) {\n this.log(`✅ Post-checkout hook already exists`, 'info');\n // Ensure it's executable\n fs.chmodSync(hookPath, 0o755);\n return;\n }\n\n const hookContent = this.generateHookContent();\n fs.writeFileSync(hookPath, hookContent, { mode: 0o755 });\n\n this.log(`✅ Created post-checkout hook`, 'success');\n }\n\n private generateHookContent(): string {\n return `#!/bin/bash\n#\n# Git Post-Checkout Hook\n# Prevents checking out main and development branches locally\n# Enforces feature branch workflow\n#\n\n# Post-checkout hook receives:\n# $1 = previous HEAD\n# $2 = new HEAD\n# $3 = flag (0=file checkout, 1=branch checkout)\n\n# Only block branch checkouts, not file checkouts\nif [ \"$3\" != \"1\" ]; then\n exit 0\nfi\n\n# Get current branch name\nCURRENT_BRANCH=$(git branch --show-current 2>/dev/null)\n\n# Protected branches that cannot be checked out locally\nPROTECTED_BRANCHES=\"main development\"\n\n# Check if we're on a protected branch\nfor PROTECTED in $PROTECTED_BRANCHES; do\n if [ \"$CURRENT_BRANCH\" = \"$PROTECTED\" ]; then\n echo \"\"\n echo \"❌ ERROR: Cannot work on '$PROTECTED' branch locally\"\n echo \"\"\n echo \"This project enforces a feature branch workflow:\"\n echo \" • Work is done on feature branches\"\n echo \" • Feature branches → merge to development (via MR)\"\n echo \" • Development → merge to main (via MR)\"\n echo \"\"\n echo \"Switching you back to your previous branch...\"\n echo \"\"\n \n # Switch back to previous branch or a safe default\n PREVIOUS_BRANCH=$(git reflog | grep \"checkout:\" | head -2 | tail -1 | awk '{print $NF}' | sed 's|.*:||')\n \n if [ -n \"$PREVIOUS_BRANCH\" ] && [ \"$PREVIOUS_BRANCH\" != \"$PROTECTED\" ]; then\n git checkout \"$PREVIOUS_BRANCH\" 2>/dev/null\n echo \"✅ Switched back to: $PREVIOUS_BRANCH\"\n else\n # Try to find a feature branch\n FEATURE_BRANCH=$(git branch -a | grep -E \"feat/|feature/\" | head -1 | sed 's|.*/||' | xargs)\n if [ -n \"$FEATURE_BRANCH\" ]; then\n git checkout \"$FEATURE_BRANCH\" 2>/dev/null\n echo \"✅ Switched to feature branch: $FEATURE_BRANCH\"\n else\n echo \"⚠️ Could not auto-switch. Please manually checkout a feature branch:\"\n echo \" git checkout -b feat/your-feature development\"\n fi\n fi\n \n echo \"\"\n echo \"To work on this project:\"\n echo \" 1. Create a feature branch: git checkout -b feat/your-feature development\"\n echo \" 2. Make your changes\"\n echo \" 3. Push and create a merge request\"\n echo \"\"\n echo \"If you need to view $PROTECTED:\"\n echo \" • Use: git worktree add ../project-$PROTECTED $PROTECTED\"\n echo \" • Or view on GitLab: https://gitlab.com/blueflyio/openstandardagents/-/tree/$PROTECTED\"\n echo \"\"\n exit 1\n fi\ndone\n\n# Allow checkout\nexit 0\n`;\n }\n}\n\n/**\n * Release Automation Setup Service\n */\nclass ReleaseAutomationService extends SetupService {\n private readonly requiredDependencies = ['@gitbeaker/rest', '@octokit/rest'];\n private readonly requiredEnvVars = ['GITLAB_TOKEN', 'NPM_TOKEN', 'GITHUB_TOKEN'];\n\n async setup(options: SetupOptions): Promise<void> {\n this.log('🚀 Release Automation Setup', 'info');\n this.log('==============================', 'info');\n this.log('');\n\n // Check branch\n await this.checkBranch();\n\n // Check dependencies\n await this.checkDependencies();\n\n // Check CI/CD variables\n this.checkCICDVariables();\n\n // Check webhooks\n this.checkWebhooks();\n\n // Run tests\n await this.runTests();\n\n this.log('');\n this.log('==============================', 'info');\n this.log('✅ Setup checks complete!', 'success');\n this.log('');\n this.log('Next steps:');\n this.log(' 1. Configure webhooks in GitLab UI');\n this.log(' 2. Set CI/CD variables in GitLab UI');\n this.log(' 3. Create test milestone: v0.2.8-test');\n this.log(' 4. Verify automation works');\n this.log('');\n }\n\n private async checkBranch(): Promise<void> {\n try {\n const branch = this.exec('git branch --show-current', { silent: true }).trim();\n if (branch !== 'development') {\n this.log(\n `⚠️ Warning: Not on development branch (current: ${branch})`,\n 'warning'\n );\n this.log(' Switch to development first: git checkout development', 'warning');\n throw new Error('Must be on development branch');\n }\n this.log('✅ On development branch', 'success');\n this.log('');\n } catch (error) {\n if (error instanceof Error && error.message === 'Must be on development branch') {\n throw error;\n }\n throw new Error('Failed to check git branch');\n }\n }\n\n private async checkDependencies(): Promise<void> {\n this.log('📦 Checking dependencies...', 'info');\n\n for (const dep of this.requiredDependencies) {\n try {\n this.exec(`npm list ${dep}`, { silent: true });\n this.log(` ✅ ${dep}`, 'success');\n } catch {\n this.log(` ❌ ${dep} not found`, 'error');\n this.log(' Run: npm install', 'error');\n throw new Error(`Missing dependency: ${dep}`);\n }\n }\n\n this.log('✅ Dependencies installed', 'success');\n this.log('');\n }\n\n private checkCICDVariables(): void {\n this.log('🔐 Checking CI/CD variables...', 'info');\n this.log('');\n this.log('Required variables (set in GitLab UI):');\n for (const varName of this.requiredEnvVars) {\n const exists = !!process.env[varName];\n const status = exists ? '✅' : '❌';\n this.log(` ${status} ${varName}${exists ? ' (set)' : ' (missing)'}`);\n }\n this.log('');\n this.log('To set these:');\n this.log(' 1. Go to: Settings → CI/CD → Variables');\n this.log(' 2. Add each variable');\n this.log(' 3. Mark as \\'Protected\\' and \\'Masked\\'');\n this.log('');\n }\n\n private checkWebhooks(): void {\n this.log('🔗 Webhooks to configure:', 'info');\n this.log('');\n this.log('Webhook 1: Milestone Events');\n this.log(' URL: https://your-webhook-endpoint.com/milestone');\n this.log(' Trigger: Milestone events');\n this.log('');\n this.log('Webhook 2: Push Events');\n this.log(' URL: https://your-webhook-endpoint.com/push');\n this.log(' Trigger: Push events (development branch)');\n this.log('');\n this.log('To configure:');\n this.log(' Go to: Settings → Webhooks');\n this.log('');\n }\n\n private async runTests(): Promise<void> {\n this.log('🧪 Running tests...', 'info');\n try {\n this.exec('npm test', { silent: false });\n this.log('✅ All tests passing', 'success');\n } catch {\n this.log('❌ Tests failed', 'error');\n throw new Error('Tests failed');\n }\n }\n}\n\n/**\n * Main Setup Command\n */\nexport const setupCommand = new Command('setup')\n .description('Setup OSSA project tools and automation')\n .option('-f, --force', 'Force overwrite existing configuration')\n .option('-v, --verbose', 'Verbose output');\n\n/**\n * Branch Protection Subcommand\n */\nconst branchProtectionSubcommand = new Command('branch-protection')\n .alias('bp')\n .description('Setup git hooks to prevent checking out main/development locally')\n .option('-f, --force', 'Force overwrite existing hooks')\n .option('-v, --verbose', 'Verbose output')\n .action(async (options: { force?: boolean; verbose?: boolean }) => {\n try {\n const validated = SetupOptionsSchema.parse(options);\n const service = new BranchProtectionService();\n await service.setup(validated);\n } catch (error) {\n if (error instanceof z.ZodError) {\n console.error(chalk.red('Validation error:'), error.issues);\n process.exit(1);\n }\n console.error(chalk.red('Error:'), error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n/**\n * Release Automation Subcommand\n */\nconst releaseAutomationSubcommand = new Command('release-automation')\n .alias('ra')\n .description('Setup release automation (dependencies, CI/CD variables, webhooks)')\n .option('-f, --force', 'Force setup even if checks fail')\n .option('-v, --verbose', 'Verbose output')\n .action(async (options: { force?: boolean; verbose?: boolean }) => {\n try {\n const validated = SetupOptionsSchema.parse(options);\n const service = new ReleaseAutomationService();\n await service.setup(validated);\n } catch (error) {\n if (error instanceof z.ZodError) {\n console.error(chalk.red('Validation error:'), error.issues);\n process.exit(1);\n }\n console.error(chalk.red('Error:'), error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n// Register subcommands\nsetupCommand.addCommand(branchProtectionSubcommand);\nsetupCommand.addCommand(releaseAutomationSubcommand);\n\n","usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/sync.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/commands/validate.command.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/cli/index.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/di-container.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/index.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/repositories/manifest.repository.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/repositories/schema.repository.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/generation.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/github-sync/github-client.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/github-sync/gitlab-client.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/github-sync/schemas.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/github-sync/sync.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/gitlab-agent.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/migration.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/release-automation/base-crud.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/release-automation/index.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/release-automation/merge-request.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/release-automation/milestone.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/release-automation/release.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/release-automation/schemas/release.schema.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/release-automation/tag.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/release-automation/webhook.service.ts","messages":[{"ruleId":"@typescript-eslint/no-unused-vars","severity":1,"message":"'project' is assigned a value but never used.","line":50,"column":15,"nodeType":null,"messageId":"unusedVar","endLine":50,"endColumn":22},{"ruleId":"@typescript-eslint/no-unused-vars","severity":1,"message":"'project' is assigned a value but never used.","line":117,"column":13,"nodeType":null,"messageId":"unusedVar","endLine":117,"endColumn":20},{"ruleId":"@typescript-eslint/no-unused-vars","severity":1,"message":"'project' is assigned a value but never used.","line":145,"column":13,"nodeType":null,"messageId":"unusedVar","endLine":145,"endColumn":20}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Webhook Service\n * Handles GitLab webhooks with Zod validation\n */\n\nimport {\n MilestoneWebhookPayloadSchema,\n PushWebhookPayloadSchema,\n WebhookResponseSchema,\n type MilestoneWebhookPayload,\n type PushWebhookPayload,\n type WebhookResponse,\n} from './schemas/release.schema.js';\nimport { ReleaseService } from './release.service.js';\nimport { MilestoneService } from './milestone.service.js';\nimport { TagService } from './tag.service.js';\nimport { MergeRequestService } from './merge-request.service.js';\n\n/**\n * Webhook Service\n * DRY: Centralized webhook handling\n */\nexport class WebhookService {\n private releaseService: ReleaseService;\n private milestoneService: MilestoneService;\n private tagService: TagService;\n private mergeRequestService: MergeRequestService;\n\n constructor(\n gitlabToken: string,\n projectId: string | number = process.env.CI_PROJECT_ID || ''\n ) {\n this.releaseService = new ReleaseService(gitlabToken, projectId);\n this.milestoneService = new MilestoneService(gitlabToken, projectId);\n this.tagService = new TagService(gitlabToken, projectId);\n this.mergeRequestService = new MergeRequestService(gitlabToken, projectId);\n }\n\n /**\n * Handle milestone webhook\n */\n async handleMilestoneWebhook(\n payload: unknown\n ): Promise<WebhookResponse> {\n try {\n // Validate payload with Zod\n const validated = MilestoneWebhookPayloadSchema.parse(payload);\n const actions: WebhookResponse['actions'] = [];\n\n const { project, object_attributes: milestone } = validated;\n\n // Determine if this is a create or close event\n const isNewMilestone =\n milestone.state === 'active' &&\n new Date(milestone.created_at).getTime() ===\n new Date(milestone.updated_at).getTime();\n\n if (isNewMilestone) {\n // Milestone created - create dev tag and branch\n const action = await this.handleMilestoneCreate(validated);\n if (action) actions.push(action);\n } else if (milestone.state === 'closed') {\n // Milestone closed - create RC\n const action = await this.handleMilestoneClose(validated);\n if (action) actions.push(action);\n }\n\n return WebhookResponseSchema.parse({\n success: true,\n message: `Milestone ${milestone.title} processed`,\n actions,\n });\n } catch (error) {\n return WebhookResponseSchema.parse({\n success: false,\n message: `Webhook processing failed: ${error}`,\n actions: [],\n });\n }\n }\n\n /**\n * Handle push webhook\n */\n async handlePushWebhook(payload: unknown): Promise<WebhookResponse> {\n try {\n // Validate payload with Zod\n const validated = PushWebhookPayloadSchema.parse(payload);\n const actions: WebhookResponse['actions'] = [];\n\n // Only process development branch pushes\n if (validated.ref === 'refs/heads/development') {\n const action = await this.handleDevelopmentPush(validated);\n if (action) actions.push(action);\n }\n\n return WebhookResponseSchema.parse({\n success: true,\n message: 'Push webhook processed',\n actions,\n });\n } catch (error) {\n return WebhookResponseSchema.parse({\n success: false,\n message: `Webhook processing failed: ${error}`,\n actions: [],\n });\n }\n }\n\n /**\n * Handle milestone creation\n */\n private async handleMilestoneCreate(\n payload: MilestoneWebhookPayload\n ): Promise<{ type: string; status: string; details?: Record<string, unknown> } | null> {\n const { project, object_attributes: milestone } = payload;\n const version = milestone.title.replace(/^v/, '');\n\n // Create initial dev tag\n const devTag = `v${version}-dev.0`;\n await this.tagService.create({\n name: devTag,\n ref: 'development',\n message: `Initial dev tag for ${milestone.title}`,\n });\n\n return {\n type: 'milestone_created',\n status: 'success',\n details: {\n milestoneId: milestone.id,\n tag: devTag,\n version,\n },\n };\n }\n\n /**\n * Handle milestone closure\n */\n private async handleMilestoneClose(\n payload: MilestoneWebhookPayload\n ): Promise<{ type: string; status: string; details?: Record<string, unknown> } | null> {\n const { project, object_attributes: milestone } = payload;\n const version = milestone.title.replace(/^v/, '');\n\n // Get milestone statistics\n const milestoneData = await this.milestoneService.read(milestone.id);\n if (!milestoneData) {\n throw new Error(`Milestone ${milestone.id} not found`);\n }\n\n // Check all issues are closed\n if (milestoneData.statistics.openIssues > 0) {\n throw new Error(\n `Cannot create RC: ${milestoneData.statistics.openIssues} issues still open`\n );\n }\n\n // Create RC tag\n const rcTag = `v${version}-rc.1`;\n await this.tagService.create({\n name: rcTag,\n ref: 'development',\n message: `Release candidate for ${milestone.title}`,\n });\n\n // Create MR: development → main\n const mr = await this.mergeRequestService.create({\n sourceBranch: 'development',\n targetBranch: 'main',\n title: `Release ${milestone.title}`,\n description: `Release candidate ${rcTag} for milestone ${milestone.title}`,\n labels: ['release', 'automation'],\n milestoneId: milestone.id,\n });\n\n return {\n type: 'milestone_closed',\n status: 'success',\n details: {\n milestoneId: milestone.id,\n rcTag,\n mergeRequestId: mr.id,\n },\n };\n }\n\n /**\n * Handle development branch push\n */\n private async handleDevelopmentPush(\n payload: PushWebhookPayload\n ): Promise<{ type: string; status: string; details?: Record<string, unknown> } | null> {\n // Auto-increment dev tag\n // This would be implemented based on current version detection\n // For now, return success\n\n return {\n type: 'dev_tag_incremented',\n status: 'success',\n details: {\n branch: payload.ref,\n commits: payload.commits.length,\n },\n };\n }\n}\n\n","usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/runtime/claude/capability-mapper.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/runtime/claude/claude-adapter.ts","messages":[{"ruleId":"@typescript-eslint/no-unused-vars","severity":1,"message":"'options' is defined but never used. Allowed unused args must match /^_/u.","line":268,"column":5,"nodeType":null,"messageId":"unusedVar","endLine":268,"endColumn":12}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Claude Runtime Adapter\n * Runs OSSA agents using Anthropic's Claude API\n */\n\nimport Anthropic from '@anthropic-ai/sdk';\nimport { ManifestParser } from './manifest-parser.js';\nimport { CapabilityMapper } from './capability-mapper.js';\nimport type {\n OssaManifestWithAnthropic,\n ClaudeMessage,\n ClaudeRunOptions,\n ClaudeAdapterConfig,\n AgentInfo,\n ToolHandler,\n ClaudeTool,\n} from './types.js';\n\n/**\n * Claude adapter for executing OSSA agents\n */\nexport class ClaudeAdapter {\n private client: Anthropic;\n private parser: ManifestParser;\n private mapper: CapabilityMapper;\n private messages: ClaudeMessage[] = [];\n private conversationHistory: Anthropic.MessageParam[] = [];\n\n constructor(config: ClaudeAdapterConfig) {\n // Initialize Anthropic client\n this.client = new Anthropic({\n apiKey: config.apiKey || process.env.ANTHROPIC_API_KEY,\n });\n\n // Initialize parser and mapper\n this.parser = new ManifestParser(config.manifest);\n this.mapper = new CapabilityMapper();\n\n // Validate manifest\n const validation = this.parser.validate();\n if (!validation.valid) {\n throw new Error(\n `Invalid OSSA manifest: ${validation.errors.join(', ')}`\n );\n }\n\n // Check if Anthropic integration is enabled\n if (!this.parser.isAnthropicEnabled()) {\n console.warn(\n 'Warning: Anthropic extension is disabled in manifest'\n );\n }\n\n // Initialize tools\n this.initializeTools();\n }\n\n /**\n * Initialize tools from manifest\n */\n private initializeTools(): void {\n // Map Claude extension tools first (highest priority)\n const anthropicExt = this.parser.getAnthropicExtension();\n if (anthropicExt?.tools) {\n this.mapper.mapClaudeTools(anthropicExt.tools);\n }\n\n // Map OSSA spec tools\n const specTools = this.parser.getSpecTools();\n this.mapper.mapOssaTools(specTools);\n\n // Map MCP capabilities if any\n for (const tool of specTools) {\n if (tool.type === 'mcp' && tool.capabilities) {\n this.mapper.mapMcpCapabilities(tool.capabilities);\n } else if (tool.type === 'http') {\n this.mapper.mapHttpTool(tool);\n }\n }\n }\n\n /**\n * Register a tool handler\n */\n registerToolHandler(name: string, handler: ToolHandler): boolean {\n return this.mapper.registerToolHandler(name, handler);\n }\n\n /**\n * Execute a tool call\n */\n private async executeTool(\n name: string,\n input: Record<string, unknown>\n ): Promise<string> {\n const tool = this.mapper.getTool(name);\n if (!tool) {\n return JSON.stringify({\n error: `Tool '${name}' not found`,\n });\n }\n\n if (tool.handler) {\n try {\n return await tool.handler(input);\n } catch (error) {\n return JSON.stringify({\n error: `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n }\n\n // Default: return placeholder response\n return JSON.stringify({\n message: `Tool '${name}' executed`,\n input,\n note: 'No handler registered for this tool',\n });\n }\n\n /**\n * Initialize the conversation\n */\n initialize(): void {\n this.messages = [];\n this.conversationHistory = [];\n }\n\n /**\n * Send a message and get a response\n */\n async chat(\n userMessage: string,\n options?: ClaudeRunOptions\n ): Promise<string> {\n // Add user message to history\n this.conversationHistory.push({\n role: 'user',\n content: userMessage,\n });\n\n const tools = this.mapper.getClaudeTools();\n let turnCount = 0;\n const maxTurns = options?.maxTurns || 10;\n\n while (turnCount < maxTurns) {\n turnCount++;\n\n if (options?.verbose) {\n console.log(`\\n[Turn ${turnCount}/${maxTurns}]`);\n }\n\n // Call Claude API\n const response = await this.client.messages.create({\n model: this.parser.getModel(),\n max_tokens: this.parser.getMaxTokens(),\n temperature: this.parser.getTemperature(),\n system: this.parser.getSystemPrompt(),\n messages: this.conversationHistory,\n tools: tools.length > 0 ? tools : undefined,\n stop_sequences: this.parser.getStopSequences(),\n });\n\n if (options?.verbose) {\n console.log(\n ` Model: ${response.model}, Stop: ${response.stop_reason}`\n );\n console.log(\n ` Tokens: ${response.usage.input_tokens} in, ${response.usage.output_tokens} out`\n );\n }\n\n // Add assistant response to history\n this.conversationHistory.push({\n role: 'assistant',\n content: response.content,\n });\n\n // Check if we need to execute tools\n const toolUses = response.content.filter(\n (block) => block.type === 'tool_use'\n );\n\n if (toolUses.length > 0) {\n if (options?.verbose) {\n console.log(` [Executing ${toolUses.length} tool(s)...]`);\n }\n\n // Execute all tool calls\n const toolResults: Array<{\n type: 'tool_result';\n tool_use_id: string;\n content: string;\n }> = [];\n\n for (const toolUse of toolUses) {\n if (toolUse.type !== 'tool_use') continue;\n\n const { id, name, input } = toolUse;\n\n if (options?.verbose) {\n console.log(\n ` → ${name}(${JSON.stringify(input).substring(0, 100)}...)`\n );\n }\n\n const result = await this.executeTool(\n name,\n input as Record<string, unknown>\n );\n\n if (options?.verbose) {\n console.log(\n ` ← ${result.substring(0, 100)}${result.length > 100 ? '...' : ''}`\n );\n }\n\n toolResults.push({\n type: 'tool_result',\n tool_use_id: id,\n content: result,\n });\n }\n\n // Add tool results to conversation\n this.conversationHistory.push({\n role: 'user',\n content: toolResults,\n });\n\n // Continue the loop to get final response\n continue;\n }\n\n // Check if we have a text response\n const textBlocks = response.content.filter(\n (block) => block.type === 'text'\n );\n\n if (textBlocks.length > 0) {\n return textBlocks\n .map((block) => (block.type === 'text' ? block.text : ''))\n .join('\\n');\n }\n\n // No text and no tool calls - unexpected\n if (response.stop_reason === 'end_turn') {\n return '';\n }\n\n // Max tokens or stop sequence reached\n if (\n response.stop_reason === 'max_tokens' ||\n response.stop_reason === 'stop_sequence'\n ) {\n return '[Response truncated due to length limit]';\n }\n }\n\n return '[Max turns reached without completion]';\n }\n\n /**\n * Stream a response (for future implementation)\n */\n async chatStream(\n userMessage: string,\n options?: ClaudeRunOptions\n ): Promise<AsyncIterable<string>> {\n // Add user message to history\n this.conversationHistory.push({\n role: 'user',\n content: userMessage,\n });\n\n const tools = this.mapper.getClaudeTools();\n\n const stream = await this.client.messages.stream({\n model: this.parser.getModel(),\n max_tokens: this.parser.getMaxTokens(),\n temperature: this.parser.getTemperature(),\n system: this.parser.getSystemPrompt(),\n messages: this.conversationHistory,\n tools: tools.length > 0 ? tools : undefined,\n });\n\n // Return async generator\n return (async function* () {\n for await (const chunk of stream) {\n if (\n chunk.type === 'content_block_delta' &&\n chunk.delta.type === 'text_delta'\n ) {\n yield chunk.delta.text;\n }\n }\n })();\n }\n\n /**\n * Get agent information\n */\n getAgentInfo(): AgentInfo {\n const metadata = this.parser.getMetadata();\n const tools = Array.from(this.mapper.getTools().keys());\n\n return {\n name: metadata.name,\n model: this.parser.getModel(),\n tools,\n provider: 'anthropic',\n };\n }\n\n /**\n * Get conversation history\n */\n getConversationHistory(): Anthropic.MessageParam[] {\n return this.conversationHistory;\n }\n\n /**\n * Clear conversation history\n */\n clearHistory(): void {\n this.conversationHistory = [];\n this.messages = [];\n }\n\n /**\n * Get available tools\n */\n getTools(): ClaudeTool[] {\n return this.mapper.getClaudeTools();\n }\n\n /**\n * Get the Anthropic client (for advanced usage)\n */\n getClient(): Anthropic {\n return this.client;\n }\n\n /**\n * Get the manifest parser\n */\n getParser(): ManifestParser {\n return this.parser;\n }\n\n /**\n * Get the capability mapper\n */\n getMapper(): CapabilityMapper {\n return this.mapper;\n }\n\n /**\n * Create a Claude adapter from a manifest file\n */\n static async fromFile(\n manifestPath: string,\n apiKey?: string\n ): Promise<ClaudeAdapter> {\n const fs = await import('fs/promises');\n const manifestContent = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(\n manifestContent\n ) as OssaManifestWithAnthropic;\n\n return new ClaudeAdapter({\n manifest,\n apiKey,\n });\n }\n\n /**\n * Create a Claude adapter from a manifest object\n */\n static fromManifest(\n manifest: OssaManifestWithAnthropic,\n apiKey?: string\n ): ClaudeAdapter {\n return new ClaudeAdapter({\n manifest,\n apiKey,\n });\n }\n}\n","usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/runtime/claude/manifest-parser.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/runtime/claude/types.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/runtime/openai.adapter.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validation.service.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/anthropic.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/autogen.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/crewai.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/cursor.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/index.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/langchain.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/langflow.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/langgraph.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/llamaindex.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/openai.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/services/validators/vercel-ai.validator.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/types/index.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/types/openapi-extensions.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/utils/index.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/Users/flux423/Sites/LLM/openstandardagents/src/utils/version.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]}]
@@ -1,7 +1,7 @@
1
1
  # Example: ADK Code Review Workflow with OSSA Agents
2
2
  # This demonstrates how OSSA agents work with ADK orchestration patterns
3
3
 
4
- apiVersion: '@ossa/v0.1.9'
4
+ apiVersion: ossa/v0.2.9
5
5
  kind: Workflow
6
6
  metadata:
7
7
  name: code-review-workflow
@@ -1,7 +1,7 @@
1
1
  # Example: ADK Customer Support System with OSSA Agents
2
2
  # Demonstrates Coordinator and Dispatcher patterns
3
3
 
4
- apiVersion: '@ossa/v0.1.9'
4
+ apiVersion: ossa/v0.2.9
5
5
  kind: Workflow
6
6
  metadata:
7
7
  name: customer-support-system
@@ -1,7 +1,7 @@
1
1
  # Example: ADK Data Processing Pipeline with OSSA Agents
2
2
  # Demonstrates LoopAgent and ConditionalAgent patterns
3
3
 
4
- apiVersion: '@ossa/v0.1.9'
4
+ apiVersion: ossa/v0.2.9
5
5
  kind: Workflow
6
6
  metadata:
7
7
  name: data-processing-pipeline
@@ -0,0 +1,136 @@
1
+ # OSSA v0.2.9 - Reasoning Agent Example
2
+ # Demonstrates: reasoning strategies, prompt templates, knowledge graph
3
+ apiVersion: ossa/v0.2.9
4
+ kind: Agent
5
+ metadata:
6
+ name: research-analyst
7
+ version: 1.0.0
8
+ description: Research analyst with ReAct reasoning, knowledge graph, and versioned prompts
9
+ labels:
10
+ domain: research
11
+ capability: analysis
12
+ reasoning: react
13
+
14
+ spec:
15
+ taxonomy:
16
+ domain: research
17
+ subdomain: analysis
18
+ capability: synthesis
19
+
20
+ role: |
21
+ You are a research analyst specializing in synthesizing complex information.
22
+ Use the ReAct reasoning pattern: Thought → Action → Observation.
23
+
24
+ llm:
25
+ provider: anthropic
26
+ model: claude-sonnet-4-20250514
27
+ parameters:
28
+ temperature: 0.3
29
+ max_tokens: 4096
30
+
31
+ # NEW: Reasoning configuration
32
+ reasoning:
33
+ strategy: react
34
+ max_steps: 15
35
+ trace_enabled: true
36
+ export_format: otel
37
+ self_reflection:
38
+ enabled: true
39
+ trigger: on_uncertainty
40
+ threshold: 0.6
41
+
42
+ # NEW: Prompt management with versioning
43
+ prompts:
44
+ system:
45
+ template: prompts/research-system-v2.md
46
+ version: "2.1.0"
47
+ variables:
48
+ domain: "market-research"
49
+ output_format: "structured-report"
50
+ few_shot_examples:
51
+ - input: "Analyze the competitive landscape for AI agents"
52
+ output: |
53
+ Thought: I need to identify key players, their offerings, and market positioning.
54
+ Action: search_knowledge_graph for entities with type=AIVendor
55
+ Observation: Found 12 major vendors including OpenAI, Anthropic, Google...
56
+ - input: "What are the emerging trends in agent frameworks?"
57
+ output: |
58
+ Thought: I should look for recent publications and framework releases.
59
+ Action: query_research_db for papers published > 2024-01
60
+ Observation: 47 relevant papers found, clustering around multi-agent and RAG...
61
+
62
+ # NEW: Knowledge graph integration
63
+ knowledge_graph:
64
+ enabled: true
65
+ provider: neo4j
66
+ connection:
67
+ endpoint: bolt://kg.internal:7687
68
+ database: research_graph
69
+ credentials_ref: KG_CREDENTIALS
70
+ schema:
71
+ entity_types:
72
+ - Company
73
+ - Product
74
+ - Technology
75
+ - Publication
76
+ - Person
77
+ relationship_types:
78
+ - COMPETES_WITH
79
+ - DEVELOPS
80
+ - PUBLISHES
81
+ - CITES
82
+ - EMPLOYS
83
+ sync:
84
+ mode: real_time
85
+ batch_size: 50
86
+ interval: 30s
87
+
88
+ tools:
89
+ - name: search_knowledge_graph
90
+ description: Query the knowledge graph for entity relationships
91
+ source:
92
+ type: mcp
93
+ uri: mcp://kg-service/query
94
+ input:
95
+ type: object
96
+ required: [query]
97
+ properties:
98
+ query:
99
+ type: string
100
+ description: Cypher query or natural language search
101
+
102
+ - name: query_research_db
103
+ description: Search research papers and publications
104
+ source:
105
+ type: mcp
106
+ uri: mcp://research-service/search
107
+
108
+ autonomy:
109
+ level: assisted
110
+ escalation:
111
+ enabled: true
112
+ triggers:
113
+ - low_confidence
114
+ - external_data_required
115
+
116
+ observability:
117
+ tracing:
118
+ enabled: true
119
+ provider: otel
120
+ sampling_rate: 1.0
121
+ metrics:
122
+ enabled: true
123
+ custom:
124
+ - name: reasoning_steps_total
125
+ type: counter
126
+ description: Total reasoning steps executed
127
+ - name: kg_queries_total
128
+ type: counter
129
+ description: Knowledge graph queries executed
130
+ logging:
131
+ level: debug
132
+
133
+ constraints:
134
+ max_tokens_per_turn: 8000
135
+ max_turns: 20
136
+ timeout_seconds: 300
@@ -1,7 +1,7 @@
1
1
  # Hybrid Model Strategy: Fast Local Planning + Premium Development
2
2
  # Demonstrates using fast Ollama models for planning agents and Claude for development
3
3
 
4
- apiVersion: ossa.io/v0.1.9
4
+ apiVersion: ossa/v0.2.9
5
5
  kind: Workflow
6
6
  metadata:
7
7
  name: hybrid-development-workflow
@@ -1,4 +1,4 @@
1
- apiVersion: ossa.io/v0.1.9
1
+ apiVersion: ossa/v0.2.9
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: code-quality-critic
@@ -1,4 +1,4 @@
1
- apiVersion: ossa.io/v0.1.9
1
+ apiVersion: ossa/v0.2.9
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: policy-compliance-governor
@@ -1,4 +1,4 @@
1
- apiVersion: ossa.io/v0.1.9
1
+ apiVersion: ossa/v0.2.9
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: multi-system-integrator
@@ -1,4 +1,4 @@
1
- apiVersion: ossa.io/v0.1.9
1
+ apiVersion: ossa/v0.2.9
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: decision-arbitration-judge
@@ -1,4 +1,4 @@
1
- apiVersion: ossa.io/v0.1.9
1
+ apiVersion: ossa/v0.2.9
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: system-performance-monitor
@@ -20,7 +20,7 @@
20
20
  # ============================================================================
21
21
 
22
22
  # OSSA manifest version - defines the schema and features available
23
- apiVersion: ossa.io/v0.1.9
23
+ apiVersion: ossa/v0.2.9
24
24
 
25
25
  # Kind declares this as an Agent manifest (vs. Bridge, Tool, etc.)
26
26
  kind: Agent
@@ -1,4 +1,4 @@
1
- apiVersion: ossa.io/v0.1.9-alpha.1
1
+ apiVersion: ossa/v0.2.9-alpha.1
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: financial-data-processor
@@ -1,4 +1,4 @@
1
- apiVersion: ossa.io/v0.1.9
1
+ apiVersion: ossa/v0.2.9
2
2
  kind: Agent
3
3
  metadata:
4
4
  name: data-processing-worker
@@ -0,0 +1,100 @@
1
+ {
2
+ "apiVersion": "ossa/v0.2.9",
3
+ "kind": "Agent",
4
+ "metadata": {
5
+ "name": "code-assistant",
6
+ "version": "1.0.0",
7
+ "description": "AI coding agent with agents.md repository guidance",
8
+ "labels": {
9
+ "domain": "development",
10
+ "framework": "agents-md"
11
+ }
12
+ },
13
+ "spec": {
14
+ "role": "You are an expert software developer. Follow the project's coding standards and conventions. Write clean, maintainable code with proper tests.",
15
+ "llm": {
16
+ "provider": "openai",
17
+ "model": "gpt-4o",
18
+ "temperature": 0.2
19
+ },
20
+ "tools": [
21
+ {
22
+ "type": "mcp",
23
+ "name": "filesystem",
24
+ "server": "filesystem",
25
+ "capabilities": [
26
+ { "name": "read_file" },
27
+ { "name": "write_file" },
28
+ { "name": "list_directory" }
29
+ ]
30
+ },
31
+ {
32
+ "type": "mcp",
33
+ "name": "git",
34
+ "server": "git",
35
+ "capabilities": [
36
+ { "name": "status" },
37
+ { "name": "diff" },
38
+ { "name": "commit" }
39
+ ]
40
+ }
41
+ ],
42
+ "constraints": {
43
+ "performance": {
44
+ "maxLatencySeconds": 30,
45
+ "timeoutSeconds": 120
46
+ }
47
+ },
48
+ "autonomy": {
49
+ "level": "supervised",
50
+ "approval_required": true,
51
+ "allowed_actions": ["read", "write", "test"],
52
+ "blocked_actions": ["deploy", "delete"]
53
+ }
54
+ },
55
+ "extensions": {
56
+ "agents_md": {
57
+ "enabled": true,
58
+ "generate": true,
59
+ "output_path": "AGENTS.md",
60
+ "sections": {
61
+ "dev_environment": {
62
+ "enabled": true,
63
+ "source": "spec.tools",
64
+ "append": "- Use `pnpm` for package management\n- Run `pnpm dev` to start development server"
65
+ },
66
+ "testing": {
67
+ "enabled": true,
68
+ "custom": "Run `pnpm test` before committing.\nEnsure all tests pass and coverage is maintained.\nUse Jest for unit tests and Playwright for E2E."
69
+ },
70
+ "pr_instructions": {
71
+ "enabled": true,
72
+ "source": "spec.autonomy",
73
+ "custom": "- Use conventional commits format\n- Include tests for new features\n- Update documentation as needed\n- Request review from at least one team member"
74
+ },
75
+ "code_style": {
76
+ "enabled": true,
77
+ "custom": "- TypeScript strict mode enabled\n- ESLint + Prettier for formatting\n- Prefer functional programming patterns\n- Use descriptive variable names"
78
+ }
79
+ },
80
+ "sync": {
81
+ "on_manifest_change": true,
82
+ "include_comments": true
83
+ },
84
+ "mapping": {
85
+ "tools_to_dev_environment": true,
86
+ "constraints_to_testing": true,
87
+ "autonomy_to_pr_instructions": true
88
+ },
89
+ "cursor_integration": true
90
+ },
91
+ "cursor": {
92
+ "enabled": true,
93
+ "agent_type": "composer",
94
+ "workspace_config": {
95
+ "context_files": ["src/**/*.ts", "tests/**/*.ts"],
96
+ "ignore_patterns": ["node_modules/**", "dist/**"]
97
+ }
98
+ }
99
+ }
100
+ }
@@ -0,0 +1,180 @@
1
+ # OSSA Agent Manifest with agents.md Extension
2
+ # Demonstrates monorepo support with nested AGENTS.md files
3
+ apiVersion: ossa/v0.2.9
4
+ kind: Agent
5
+ metadata:
6
+ name: monorepo-assistant
7
+ version: 1.0.0
8
+ description: Multi-package monorepo coding agent with nested agents.md support
9
+ labels:
10
+ domain: development
11
+ framework: agents-md
12
+ architecture: monorepo
13
+
14
+ spec:
15
+ role: |
16
+ You are an expert developer working on a monorepo containing multiple packages.
17
+ Each package has its own conventions and testing requirements.
18
+ Always check the local AGENTS.md file in the current directory for package-specific guidance.
19
+
20
+ llm:
21
+ provider: anthropic
22
+ model: claude-3-5-sonnet-20241022
23
+ temperature: 0.1
24
+
25
+ tools:
26
+ - type: mcp
27
+ name: filesystem
28
+ server: filesystem
29
+ capabilities:
30
+ - name: read_file
31
+ - name: write_file
32
+ - name: search_files
33
+ - type: mcp
34
+ name: git
35
+ server: git
36
+ capabilities:
37
+ - name: status
38
+ - name: diff
39
+ - name: log
40
+ - type: http
41
+ name: npm-registry
42
+ endpoint: https://registry.npmjs.org
43
+ capabilities:
44
+ - name: search_packages
45
+
46
+ constraints:
47
+ cost:
48
+ maxTokensPerDay: 100000
49
+ maxTokensPerRequest: 8000
50
+ performance:
51
+ maxLatencySeconds: 60
52
+ timeoutSeconds: 180
53
+
54
+ autonomy:
55
+ level: autonomous
56
+ approval_required: false
57
+ allowed_actions:
58
+ - read
59
+ - write
60
+ - test
61
+ - lint
62
+ - format
63
+ blocked_actions:
64
+ - publish
65
+ - deploy
66
+ - delete_branch
67
+
68
+ extensions:
69
+ agents_md:
70
+ enabled: true
71
+ generate: true
72
+ output_path: AGENTS.md
73
+
74
+ sections:
75
+ dev_environment:
76
+ enabled: true
77
+ title: "Development Environment"
78
+ custom: |
79
+ - This is a pnpm workspace monorepo
80
+ - Run `pnpm install` from root to install all dependencies
81
+ - Use `pnpm -F <package>` to run commands in specific packages
82
+ - Turborepo is used for task orchestration
83
+
84
+ testing:
85
+ enabled: true
86
+ title: "Testing Requirements"
87
+ custom: |
88
+ - Run `pnpm test` to execute all tests
89
+ - Run `pnpm -F <package> test` for package-specific tests
90
+ - Coverage threshold is 80% for all packages
91
+ - E2E tests are in `apps/web/e2e/`
92
+
93
+ pr_instructions:
94
+ enabled: true
95
+ title: "Pull Request Guidelines"
96
+ custom: |
97
+ - Use conventional commits: `feat:`, `fix:`, `chore:`, etc.
98
+ - PRs must pass CI checks before merge
99
+ - Changesets are required for publishable packages
100
+ - Run `pnpm changeset` to create a changeset
101
+
102
+ code_style:
103
+ enabled: true
104
+ custom: |
105
+ - TypeScript strict mode in all packages
106
+ - Biome for linting and formatting
107
+ - Run `pnpm lint` and `pnpm format` before committing
108
+
109
+ custom:
110
+ - title: "Package Structure"
111
+ content: |
112
+ - `apps/` - Application packages (web, api, cli)
113
+ - `packages/` - Shared library packages
114
+ - `tooling/` - Build and development tools
115
+
116
+ sync:
117
+ on_manifest_change: true
118
+ include_comments: true
119
+ watch: false
120
+
121
+ mapping:
122
+ tools_to_dev_environment: true
123
+ constraints_to_testing: true
124
+ autonomy_to_pr_instructions: true
125
+
126
+ # Nested AGENTS.md files for each package
127
+ nested_files:
128
+ - path: apps/web
129
+ inherit: true
130
+ sections:
131
+ dev_environment:
132
+ custom: |
133
+ - Next.js 14 application
134
+ - Run `pnpm -F web dev` to start dev server
135
+ - Uses App Router and Server Components
136
+ testing:
137
+ custom: |
138
+ - Playwright for E2E tests
139
+ - React Testing Library for component tests
140
+ - Run `pnpm -F web test:e2e` for E2E
141
+
142
+ - path: apps/api
143
+ inherit: true
144
+ sections:
145
+ dev_environment:
146
+ custom: |
147
+ - Hono API server
148
+ - Run `pnpm -F api dev` to start
149
+ - OpenAPI spec in `openapi.yaml`
150
+ testing:
151
+ custom: |
152
+ - Vitest for unit tests
153
+ - Integration tests require Docker
154
+ - Run `docker-compose up -d` first
155
+
156
+ - path: packages/ui
157
+ inherit: true
158
+ sections:
159
+ dev_environment:
160
+ custom: |
161
+ - Shared React component library
162
+ - Run `pnpm -F ui storybook` for component preview
163
+ - Uses Radix UI primitives
164
+ testing:
165
+ custom: |
166
+ - Storybook visual tests
167
+ - Run `pnpm -F ui test:visual`
168
+
169
+ cursor:
170
+ enabled: true
171
+ agent_type: composer
172
+ workspace_config:
173
+ context_files:
174
+ - "**/*.ts"
175
+ - "**/*.tsx"
176
+ - "**/package.json"
177
+ ignore_patterns:
178
+ - "**/node_modules/**"
179
+ - "**/dist/**"
180
+ - "**/.turbo/**"