@bluefly/openstandardagents 0.4.9 → 0.5.1
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/.version.json +3 -3
- package/CHANGELOG.md +35 -4
- package/README.md +77 -62
- package/dist/.version.json +3 -3
- package/dist/adapters/a2a/a2a-protocol.js +4 -2
- package/dist/adapters/a2a/a2a-tool.js +4 -2
- package/dist/adapters/a2a/mcp-integration.d.ts +2 -1
- package/dist/adapters/a2a/mcp-integration.js +6 -3
- package/dist/adapters/browser/browser-exporter.d.ts +26 -0
- package/dist/adapters/browser/browser-exporter.js +73 -0
- package/dist/adapters/browser/browser-runner.d.ts +23 -0
- package/dist/adapters/browser/browser-runner.js +46 -0
- package/dist/adapters/browser/index.d.ts +9 -0
- package/dist/adapters/browser/index.js +9 -0
- package/dist/adapters/claude-code/adapter.js +2 -2
- package/dist/adapters/docker/generators.js +19 -19
- package/dist/adapters/docker/index.d.ts +2 -0
- package/dist/adapters/docker/index.js +2 -0
- package/dist/adapters/docker/openclaw-bridge.d.ts +57 -0
- package/dist/adapters/docker/openclaw-bridge.js +173 -0
- package/dist/adapters/drupal/generator.js +76 -76
- package/dist/adapters/drupal/index.d.ts +1 -0
- package/dist/adapters/drupal/index.js +2 -0
- package/dist/adapters/drupal/twig-renderer.d.ts +23 -0
- package/dist/adapters/drupal/twig-renderer.js +99 -0
- package/dist/adapters/gitlab/agent-generator.js +2 -1
- package/dist/adapters/openai-agents/adapter.js +2 -2
- package/dist/api/index.js +2 -1
- package/dist/api/routes/mcp.router.js +3 -1
- package/dist/api/routes/wizard.router.js +3 -1
- package/dist/cli/commands/agent/discover-type.command.js +1 -1
- package/dist/cli/commands/agent-card.command.js +37 -10
- package/dist/cli/commands/agents-sync.command.d.ts +2 -2
- package/dist/cli/commands/agents-sync.command.js +27 -17
- package/dist/cli/commands/catalog/config.js +1 -1
- package/dist/cli/commands/catalog/validate.command.js +2 -2
- package/dist/cli/commands/config.command.js +2 -2
- package/dist/cli/commands/daemon.command.js +32 -8
- package/dist/cli/commands/discover.d.ts +1 -1
- package/dist/cli/commands/discover.js +16 -8
- package/dist/cli/commands/economics.command.d.ts +9 -0
- package/dist/cli/commands/economics.command.js +113 -0
- package/dist/cli/commands/export.command.js +6 -3
- package/dist/cli/commands/mcp.command.js +3 -1
- package/dist/cli/commands/memory.command.d.ts +18 -0
- package/dist/cli/commands/memory.command.js +168 -0
- package/dist/cli/commands/publish.command.js +7 -4
- package/dist/cli/commands/serve-builder-routes.js +1 -1
- package/dist/cli/commands/usie-skills.command.d.ts +24 -0
- package/dist/cli/commands/usie-skills.command.js +297 -0
- package/dist/cli/commands/validate.command.js +8 -1
- package/dist/cli/commands/verify.d.ts +3 -3
- package/dist/cli/commands/verify.js +12 -6
- package/dist/cli/commands/workspace.command.d.ts +1 -0
- package/dist/cli/commands/workspace.command.js +28 -4
- package/dist/cli/index.js +12 -0
- package/dist/cli/schema-driven/schema-loader.js +5 -5
- package/dist/cli/workspace-validate.d.ts +23 -0
- package/dist/cli/workspace-validate.js +117 -0
- package/dist/data/platform-matrix.js +1 -4
- package/dist/generated/types.d.ts +97 -97
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/mcp-server/index.js +658 -982
- package/dist/mesh/discovery-gkg.d.ts +26 -0
- package/dist/mesh/discovery-gkg.js +92 -0
- package/dist/messenger/Handler/AgentBatchHandler.js +3 -2
- package/dist/messenger/Handler/AgentExecutionHandler.js +6 -1
- package/dist/package.json +43 -14
- package/dist/sdks/shared/types.d.ts +1 -1
- package/dist/services/agent-card-generator.js +6 -2
- package/dist/services/daemon/audit-log.service.js +3 -1
- package/dist/services/daemon/execution.service.js +8 -4
- package/dist/services/daemon/fs-watcher.service.js +6 -7
- package/dist/services/daemon/pairing.service.js +2 -1
- package/dist/services/daemon/skill-aggregator.service.js +105 -21
- package/dist/services/daemon/sse-endpoints.js +1 -1
- package/dist/services/daemon/ws-server.js +10 -3
- package/dist/services/export/langchain/langchain-exporter.js +2 -2
- package/dist/services/export/langchain/memory-generator.js +2 -2
- package/dist/services/export/testing/test-generator.js +1 -1
- package/dist/services/governance/cedar-provider.js +12 -8
- package/dist/services/governance/cedar-validator.service.js +1 -1
- package/dist/services/mcp/bridge.service.js +40 -9
- package/dist/services/openapi-extensions-validation.d.ts +20 -0
- package/dist/services/openapi-extensions-validation.js +193 -0
- package/dist/services/release-automation/merge-request.service.d.ts +4 -4
- package/dist/services/release-automation/release-buttons.js +3 -3
- package/dist/services/release-automation/schemas/release.schema.d.ts +3 -3
- package/dist/services/runtime/openai.adapter.d.ts +46 -13
- package/dist/services/runtime/openai.adapter.js +169 -131
- package/dist/services/skill-registry.service.d.ts +1 -1
- package/dist/services/skills-pipeline/skills-research.service.js +47 -7
- package/dist/services/taxonomy-service.d.ts +3 -3
- package/dist/services/trust/trust.service.js +6 -4
- package/dist/services/validation-zod.service.js +3 -22
- package/dist/services/validators/index.d.ts +1 -0
- package/dist/services/validators/index.js +1 -0
- package/dist/services/validators/registry.d.ts +21 -0
- package/dist/services/validators/registry.js +42 -0
- package/dist/skills/test-skill/package.json +1 -1
- package/dist/spec/extensions/cognition.schema.json +87 -0
- package/dist/spec/extensions/role-manifest.md +188 -0
- package/dist/spec/layer4-economics/duadp-examples.json +44 -0
- package/dist/spec/v0.4/agent.schema.json +14 -0
- package/dist/spec/v0.4/extensions/mcp/README.md +1 -1
- package/dist/spec/v0.5/agent-builder-openapi.yaml +230 -0
- package/dist/spec/v0.5/agent.schema.json +34 -2
- package/dist/spec/v0.5/extensions/cognition/cognition.schema.json +78 -1
- package/dist/spec/v0.5/extensions/economics/context-pack.schema.json +91 -0
- package/dist/spec/v0.5/extensions/economics/execution-profile.schema.json +148 -0
- package/dist/spec/v0.5/extensions/economics/failure-semantics.schema.json +32 -0
- package/dist/spec/v0.5/extensions/economics/replay-packet.schema.json +120 -0
- package/dist/spec/v0.5/memory-hierarchy.yaml +120 -0
- package/dist/spec/v0.5/role.schema.json +268 -0
- package/dist/spec/v1/agent-card.schema.json +254 -0
- package/dist/types/cognition.zod.d.ts +312 -0
- package/dist/types/cognition.zod.js +223 -0
- package/dist/types/identity.zod.d.ts +5 -5
- package/dist/types/index.d.ts +54 -6
- package/dist/types/index.js +6 -2
- package/dist/types/personality.zod.d.ts +3 -3
- package/dist/types/role.d.ts +126 -0
- package/dist/types/role.js +38 -0
- package/dist/utils/http-client.d.ts +22 -0
- package/dist/utils/http-client.js +51 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/proxy-resolver.d.ts +36 -0
- package/dist/utils/proxy-resolver.js +59 -0
- package/dist/utils/user-agent.d.ts +11 -0
- package/dist/utils/user-agent.js +17 -0
- package/dist/validation/validator.js +1 -1
- package/dist/validation/version-compliance.js +1 -1
- package/examples/agents/01-customer-support-bot/agent.ossa.yaml +24 -31
- package/examples/agents/05-sales-assistant/agent.ossa.yaml +35 -23
- package/examples/agents/07-research-assistant/agent.ossa.yaml +27 -21
- package/examples/agents/10-meeting-assistant/agent.ossa.yaml +27 -35
- package/examples/agents/security-audit-agent.ossa.yaml +234 -0
- package/examples/agentscope/react-assistant/README.md +1 -1
- package/examples/agentscope/react-assistant/agent.ossa.yaml +37 -33
- package/examples/drupal/content-moderator.ossa.yaml +2 -2
- package/examples/drupal/drupal-contributor-agent/.eslintrc.json +58 -0
- package/examples/drupal/drupal-contributor-agent/.prettierrc.json +10 -0
- package/examples/drupal/drupal-contributor-agent/package.json +55 -0
- package/examples/drupal/drupal-contributor-agent/src/core/index.ts +10 -0
- package/examples/drupal/drupal-contributor-agent/src/index.ts +17 -0
- package/examples/drupal/drupal-contributor-agent/src/types/index.ts +180 -0
- package/examples/drupal/drupal-contributor-agent/tsconfig.json +36 -0
- package/examples/drupal/drupal-contributor.ossa.yaml +247 -0
- package/examples/export/langchain/production-agent-with-memory/README.md +1 -1
- package/examples/export/langchain/production-agent-with-memory/agent.ossa.yaml +13 -23
- package/examples/export/langchain/production-agent-with-streaming/agent.ossa.yaml +1 -15
- package/examples/export/langchain/production-agent-with-tools/agent.ossa.yaml +28 -29
- package/examples/getting-started/01-minimal-agent.ossa.yaml +1 -1
- package/examples/getting-started/02-agent-with-tools.ossa.yaml +1 -1
- package/examples/getting-started/03-agent-with-safety.ossa.yaml +1 -1
- package/examples/getting-started/04-agent-with-messaging.ossa.yaml +1 -1
- package/examples/getting-started/05-workflow-composition.ossa.yaml +1 -1
- package/examples/getting-started/README.md +3 -3
- package/examples/getting-started/hello-world-complete.ossa.yaml +1 -1
- package/examples/gitlab-agents/gitlab-ci-agent.ossa.yaml +221 -0
- package/examples/hierarchical-agent.ossa.yaml +10 -53
- package/examples/kagent/ossa-kagent-anthropic.ossa.yaml +2 -25
- package/examples/kagent/ossa-kagent-mcp-tools.ossa.yaml +2 -30
- package/examples/kagent/ossa-kagent-multi-tool.ossa.yaml +2 -18
- package/examples/kagent/ossa-kagent-poc.ossa.yaml +2 -16
- package/examples/pipeline-agent.ossa.yaml +3 -3
- package/examples/platform-specific/claude-code-subagent.yaml +1 -1
- package/examples/platform-specific/cursor-coding-agent.yaml +1 -1
- package/examples/platform-specific/warp-terminal-agent.yaml +1 -1
- package/examples/production-ready/01-customer-support-bot/agent.ossa.yaml +24 -31
- package/examples/production-ready/05-sales-assistant/agent.ossa.yaml +35 -23
- package/examples/production-ready/07-research-assistant/agent.ossa.yaml +27 -19
- package/examples/production-ready/10-meeting-assistant/agent.ossa.yaml +27 -35
- package/examples/roles/drupal-developer.role.yaml +37 -0
- package/examples/roles/platform-operator.role.yaml +28 -0
- package/examples/roles/security-auditor.role.yaml +27 -0
- package/examples/swarm-agent.ossa.yaml +13 -51
- package/examples/team-agent.ossa.yaml +12 -61
- package/examples/team-lead-teammate.ossa.yaml +12 -17
- package/openapi/agent-cognition-sessions.yaml +580 -0
- package/openapi/agent-communication.yaml +260 -212
- package/openapi/agent-crud.yaml +237 -207
- package/openapi/agent-discovery.yaml +119 -81
- package/openapi/agent-identity.yaml +219 -187
- package/openapi/agent-taxonomy.yaml +95 -38
- package/openapi/agents-md-service.yaml +103 -30
- package/openapi/cli/openapi.yaml +147 -40
- package/openapi/core/ossa-core-api.openapi.yaml +327 -271
- package/openapi/core/ossa-registry-api.openapi.yaml +299 -236
- package/openapi/core/ossa-registry.openapi.yaml +299 -159
- package/openapi/core/unified-agent-gateway.openapi.yaml +234 -170
- package/openapi/daemon-api.openapi.yaml +323 -181
- package/openapi/dev-cli/openapi.yaml +137 -113
- package/openapi/github-sync.yaml +62 -19
- package/openapi/marketplace-plugin.openapi.yaml +539 -466
- package/openapi/ossa-api.openapi.yaml +354 -213
- package/openapi/ossa-cli-enhancements.openapi.yaml +109 -90
- package/openapi/ossa-cli.yaml +260 -184
- package/openapi/protocols/sse-streams.yaml +66 -74
- package/openapi/protocols/websocket-events.yaml +61 -54
- package/openapi/reference-implementations/aiflow-bridge-api.openapi.yaml +37 -20
- package/openapi/reference-implementations/compliance-agent-api.openapi.yaml +35 -23
- package/openapi/reference-implementations/crewai-agent-api.openapi.yaml +29 -18
- package/openapi/reference-implementations/critic-agent-api.openapi.yaml +45 -19
- package/openapi/reference-implementations/document-analyzer-api.openapi.yaml +30 -24
- package/openapi/reference-implementations/drupal-agent-api.openapi.yaml +101 -50
- package/openapi/reference-implementations/getting-started-hello-world-api.openapi.yaml +33 -22
- package/openapi/reference-implementations/gitlab-ml-recommender-api.openapi.yaml +20 -16
- package/openapi/reference-implementations/governor-agent-api.openapi.yaml +41 -23
- package/openapi/reference-implementations/helm-generator.openapi.yaml +88 -46
- package/openapi/reference-implementations/integrator-agent-api.openapi.yaml +30 -20
- package/openapi/reference-implementations/judge-agent-api.openapi.yaml +22 -16
- package/openapi/reference-implementations/k8s-troubleshooter-api.openapi.yaml +32 -18
- package/openapi/reference-implementations/langchain-agent-api.openapi.yaml +32 -21
- package/openapi/reference-implementations/monitor-agent-api.openapi.yaml +34 -21
- package/openapi/reference-implementations/orchestrator-agent-api.openapi.yaml +49 -27
- package/openapi/reference-implementations/quickstart-support-agent-api.openapi.yaml +27 -19
- package/openapi/reference-implementations/self-evolving-ecosystem.openapi.yaml +427 -293
- package/openapi/reference-implementations/worker-agent-api.openapi.yaml +34 -23
- package/openapi/reference-implementations/workflow-orchestrator-api.openapi.yaml +35 -21
- package/openapi/release-automation.openapi.yaml +48 -14
- package/openapi/schemas/common/agent.yaml +30 -29
- package/openapi/schemas/common/economics.yaml +98 -0
- package/openapi/schemas/common/errors.yaml +13 -3
- package/openapi/schemas/common/metadata.yaml +22 -7
- package/openapi/schemas/common/pagination.yaml +18 -6
- package/openapi/schemas/common/security.yaml +13 -5
- package/openapi/schemas/index.yaml +49 -42
- package/openapi/uadp-asyncapi.yaml +5 -3
- package/openapi/uadp-openapi.yaml +243 -165
- package/openapi/version-management.openapi.yaml +142 -135
- package/package.json +43 -14
- package/spec/extensions/cognition.schema.json +87 -0
- package/spec/extensions/role-manifest.md +188 -0
- package/spec/layer4-economics/duadp-examples.json +44 -0
- package/spec/v0.4/agent.schema.json +14 -0
- package/spec/v0.4/extensions/mcp/README.md +1 -1
- package/spec/v0.5/agent-builder-openapi.yaml +230 -0
- package/spec/v0.5/agent.schema.json +34 -2
- package/spec/v0.5/extensions/cognition/cognition.schema.json +78 -1
- package/spec/v0.5/extensions/economics/context-pack.schema.json +91 -0
- package/spec/v0.5/extensions/economics/execution-profile.schema.json +148 -0
- package/spec/v0.5/extensions/economics/failure-semantics.schema.json +32 -0
- package/spec/v0.5/extensions/economics/replay-packet.schema.json +120 -0
- package/spec/v0.5/memory-hierarchy.yaml +120 -0
- package/spec/v0.5/role.schema.json +268 -0
- package/spec/v1/agent-card.schema.json +254 -0
- package/dist/adapters/a2a/__tests__/mcp-integration.spec.d.ts +0 -5
- package/dist/adapters/a2a/__tests__/mcp-integration.spec.js +0 -268
- package/dist/adapters/a2a/__tests__/mcp-transport.spec.d.ts +0 -5
- package/dist/adapters/a2a/__tests__/mcp-transport.spec.js +0 -203
- package/dist/mcp-server/__tests__/mcp-server.spec.d.ts +0 -8
- package/dist/mcp-server/__tests__/mcp-server.spec.js +0 -557
- package/dist/validation/__tests__/error-codes.test.d.ts +0 -5
- package/dist/validation/__tests__/error-codes.test.js +0 -252
- package/dist/version-management/core/version-manager.test.d.ts +0 -2
- package/dist/version-management/core/version-manager.test.js +0 -210
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AgentCard } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* GKG Matchmaker Discovery Provider
|
|
4
|
+
*
|
|
5
|
+
* Replaces static registry discovery with semantic Contract Matchmaking via the Global Knowledge Graph.
|
|
6
|
+
* Resolves agents by their IO contracts (emits/consumes) and Execution Economics.
|
|
7
|
+
*/
|
|
8
|
+
export declare class GkgMatchmaker {
|
|
9
|
+
private gkgEndpoint;
|
|
10
|
+
/**
|
|
11
|
+
* @param gkgEndpoint - GKG API base URL.
|
|
12
|
+
* Defaults to `OSSA_GKG_ENDPOINT` env var.
|
|
13
|
+
* Set this to your own GKG-compatible knowledge graph endpoint.
|
|
14
|
+
*/
|
|
15
|
+
constructor(gkgEndpoint?: string);
|
|
16
|
+
/**
|
|
17
|
+
* Discover agents that satisfy a specific IO contract and economics profile.
|
|
18
|
+
*/
|
|
19
|
+
discoverByContract(emitsSchema?: string, consumesSchema?: string, maxCostUsd?: number): Promise<AgentCard[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Initiate a Lead Selection Market bid request for a task
|
|
22
|
+
*/
|
|
23
|
+
requestMarketBids(taskContext: any, requiredContextPacks: string[]): Promise<any[]>;
|
|
24
|
+
private mapToAgentCard;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=discovery-gkg.d.ts.map
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GKG Matchmaker Discovery Provider
|
|
3
|
+
*
|
|
4
|
+
* Replaces static registry discovery with semantic Contract Matchmaking via the Global Knowledge Graph.
|
|
5
|
+
* Resolves agents by their IO contracts (emits/consumes) and Execution Economics.
|
|
6
|
+
*/
|
|
7
|
+
export class GkgMatchmaker {
|
|
8
|
+
gkgEndpoint;
|
|
9
|
+
/**
|
|
10
|
+
* @param gkgEndpoint - GKG API base URL.
|
|
11
|
+
* Defaults to `OSSA_GKG_ENDPOINT` env var.
|
|
12
|
+
* Set this to your own GKG-compatible knowledge graph endpoint.
|
|
13
|
+
*/
|
|
14
|
+
constructor(gkgEndpoint) {
|
|
15
|
+
this.gkgEndpoint =
|
|
16
|
+
gkgEndpoint ??
|
|
17
|
+
process.env.OSSA_GKG_ENDPOINT ??
|
|
18
|
+
'';
|
|
19
|
+
if (!this.gkgEndpoint) {
|
|
20
|
+
throw new Error('GkgMatchmaker requires a GKG endpoint. ' +
|
|
21
|
+
'Pass it to the constructor or set the OSSA_GKG_ENDPOINT environment variable.');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Discover agents that satisfy a specific IO contract and economics profile.
|
|
26
|
+
*/
|
|
27
|
+
async discoverByContract(emitsSchema, consumesSchema, maxCostUsd) {
|
|
28
|
+
const query = {
|
|
29
|
+
type: 'agent',
|
|
30
|
+
has_capability: true,
|
|
31
|
+
filters: {
|
|
32
|
+
...(emitsSchema && { 'extensions.statemesh.emits.schema': emitsSchema }),
|
|
33
|
+
...(consumesSchema && { 'extensions.statemesh.consumes.schema': consumesSchema }),
|
|
34
|
+
...(maxCostUsd && { 'economics.max_cost_usd': { $lte: maxCostUsd } })
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
try {
|
|
38
|
+
const response = await fetch(`${this.gkgEndpoint}/search/semantic`, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: { 'Content-Type': 'application/json' },
|
|
41
|
+
body: JSON.stringify(query)
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`GKG Semantic Search failed: ${response.statusText}`);
|
|
45
|
+
}
|
|
46
|
+
const results = await response.json();
|
|
47
|
+
return results.map((r) => this.mapToAgentCard(r));
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
console.error('GKG Matchmaker discovery failed', e);
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Initiate a Lead Selection Market bid request for a task
|
|
56
|
+
*/
|
|
57
|
+
async requestMarketBids(taskContext, requiredContextPacks) {
|
|
58
|
+
try {
|
|
59
|
+
const response = await fetch(`${this.gkgEndpoint}/market/bids/request`, {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
headers: { 'Content-Type': 'application/json' },
|
|
62
|
+
body: JSON.stringify({ taskContext, requiredContextPacks })
|
|
63
|
+
});
|
|
64
|
+
return await response.json();
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
console.error('Failed to request market bids', e);
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
mapToAgentCard(raw) {
|
|
72
|
+
return {
|
|
73
|
+
uri: raw.uri || (raw.metadata?.name ? `did:web:${raw.metadata.name}` : undefined),
|
|
74
|
+
name: raw.metadata?.name || 'anonymous',
|
|
75
|
+
version: raw.metadata?.version || '1.0.0',
|
|
76
|
+
ossaVersion: raw.apiVersion || 'ossa/v0.5.1',
|
|
77
|
+
gaid: raw.gaid,
|
|
78
|
+
endpoints: raw.endpoints || {},
|
|
79
|
+
transport: raw.transport || ['http'],
|
|
80
|
+
authentication: raw.authentication || ['none'],
|
|
81
|
+
encryption: raw.encryption || { tlsRequired: true, minTlsVersion: '1.3' },
|
|
82
|
+
capabilities: raw.spec?.tools?.map((t) => t.name) || [],
|
|
83
|
+
status: raw.metadata?.status || 'healthy',
|
|
84
|
+
metadata: {
|
|
85
|
+
description: raw.metadata?.description,
|
|
86
|
+
author: raw.metadata?.author,
|
|
87
|
+
...(raw.metadata || {})
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=discovery-gkg.js.map
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @package @bluefly/openstandardagents
|
|
8
8
|
* @since 0.5.0
|
|
9
9
|
*/
|
|
10
|
+
import { trace } from '@opentelemetry/api';
|
|
10
11
|
export class AgentBatchHandler {
|
|
11
12
|
deps;
|
|
12
13
|
constructor(deps) {
|
|
@@ -50,8 +51,8 @@ export class AgentBatchHandler {
|
|
|
50
51
|
duration,
|
|
51
52
|
},
|
|
52
53
|
};
|
|
53
|
-
// Store batch result
|
|
54
|
-
const batchId = context.requestId ?? `batch-${Date.now()}`;
|
|
54
|
+
// Store batch result — prefer OTel traceId so the storage key correlates with distributed traces
|
|
55
|
+
const batchId = trace.getActiveSpan()?.spanContext().traceId ?? context.requestId ?? `batch-${Date.now()}`;
|
|
55
56
|
await this.deps.resultStorage.store(batchId, batchResult);
|
|
56
57
|
// Dispatch completion event
|
|
57
58
|
await this.deps.eventDispatcher.dispatch('agent.batch.complete', {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @package @bluefly/openstandardagents
|
|
9
9
|
* @since 0.5.0
|
|
10
10
|
*/
|
|
11
|
+
import { trace } from '@opentelemetry/api';
|
|
11
12
|
export class AgentExecutionHandler {
|
|
12
13
|
deps;
|
|
13
14
|
constructor(deps) {
|
|
@@ -21,11 +22,15 @@ export class AgentExecutionHandler {
|
|
|
21
22
|
const agentId = message.getAgentId();
|
|
22
23
|
const input = message.getInput();
|
|
23
24
|
const context = message.getContext();
|
|
25
|
+
const span = trace.getActiveSpan();
|
|
26
|
+
if (context.requestId) {
|
|
27
|
+
span?.setAttribute('request.id', context.requestId);
|
|
28
|
+
}
|
|
24
29
|
this.deps.logger.info('Starting agent execution', {
|
|
25
30
|
agentId,
|
|
26
31
|
userId: context.userId,
|
|
27
32
|
sessionId: context.sessionId,
|
|
28
|
-
requestId: context.requestId,
|
|
33
|
+
requestId: span?.spanContext().traceId ?? context.requestId,
|
|
29
34
|
});
|
|
30
35
|
try {
|
|
31
36
|
// Load agent manifest
|
package/dist/package.json
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bluefly/openstandardagents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"exports": {
|
|
5
|
-
"./schema": "./spec/v0.
|
|
5
|
+
"./schema": "./spec/v0.5/agent.schema.json",
|
|
6
6
|
"./schema/v0.4": "./spec/v0.4/agent.schema.json",
|
|
7
7
|
"./schema/v0.4.1": "./spec/v0.4/agent.schema.json",
|
|
8
|
+
"./schema/v0.5": "./spec/v0.5/agent.schema.json",
|
|
9
|
+
"./schema/v0.5.0": "./spec/v0.5/agent.schema.json",
|
|
8
10
|
".": {
|
|
9
11
|
"types": "./dist/index.d.ts",
|
|
10
12
|
"import": "./dist/index.js",
|
|
@@ -46,7 +48,7 @@
|
|
|
46
48
|
"import": "./dist/services/agent-card-generator.js",
|
|
47
49
|
"require": "./dist/services/agent-card-generator.js"
|
|
48
50
|
},
|
|
49
|
-
"./agent-card-schema": "./spec/v0.
|
|
51
|
+
"./agent-card-schema": "./spec/v0.5/agent-card.schema.json",
|
|
50
52
|
"./sdk": {
|
|
51
53
|
"types": "./dist/sdk.d.ts",
|
|
52
54
|
"import": "./dist/sdk.js",
|
|
@@ -72,6 +74,11 @@
|
|
|
72
74
|
"types": "./dist/services/trust/trust.service.d.ts",
|
|
73
75
|
"import": "./dist/services/trust/trust.service.js",
|
|
74
76
|
"require": "./dist/services/trust/trust.service.js"
|
|
77
|
+
},
|
|
78
|
+
"./workspace-validate": {
|
|
79
|
+
"types": "./dist/cli/workspace-validate.d.ts",
|
|
80
|
+
"import": "./dist/cli/workspace-validate.js",
|
|
81
|
+
"require": "./dist/cli/workspace-validate.js"
|
|
75
82
|
}
|
|
76
83
|
},
|
|
77
84
|
"description": "OSSA - Open Standard for Software Agents. Infrastructure bridge between agent protocols (MCP, A2A) and deployment platforms. Define once in YAML, export to 9+ platforms (Docker, Kubernetes, LangChain, CrewAI, Claude Skills, etc.).",
|
|
@@ -150,8 +157,9 @@
|
|
|
150
157
|
"build:assets": "cp -r spec dist/ && cp package.json .version.json dist/",
|
|
151
158
|
"build:clean": "npm run clean && npm run build",
|
|
152
159
|
"dev": "tsc --watch",
|
|
153
|
-
"clean": "
|
|
160
|
+
"clean": "node -e \"const fs=require('node:fs'); ['dist','coverage','.tsbuildinfo'].forEach((p)=>fs.rmSync(p,{recursive:true,force:true}))\"",
|
|
154
161
|
"// TESTING": "",
|
|
162
|
+
"pretest": "npm run build",
|
|
155
163
|
"test": "jest",
|
|
156
164
|
"test:unit": "jest tests/unit --forceExit",
|
|
157
165
|
"test:integration": "jest tests/integration",
|
|
@@ -185,7 +193,7 @@
|
|
|
185
193
|
"validate:sdk:python": "cd src/sdks/python && python -m pip install --quiet -e . && python -m pytest tests/ -v || true",
|
|
186
194
|
"validate:schema": "npx ajv-cli compile -s $(node -p \"require('./.version.json').spec_path\")/$(node -p \"require('./.version.json').schema_file\") -r $(node -p \"require('./.version.json').spec_path\")/extensions/kagent/kagent.schema.json -r $(node -p \"require('./.version.json').spec_path\")/extensions/mcp/mcp.schema.json -r $(node -p \"require('./.version.json').spec_path\")/extensions/a2a/a2a.schema.json -r $(node -p \"require('./.version.json').spec_path\")/extensions/langchain/langchain.schema.json -r $(node -p \"require('./.version.json').spec_path\")/extensions/langgraph/langgraph.schema.json -r $(node -p \"require('./.version.json').spec_path\")/extensions/ag2/ag2.schema.json -r $(node -p \"require('./.version.json').spec_path\")/extensions/crewai/crewai.schema.json --strict=false --allow-union-types",
|
|
187
195
|
"validate:manifest": "npx ajv-cli validate -s $(node -p \"require('./.version.json').spec_path\")/$(node -p \"require('./.version.json').schema_file\") --strict=false --allow-union-types -d",
|
|
188
|
-
"validate:examples": "
|
|
196
|
+
"validate:examples": "tsx src/tools/validation/validate-examples.ts",
|
|
189
197
|
"validate:versions": "tsx src/tools/validate-versions.ts",
|
|
190
198
|
"fix:versions": "tsx src/tools/fix-versions.ts",
|
|
191
199
|
"validate:power": "tsx src/tools/validation/validate-ossa.ts",
|
|
@@ -227,7 +235,7 @@
|
|
|
227
235
|
"postinstall": "node bin/postinstall || true",
|
|
228
236
|
"// RELEASE & PUBLISH": "",
|
|
229
237
|
"prepublishOnly": "publint && npm run test:unit && npm run build",
|
|
230
|
-
"validate:deps": "depcheck --ignore-dirs=examples --ignores='@anthropic-ai/claude-agent-sdk,@langchain/openai,@openai/agents,@temporalio/activity,@temporalio/workflow,pino-pretty,readline,@types/*,ts-jest,eslint*,prettier*,lefthook,jest*,vitest,semantic-release*,@semantic-release/*,keep-a-changelog,jest-junit,publint,conventional-changelog-conventionalcommits,ajv-cli,json-schema-to-typescript,json-schema-to-zod,ts-node,@playwright/test,@langchain/anthropic,@langchain/core,langchain'",
|
|
238
|
+
"validate:deps": "depcheck --ignore-dirs=examples --ignores='@anthropic-ai/claude-agent-sdk,@langchain/openai,@openai/agents,@temporalio/activity,@temporalio/workflow,pino-pretty,readline,@types/*,ts-jest,eslint*,prettier*,lefthook,jest*,vitest,semantic-release*,@semantic-release/*,keep-a-changelog,jest-junit,publint,conventional-changelog-conventionalcommits,ajv-cli,json-schema-to-typescript,json-schema-to-zod,ts-node,@playwright/test,@langchain/anthropic,@langchain/core,langchain,agent-browser,@ai-sdk/anthropic,@ai-sdk/google'",
|
|
231
239
|
"validate:package": "publint",
|
|
232
240
|
"publish:dry-run": "npm publish --dry-run",
|
|
233
241
|
"release:check": "npm run typecheck && npm run test:unit && npm run validate:schema && publint",
|
|
@@ -235,9 +243,13 @@
|
|
|
235
243
|
"release:semantic:dry": "npx semantic-release --dry-run"
|
|
236
244
|
},
|
|
237
245
|
"dependencies": {
|
|
246
|
+
"@ai-sdk/anthropic": "^3.0.58",
|
|
247
|
+
"@ai-sdk/google": "^3.0.43",
|
|
248
|
+
"@ai-sdk/openai": "^3.0.41",
|
|
238
249
|
"@anthropic-ai/claude-agent-sdk": "^0.2.50",
|
|
239
250
|
"@anthropic-ai/sdk": "^0.71.0",
|
|
240
251
|
"@aws-sdk/client-bedrock-runtime": "^3.955.0",
|
|
252
|
+
"@better-openclaw/core": "^1.0.30",
|
|
241
253
|
"@cedar-policy/cedar-wasm": "^4.9.1",
|
|
242
254
|
"@gitbeaker/node": "^35.8.1",
|
|
243
255
|
"@gitbeaker/rest": "^43.8.0",
|
|
@@ -245,10 +257,10 @@
|
|
|
245
257
|
"@langchain/anthropic": "^0.3.10",
|
|
246
258
|
"@langchain/core": "^0.3.29",
|
|
247
259
|
"@langchain/openai": "^0.3.17",
|
|
248
|
-
"@modelcontextprotocol/sdk": "^
|
|
260
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
249
261
|
"@noble/ed25519": "^2.3.0",
|
|
250
262
|
"@octokit/rest": "^20.0.0",
|
|
251
|
-
"@openai/agents": "^0.
|
|
263
|
+
"@openai/agents": "^0.7.1",
|
|
252
264
|
"@opentelemetry/api": "^1.9.0",
|
|
253
265
|
"@opentelemetry/exporter-jaeger": "^1.28.0",
|
|
254
266
|
"@opentelemetry/exporter-logs-otlp-http": "^0.211.0",
|
|
@@ -261,11 +273,13 @@
|
|
|
261
273
|
"@opentelemetry/sdk-metrics": "^2.5.0",
|
|
262
274
|
"@opentelemetry/sdk-node": "^0.54.0",
|
|
263
275
|
"@opentelemetry/sdk-trace-base": "^1.28.0",
|
|
264
|
-
"@qdrant/js-client-rest": "^1.
|
|
276
|
+
"@qdrant/js-client-rest": "^1.17.0",
|
|
265
277
|
"@temporalio/activity": "^1.11.3",
|
|
266
278
|
"@temporalio/workflow": "^1.11.3",
|
|
267
279
|
"@types/tar": "^6.1.13",
|
|
268
280
|
"@types/ws": "^8.18.1",
|
|
281
|
+
"agent-browser": "^0.20.11",
|
|
282
|
+
"ai": "^6.0.116",
|
|
269
283
|
"ajv": "^8.12.0",
|
|
270
284
|
"ajv-formats": "^3.0.1",
|
|
271
285
|
"axios": "^1.12.2",
|
|
@@ -291,18 +305,22 @@
|
|
|
291
305
|
"pino": "^10.3.0",
|
|
292
306
|
"pino-pretty": "^13.1.3",
|
|
293
307
|
"prom-client": "^15.1.3",
|
|
308
|
+
"proxy-agent": "^7.0.0",
|
|
294
309
|
"readline": "^1.3.0",
|
|
295
310
|
"reflect-metadata": "^0.2.2",
|
|
296
311
|
"semver": "^7.7.3",
|
|
297
|
-
"tar": "^7.5.
|
|
298
|
-
"
|
|
312
|
+
"tar": "^7.5.11",
|
|
313
|
+
"twig": "^2.0.0",
|
|
314
|
+
"twig-drupal-filters": "^3.2.0",
|
|
315
|
+
"universal-user-agent": "^7.0.3",
|
|
316
|
+
"uuid": "^11.1.0",
|
|
299
317
|
"web-did-resolver": "^2.0.32",
|
|
300
318
|
"ws": "^8.19.0",
|
|
301
319
|
"yaml": "^2.3.0",
|
|
302
|
-
"zod": "^4.
|
|
320
|
+
"zod": "^4.3.6"
|
|
303
321
|
},
|
|
304
322
|
"devDependencies": {
|
|
305
|
-
"@bluefly/duadp": "^0.1.
|
|
323
|
+
"@bluefly/duadp": "^0.1.4",
|
|
306
324
|
"@jest/globals": "^29.7.0",
|
|
307
325
|
"@octokit/rest": "^22.0.1",
|
|
308
326
|
"@semantic-release/changelog": "^6.0.3",
|
|
@@ -320,6 +338,7 @@
|
|
|
320
338
|
"@types/pg": "^8.15.5",
|
|
321
339
|
"@types/redis": "^4.0.10",
|
|
322
340
|
"@types/semver": "^7.7.1",
|
|
341
|
+
"@types/twig": "^1.12.17",
|
|
323
342
|
"@typescript-eslint/eslint-plugin": "^8.48.0",
|
|
324
343
|
"@typescript-eslint/parser": "^8.48.0",
|
|
325
344
|
"ajv-cli": "^5.0.0",
|
|
@@ -344,7 +363,7 @@
|
|
|
344
363
|
"vitest": "^2.1.8"
|
|
345
364
|
},
|
|
346
365
|
"optionalDependencies": {
|
|
347
|
-
"nodemailer": "^
|
|
366
|
+
"nodemailer": "^8.0.2"
|
|
348
367
|
},
|
|
349
368
|
"engines": {
|
|
350
369
|
"node": ">=20.0.0",
|
|
@@ -353,5 +372,15 @@
|
|
|
353
372
|
"volta": {
|
|
354
373
|
"node": "22.19.0",
|
|
355
374
|
"npm": "11.10.0"
|
|
375
|
+
},
|
|
376
|
+
"overrides": {
|
|
377
|
+
"@hono/node-server": "^1.19.10",
|
|
378
|
+
"express-rate-limit": "^8.2.2",
|
|
379
|
+
"hono": "^4.12.7",
|
|
380
|
+
"langsmith": "^0.4.6",
|
|
381
|
+
"fast-xml-parser": "^5.3.8",
|
|
382
|
+
"@langchain/anthropic": {
|
|
383
|
+
"fast-xml-parser": "^4.5.4"
|
|
384
|
+
}
|
|
356
385
|
}
|
|
357
386
|
}
|
|
@@ -29,8 +29,8 @@ export declare const StateConfigSchema: z.ZodObject<{
|
|
|
29
29
|
enabled: z.ZodBoolean;
|
|
30
30
|
type: z.ZodOptional<z.ZodEnum<{
|
|
31
31
|
database: "database";
|
|
32
|
-
memory: "memory";
|
|
33
32
|
file: "file";
|
|
33
|
+
memory: "memory";
|
|
34
34
|
}>>;
|
|
35
35
|
provider: z.ZodOptional<z.ZodString>;
|
|
36
36
|
}, z.core.$strip>;
|
|
@@ -88,8 +88,12 @@ export class AgentCardGenerator {
|
|
|
88
88
|
name,
|
|
89
89
|
version,
|
|
90
90
|
ossaVersion: manifest.apiVersion || 'ossa/v0.4',
|
|
91
|
-
...(manifest.metadata?.identity?.uuid
|
|
92
|
-
|
|
91
|
+
...(manifest.metadata?.identity?.uuid
|
|
92
|
+
? { uuid: manifest.metadata.identity.uuid }
|
|
93
|
+
: {}),
|
|
94
|
+
...(manifest.metadata?.identity?.gaid
|
|
95
|
+
? { gaid: manifest.metadata.identity.gaid }
|
|
96
|
+
: {}),
|
|
93
97
|
// Taxonomy — what kind of agent
|
|
94
98
|
...(taxonomy ? { taxonomy } : {}),
|
|
95
99
|
// Capabilities & tools
|
|
@@ -64,7 +64,9 @@ let AuditLogService = class AuditLogService {
|
|
|
64
64
|
}
|
|
65
65
|
catch (err) {
|
|
66
66
|
// File doesn't exist yet or read error — return empty
|
|
67
|
-
if (err instanceof Error &&
|
|
67
|
+
if (err instanceof Error &&
|
|
68
|
+
'code' in err &&
|
|
69
|
+
err.code === 'ENOENT') {
|
|
68
70
|
return [];
|
|
69
71
|
}
|
|
70
72
|
process.stderr.write(`[audit-log] read failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
@@ -38,14 +38,19 @@ try {
|
|
|
38
38
|
const eqIdx = trimmed.indexOf('=');
|
|
39
39
|
if (eqIdx > 0) {
|
|
40
40
|
const key = trimmed.slice(0, eqIdx).trim();
|
|
41
|
-
const val = trimmed
|
|
41
|
+
const val = trimmed
|
|
42
|
+
.slice(eqIdx + 1)
|
|
43
|
+
.trim()
|
|
44
|
+
.replace(/^["']|["']$/g, '');
|
|
42
45
|
if (!process.env[key])
|
|
43
46
|
process.env[key] = val;
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
catch {
|
|
51
|
+
catch {
|
|
52
|
+
/* .env loading is best-effort */
|
|
53
|
+
}
|
|
49
54
|
const MAX_CONCURRENT = 3;
|
|
50
55
|
const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
|
|
51
56
|
const SUPPORTED_RUNTIMES = [
|
|
@@ -117,8 +122,7 @@ let ExecutionService = class ExecutionService extends EventEmitter {
|
|
|
117
122
|
}, timeout);
|
|
118
123
|
this.timeoutTimers.set(executionId, timer);
|
|
119
124
|
// Run asynchronously — don't block the caller
|
|
120
|
-
this.runExecution(executionId, manifestPath, input, selectedRuntime, abortController.signal)
|
|
121
|
-
.catch((err) => {
|
|
125
|
+
this.runExecution(executionId, manifestPath, input, selectedRuntime, abortController.signal).catch((err) => {
|
|
122
126
|
// Safety net for unhandled errors
|
|
123
127
|
logger.error({ err, executionId }, 'Unhandled execution error');
|
|
124
128
|
});
|
|
@@ -22,11 +22,7 @@ const WATCH_PATTERNS = [
|
|
|
22
22
|
'**/*.skill.yml',
|
|
23
23
|
'**/SKILL.md',
|
|
24
24
|
];
|
|
25
|
-
const IGNORED = [
|
|
26
|
-
'**/node_modules/**',
|
|
27
|
-
'**/dist/**',
|
|
28
|
-
'**/.git/**',
|
|
29
|
-
];
|
|
25
|
+
const IGNORED = ['**/node_modules/**', '**/dist/**', '**/.git/**'];
|
|
30
26
|
const DEBOUNCE_MS = 300;
|
|
31
27
|
let FileWatcherService = class FileWatcherService {
|
|
32
28
|
watcher = null;
|
|
@@ -101,7 +97,8 @@ let FileWatcherService = class FileWatcherService {
|
|
|
101
97
|
isPathSafe(filePath) {
|
|
102
98
|
const resolved = path.resolve(filePath);
|
|
103
99
|
// Must be inside workspace root
|
|
104
|
-
if (!resolved.startsWith(this.workspaceRoot + path.sep) &&
|
|
100
|
+
if (!resolved.startsWith(this.workspaceRoot + path.sep) &&
|
|
101
|
+
resolved !== this.workspaceRoot) {
|
|
105
102
|
return false;
|
|
106
103
|
}
|
|
107
104
|
// Get relative path and check each segment for dotfiles (except .ossa.yaml)
|
|
@@ -138,7 +135,9 @@ let FileWatcherService = class FileWatcherService {
|
|
|
138
135
|
else {
|
|
139
136
|
const fileStats = stats ?? this.safeStatSync(absolutePath);
|
|
140
137
|
this.trackedFiles.set(relativePath, {
|
|
141
|
-
modified: fileStats
|
|
138
|
+
modified: fileStats
|
|
139
|
+
? new Date(fileStats.mtime).toISOString()
|
|
140
|
+
: new Date().toISOString(),
|
|
142
141
|
size: fileStats?.size ?? 0,
|
|
143
142
|
});
|
|
144
143
|
}
|
|
@@ -33,7 +33,8 @@ let PairingService = class PairingService {
|
|
|
33
33
|
*/
|
|
34
34
|
getCurrentCode() {
|
|
35
35
|
const now = Date.now();
|
|
36
|
-
if (!this.currentCode ||
|
|
36
|
+
if (!this.currentCode ||
|
|
37
|
+
now - this.codeGeneratedAt >= CODE_ROTATION_INTERVAL_MS) {
|
|
37
38
|
this.currentCode = this.generateCode();
|
|
38
39
|
this.codeGeneratedAt = now;
|
|
39
40
|
}
|
|
@@ -22,18 +22,78 @@ import * as path from 'node:path';
|
|
|
22
22
|
import { safeParseYAML } from '../../utils/yaml-parser.js';
|
|
23
23
|
const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
24
24
|
const BUILTIN_SKILLS = [
|
|
25
|
-
{
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
{
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
25
|
+
{
|
|
26
|
+
name: 'web-search',
|
|
27
|
+
source: 'builtin',
|
|
28
|
+
description: 'Search the web for information',
|
|
29
|
+
tags: ['search', 'web'],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'code-review',
|
|
33
|
+
source: 'builtin',
|
|
34
|
+
description: 'Review code for quality, security, and best practices',
|
|
35
|
+
tags: ['code', 'review', 'quality'],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'text-summary',
|
|
39
|
+
source: 'builtin',
|
|
40
|
+
description: 'Summarize text content into concise form',
|
|
41
|
+
tags: ['text', 'summary', 'nlp'],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'data-analysis',
|
|
45
|
+
source: 'builtin',
|
|
46
|
+
description: 'Analyze structured and unstructured data',
|
|
47
|
+
tags: ['data', 'analysis', 'statistics'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'image-generation',
|
|
51
|
+
source: 'builtin',
|
|
52
|
+
description: 'Generate images from text descriptions',
|
|
53
|
+
tags: ['image', 'generation', 'creative'],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'translation',
|
|
57
|
+
source: 'builtin',
|
|
58
|
+
description: 'Translate text between languages',
|
|
59
|
+
tags: ['translation', 'language', 'nlp'],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'file-management',
|
|
63
|
+
source: 'builtin',
|
|
64
|
+
description: 'Read, write, and manage files in the workspace',
|
|
65
|
+
tags: ['file', 'io', 'workspace'],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'api-integration',
|
|
69
|
+
source: 'builtin',
|
|
70
|
+
description: 'Integrate with external REST and GraphQL APIs',
|
|
71
|
+
tags: ['api', 'integration', 'http'],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'database-query',
|
|
75
|
+
source: 'builtin',
|
|
76
|
+
description: 'Query and manage database connections',
|
|
77
|
+
tags: ['database', 'sql', 'query'],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'monitoring',
|
|
81
|
+
source: 'builtin',
|
|
82
|
+
description: 'Monitor system health, metrics, and alerts',
|
|
83
|
+
tags: ['monitoring', 'observability', 'health'],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'testing',
|
|
87
|
+
source: 'builtin',
|
|
88
|
+
description: 'Run and manage test suites',
|
|
89
|
+
tags: ['testing', 'quality', 'ci'],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'documentation',
|
|
93
|
+
source: 'builtin',
|
|
94
|
+
description: 'Generate and maintain documentation',
|
|
95
|
+
tags: ['docs', 'documentation', 'writing'],
|
|
96
|
+
},
|
|
37
97
|
];
|
|
38
98
|
let SkillAggregatorService = class SkillAggregatorService {
|
|
39
99
|
cache = new Map();
|
|
@@ -152,7 +212,12 @@ let SkillAggregatorService = class SkillAggregatorService {
|
|
|
152
212
|
// --- Private loaders ---
|
|
153
213
|
async loadLocal() {
|
|
154
214
|
const patterns = ['**/*.skill.yaml', '**/*.skill.yml', '**/SKILL.md'];
|
|
155
|
-
const ignorePatterns = [
|
|
215
|
+
const ignorePatterns = [
|
|
216
|
+
'**/node_modules/**',
|
|
217
|
+
'**/dist/**',
|
|
218
|
+
'**/.git/**',
|
|
219
|
+
'**/coverage/**',
|
|
220
|
+
];
|
|
156
221
|
const files = await fg(patterns, {
|
|
157
222
|
cwd: this.workspacePath,
|
|
158
223
|
ignore: ignorePatterns,
|
|
@@ -166,25 +231,39 @@ let SkillAggregatorService = class SkillAggregatorService {
|
|
|
166
231
|
// SKILL.md — extract name from first heading, rest is description
|
|
167
232
|
const lines = content.split('\n');
|
|
168
233
|
const heading = lines.find((l) => l.startsWith('#'));
|
|
169
|
-
const name = heading
|
|
234
|
+
const name = heading
|
|
235
|
+
? heading.replace(/^#+\s*/, '').trim()
|
|
236
|
+
: path.basename(path.dirname(file));
|
|
170
237
|
const description = lines
|
|
171
238
|
.filter((l) => !l.startsWith('#') && l.trim())
|
|
172
239
|
.slice(0, 3)
|
|
173
240
|
.join(' ')
|
|
174
241
|
.trim();
|
|
175
|
-
skills.push({
|
|
242
|
+
skills.push({
|
|
243
|
+
name,
|
|
244
|
+
source: 'local',
|
|
245
|
+
description: description || 'Local skill',
|
|
246
|
+
manifest: content,
|
|
247
|
+
});
|
|
176
248
|
}
|
|
177
249
|
else {
|
|
178
250
|
// YAML skill file
|
|
179
251
|
const parsed = safeParseYAML(content);
|
|
180
252
|
const meta = parsed?.metadata;
|
|
181
253
|
skills.push({
|
|
182
|
-
name: meta?.name ||
|
|
254
|
+
name: meta?.name ||
|
|
255
|
+
path.basename(file, path.extname(file)).replace('.skill', ''),
|
|
183
256
|
source: 'local',
|
|
184
|
-
description: meta?.description ||
|
|
257
|
+
description: meta?.description ||
|
|
258
|
+
parsed?.description ||
|
|
259
|
+
'Local skill',
|
|
185
260
|
version: meta?.version || undefined,
|
|
186
|
-
capabilities: Array.isArray(parsed?.capabilities)
|
|
187
|
-
|
|
261
|
+
capabilities: Array.isArray(parsed?.capabilities)
|
|
262
|
+
? parsed.capabilities
|
|
263
|
+
: undefined,
|
|
264
|
+
tags: Array.isArray(parsed?.tags)
|
|
265
|
+
? parsed.tags
|
|
266
|
+
: undefined,
|
|
188
267
|
manifest: parsed,
|
|
189
268
|
});
|
|
190
269
|
}
|
|
@@ -201,7 +280,10 @@ let SkillAggregatorService = class SkillAggregatorService {
|
|
|
201
280
|
async loadGitHub() {
|
|
202
281
|
const url = 'https://api.github.com/repos/anthropics/skills/contents/';
|
|
203
282
|
const response = await fetch(url, {
|
|
204
|
-
headers: {
|
|
283
|
+
headers: {
|
|
284
|
+
Accept: 'application/vnd.github.v3+json',
|
|
285
|
+
'User-Agent': 'ossa-daemon',
|
|
286
|
+
},
|
|
205
287
|
signal: AbortSignal.timeout(10_000),
|
|
206
288
|
});
|
|
207
289
|
if (!response.ok) {
|
|
@@ -239,7 +321,9 @@ let SkillAggregatorService = class SkillAggregatorService {
|
|
|
239
321
|
source: 'registry',
|
|
240
322
|
description: item.description || 'Registry skill',
|
|
241
323
|
version: item.version || undefined,
|
|
242
|
-
capabilities: Array.isArray(item.capabilities)
|
|
324
|
+
capabilities: Array.isArray(item.capabilities)
|
|
325
|
+
? item.capabilities
|
|
326
|
+
: undefined,
|
|
243
327
|
tags: Array.isArray(item.tags) ? item.tags : undefined,
|
|
244
328
|
}));
|
|
245
329
|
}
|
|
@@ -23,7 +23,7 @@ import { PairingService } from './pairing.service.js';
|
|
|
23
23
|
const SSE_HEADERS = {
|
|
24
24
|
'Content-Type': 'text/event-stream',
|
|
25
25
|
'Cache-Control': 'no-cache',
|
|
26
|
-
|
|
26
|
+
Connection: 'keep-alive',
|
|
27
27
|
};
|
|
28
28
|
const STATUS_INTERVAL_MS = 5_000;
|
|
29
29
|
let SSEEndpoints = class SSEEndpoints {
|