mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-08-13 22:37:29 +00:00
Add AgentAd ad schemas as a LogicSRC primitive (#10)
* Add AgentAd ad schemas as a LogicSRC primitive
AgentAd is a disclosed, agent-readable advertising contract for CLI tools
and AI agents. LogicSRC owns the canonical schemas; cl1s.tech is the
reference network built on them.
- packages/schemas: agentad-{ad,placement,ad-request,ad-response,
impression,click,campaign} schemas (id under schemas.logicsrc.com) +
ad/placement fixtures, exported from @logicsrc/schemas
- packages/validators: register the 7 agentad kinds, wire fixture
validation, add tests (disclosure.sponsored must be true)
- docs/agentad.md: the AgentAd spec
- README: list AgentAd under v1 priorities
Validators build clean; all fixtures validate; vitest 4/4 green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Prepare @logicsrc/schemas for npm publish
Add license, repository, homepage, keywords, publishConfig (public),
and a package README covering both the logicsrc-* core schemas and the
agentad-* family.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ad9f3a2a29
commit
7cda686059
17 changed files with 483 additions and 5 deletions
|
|
@ -11,7 +11,7 @@
|
|||
"scripts": {
|
||||
"build": "tsc -p tsconfig.json",
|
||||
"test": "vitest run src",
|
||||
"validate:fixtures": "node dist/cli.js task ../schemas/fixtures/task.yaml && node dist/cli.js agent ../schemas/fixtures/agent.yaml"
|
||||
"validate:fixtures": "node dist/cli.js task ../schemas/fixtures/task.yaml && node dist/cli.js agent ../schemas/fixtures/agent.yaml && node dist/cli.js agentad-ad ../schemas/fixtures/agentad-ad.yaml && node dist/cli.js agentad-placement ../schemas/fixtures/agentad-placement.yaml"
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": "^8.17.1",
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ function main(argv: string[]) {
|
|||
const [, , kindArg, fileArg] = argv;
|
||||
|
||||
if (!kindArg || !fileArg) {
|
||||
console.error("Usage: logicsrc-validate <task|agent|run|event|plugin> <file.yaml|file.json>");
|
||||
console.error("Usage: logicsrc-validate <task|agent|run|event|plugin|agentad-ad|agentad-placement|...> <file.yaml|file.json>");
|
||||
process.exitCode = 2;
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,4 +25,27 @@ describe("LogicSRC validators", () => {
|
|||
|
||||
expect(result.ok).toBe(false);
|
||||
});
|
||||
|
||||
it("validates the AgentAd ad fixture", () => {
|
||||
const testDir = dirname(fileURLToPath(import.meta.url));
|
||||
const file = resolve(testDir, "../../schemas/fixtures/agentad-ad.yaml");
|
||||
const data = parseDocument(readFileSync(file, "utf8"), file);
|
||||
|
||||
expect(validate("agentad-ad", data).ok).toBe(true);
|
||||
});
|
||||
|
||||
it("rejects an AgentAd ad that is not disclosed as sponsored", () => {
|
||||
const result = validate("agentad-ad", {
|
||||
type: "agentad.ad",
|
||||
version: "0.1",
|
||||
id: "undisclosed",
|
||||
advertiser_did: "acme.coinpay",
|
||||
format: "text",
|
||||
title: "Buy now",
|
||||
url: "https://example.com",
|
||||
disclosure: { sponsored: false, label: "Sponsored" }
|
||||
});
|
||||
|
||||
expect(result.ok).toBe(false);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -9,6 +9,13 @@ import pluginSchema from "../../schemas/schemas/logicsrc-plugin.schema.json" wit
|
|||
import runSchema from "../../schemas/schemas/logicsrc-run.schema.json" with { type: "json" };
|
||||
import socialPostSchema from "../../schemas/schemas/logicsrc-social-post.schema.json" with { type: "json" };
|
||||
import taskSchema from "../../schemas/schemas/logicsrc-task.schema.json" with { type: "json" };
|
||||
import agentadAdSchema from "../../schemas/schemas/agentad-ad.schema.json" with { type: "json" };
|
||||
import agentadPlacementSchema from "../../schemas/schemas/agentad-placement.schema.json" with { type: "json" };
|
||||
import agentadAdRequestSchema from "../../schemas/schemas/agentad-ad-request.schema.json" with { type: "json" };
|
||||
import agentadAdResponseSchema from "../../schemas/schemas/agentad-ad-response.schema.json" with { type: "json" };
|
||||
import agentadImpressionSchema from "../../schemas/schemas/agentad-impression.schema.json" with { type: "json" };
|
||||
import agentadClickSchema from "../../schemas/schemas/agentad-click.schema.json" with { type: "json" };
|
||||
import agentadCampaignSchema from "../../schemas/schemas/agentad-campaign.schema.json" with { type: "json" };
|
||||
|
||||
export const schemas = {
|
||||
agent: agentSchema,
|
||||
|
|
@ -21,7 +28,14 @@ export const schemas = {
|
|||
plugin: pluginSchema,
|
||||
run: runSchema,
|
||||
"social-post": socialPostSchema,
|
||||
task: taskSchema
|
||||
task: taskSchema,
|
||||
"agentad-ad": agentadAdSchema,
|
||||
"agentad-placement": agentadPlacementSchema,
|
||||
"agentad-ad-request": agentadAdRequestSchema,
|
||||
"agentad-ad-response": agentadAdResponseSchema,
|
||||
"agentad-impression": agentadImpressionSchema,
|
||||
"agentad-click": agentadClickSchema,
|
||||
"agentad-campaign": agentadCampaignSchema
|
||||
} as const;
|
||||
|
||||
export type SchemaKind = keyof typeof schemas;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue