@hasna/contracts 0.1.0 → 0.2.0

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/dist/schemas.js CHANGED
@@ -3989,7 +3989,7 @@ var coerce = {
3989
3989
  var NEVER = INVALID;
3990
3990
  // src/schemas.ts
3991
3991
  var CONTRACTS_PACKAGE_NAME = "@hasna/contracts";
3992
- var CONTRACTS_PACKAGE_VERSION = "0.1.0";
3992
+ var CONTRACTS_PACKAGE_VERSION = "0.2.0";
3993
3993
  var SCHEMA_IDS = {
3994
3994
  actorRef: "hasna.actor_ref.v1",
3995
3995
  resourceRef: "hasna.resource_ref.v1",
@@ -4001,7 +4001,9 @@ var SCHEMA_IDS = {
4001
4001
  contextPack: "hasna.context_pack.v1",
4002
4002
  agentTrajectory: "hasna.agent_trajectory.v1",
4003
4003
  validationPlan: "hasna.validation_plan.v1",
4004
- proofBundle: "hasna.proof_bundle.v1"
4004
+ proofBundle: "hasna.proof_bundle.v1",
4005
+ scaffoldManifest: "hasna.scaffold_manifest.v1",
4006
+ scaffoldInstallRecord: "hasna.scaffold_install_record.v1"
4005
4007
  };
4006
4008
  var SchemaIdSchema = exports_external.string().regex(/^hasna\.[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*\.v[0-9]+$/);
4007
4009
  var TimestampSchema = exports_external.string().datetime();
@@ -4305,6 +4307,144 @@ var ValidationPlanSchema = contractBaseSchema(SCHEMA_IDS.validationPlan).extend(
4305
4307
  verifier: ActorPointerSchema.optional(),
4306
4308
  requiredEvidenceKinds: exports_external.array(EvidenceKindSchema).default([])
4307
4309
  }).strict();
4310
+ var ScaffoldTypeSchema = exports_external.enum([
4311
+ "open_source",
4312
+ "internal_app",
4313
+ "platform",
4314
+ "app",
4315
+ "agent",
4316
+ "content",
4317
+ "overlay",
4318
+ "other"
4319
+ ]);
4320
+ var ScaffoldStatusSchema = exports_external.enum(["draft", "active", "deprecated", "archived"]);
4321
+ var ScaffoldCapabilitySchema = exports_external.enum([
4322
+ "cli",
4323
+ "mcp",
4324
+ "library",
4325
+ "sdk",
4326
+ "rest_api",
4327
+ "dashboard",
4328
+ "database",
4329
+ "auth",
4330
+ "billing",
4331
+ "worker",
4332
+ "daemon",
4333
+ "native",
4334
+ "browser_extension",
4335
+ "ai_provider",
4336
+ "media_pipeline",
4337
+ "data_pipeline",
4338
+ "tests",
4339
+ "ci",
4340
+ "deployment",
4341
+ "docs",
4342
+ "other"
4343
+ ]);
4344
+ var ScaffoldEnvVarSchema = exports_external.object({
4345
+ key: exports_external.string().regex(/^[A-Z][A-Z0-9_]*$/),
4346
+ description: exports_external.string().min(1),
4347
+ required: exports_external.boolean().default(false),
4348
+ secret: exports_external.boolean().default(false),
4349
+ group: exports_external.string().min(1).optional(),
4350
+ default: exports_external.string().optional()
4351
+ }).strict().superRefine((value, ctx) => {
4352
+ if (value.secret && value.default !== undefined) {
4353
+ ctx.addIssue({
4354
+ code: exports_external.ZodIssueCode.custom,
4355
+ message: "Secret scaffold env vars cannot include defaults",
4356
+ path: ["default"]
4357
+ });
4358
+ }
4359
+ });
4360
+ var ScaffoldScriptSchema = exports_external.object({
4361
+ name: exports_external.string().min(1),
4362
+ command: exports_external.string().min(1),
4363
+ description: exports_external.string().min(1).optional(),
4364
+ required: exports_external.boolean().default(false)
4365
+ }).strict();
4366
+ var ScaffoldOutputShapeSchema = exports_external.object({
4367
+ packageManager: exports_external.enum(["bun", "npm", "pnpm", "yarn", "cargo", "pip", "other"]).optional(),
4368
+ languages: exports_external.array(exports_external.string().min(1)).default([]),
4369
+ requiredFiles: exports_external.array(exports_external.string().min(1)).default([]),
4370
+ requiredDirectories: exports_external.array(exports_external.string().min(1)).default([]),
4371
+ optionalDirectories: exports_external.array(exports_external.string().min(1)).default([])
4372
+ }).strict();
4373
+ var ScaffoldManifestSchema = contractBaseSchema(SCHEMA_IDS.scaffoldManifest).extend({
4374
+ name: exports_external.string().min(1),
4375
+ version: exports_external.string().min(1),
4376
+ summary: exports_external.string().min(1),
4377
+ type: ScaffoldTypeSchema,
4378
+ status: ScaffoldStatusSchema.default("draft"),
4379
+ capabilities: exports_external.array(ScaffoldCapabilitySchema).default([]),
4380
+ techStack: exports_external.array(exports_external.string().min(1)).default([]),
4381
+ tags: TagsSchema,
4382
+ source: ResourcePointerSchema.optional(),
4383
+ output: ScaffoldOutputShapeSchema,
4384
+ env: exports_external.array(ScaffoldEnvVarSchema).default([]),
4385
+ scripts: exports_external.array(ScaffoldScriptSchema).default([]),
4386
+ validationChecks: exports_external.array(ValidationCheckSchema).default([]),
4387
+ evidenceRefs: exports_external.array(EvidencePointerSchema).default([])
4388
+ }).strict().superRefine((value, ctx) => {
4389
+ if (value.source?.uri?.startsWith("file://")) {
4390
+ ctx.addIssue({
4391
+ code: exports_external.ZodIssueCode.custom,
4392
+ message: "Public scaffold manifest source refs cannot use local file:// URIs",
4393
+ path: ["source", "uri"]
4394
+ });
4395
+ }
4396
+ if (value.status === "active" && value.validationChecks.length === 0) {
4397
+ ctx.addIssue({
4398
+ code: exports_external.ZodIssueCode.custom,
4399
+ message: "Active scaffold manifests require validation checks",
4400
+ path: ["validationChecks"]
4401
+ });
4402
+ }
4403
+ if (value.status === "active" && value.output.requiredFiles.length === 0 && value.output.requiredDirectories.length === 0) {
4404
+ ctx.addIssue({
4405
+ code: exports_external.ZodIssueCode.custom,
4406
+ message: "Active scaffold manifests require at least one required file or directory",
4407
+ path: ["output"]
4408
+ });
4409
+ }
4410
+ });
4411
+ var ScaffoldInstallStatusSchema = exports_external.enum(["installed", "failed", "cancelled", "partial", "unknown"]);
4412
+ var ScaffoldInstallRecordSchema = contractBaseSchema(SCHEMA_IDS.scaffoldInstallRecord).extend({
4413
+ scaffoldId: exports_external.string().min(1),
4414
+ scaffoldVersion: exports_external.string().min(1).optional(),
4415
+ manifestRef: ResourcePointerSchema.optional(),
4416
+ target: ResourcePointerSchema,
4417
+ status: ScaffoldInstallStatusSchema,
4418
+ installedAt: TimestampSchema.optional(),
4419
+ installer: ActorPointerSchema.optional(),
4420
+ packageManager: exports_external.enum(["bun", "npm", "pnpm", "yarn", "cargo", "pip", "other"]).optional(),
4421
+ options: MetadataSchema.optional(),
4422
+ generatedFiles: exports_external.array(ResourcePointerSchema).default([]),
4423
+ evidenceRefs: exports_external.array(EvidencePointerSchema).default([]),
4424
+ proofBundleRefs: exports_external.array(ResourcePointerSchema).default([])
4425
+ }).strict().superRefine((value, ctx) => {
4426
+ if (value.status === "installed" && !value.installedAt) {
4427
+ ctx.addIssue({
4428
+ code: exports_external.ZodIssueCode.custom,
4429
+ message: "Installed scaffold records require installedAt",
4430
+ path: ["installedAt"]
4431
+ });
4432
+ }
4433
+ if (value.status === "installed" && value.generatedFiles.length === 0 && value.evidenceRefs.length === 0 && value.proofBundleRefs.length === 0) {
4434
+ ctx.addIssue({
4435
+ code: exports_external.ZodIssueCode.custom,
4436
+ message: "Installed scaffold records require generated files, evidence, or proof bundle refs",
4437
+ path: ["generatedFiles"]
4438
+ });
4439
+ }
4440
+ if ((value.status === "failed" || value.status === "partial") && value.evidenceRefs.length === 0 && value.proofBundleRefs.length === 0) {
4441
+ ctx.addIssue({
4442
+ code: exports_external.ZodIssueCode.custom,
4443
+ message: "Failed or partial scaffold records require evidence or proof bundle refs",
4444
+ path: ["evidenceRefs"]
4445
+ });
4446
+ }
4447
+ });
4308
4448
  var ProofCheckResultSchema = exports_external.object({
4309
4449
  checkId: exports_external.string().min(1),
4310
4450
  status: ContractStatusSchema,
@@ -4451,7 +4591,9 @@ var ContractSchemaRegistry = {
4451
4591
  [SCHEMA_IDS.contextPack]: ContextPackSchema,
4452
4592
  [SCHEMA_IDS.agentTrajectory]: AgentTrajectorySchema,
4453
4593
  [SCHEMA_IDS.validationPlan]: ValidationPlanSchema,
4454
- [SCHEMA_IDS.proofBundle]: ProofBundleSchema
4594
+ [SCHEMA_IDS.proofBundle]: ProofBundleSchema,
4595
+ [SCHEMA_IDS.scaffoldManifest]: ScaffoldManifestSchema,
4596
+ [SCHEMA_IDS.scaffoldInstallRecord]: ScaffoldInstallRecordSchema
4455
4597
  };
4456
4598
  export {
4457
4599
  contractBaseSchema,
@@ -4464,6 +4606,15 @@ export {
4464
4606
  TagsSchema,
4465
4607
  Sha256DigestSchema,
4466
4608
  SchemaIdSchema,
4609
+ ScaffoldTypeSchema,
4610
+ ScaffoldStatusSchema,
4611
+ ScaffoldScriptSchema,
4612
+ ScaffoldOutputShapeSchema,
4613
+ ScaffoldManifestSchema,
4614
+ ScaffoldInstallStatusSchema,
4615
+ ScaffoldInstallRecordSchema,
4616
+ ScaffoldEnvVarSchema,
4617
+ ScaffoldCapabilitySchema,
4467
4618
  SCHEMA_IDS,
4468
4619
  ResourceRefSchema,
4469
4620
  ResourcePointerSchema,
@@ -3989,7 +3989,7 @@ var coerce = {
3989
3989
  var NEVER = INVALID;
3990
3990
  // src/schemas.ts
3991
3991
  var CONTRACTS_PACKAGE_NAME = "@hasna/contracts";
3992
- var CONTRACTS_PACKAGE_VERSION = "0.1.0";
3992
+ var CONTRACTS_PACKAGE_VERSION = "0.2.0";
3993
3993
  var SCHEMA_IDS = {
3994
3994
  actorRef: "hasna.actor_ref.v1",
3995
3995
  resourceRef: "hasna.resource_ref.v1",
@@ -4001,7 +4001,9 @@ var SCHEMA_IDS = {
4001
4001
  contextPack: "hasna.context_pack.v1",
4002
4002
  agentTrajectory: "hasna.agent_trajectory.v1",
4003
4003
  validationPlan: "hasna.validation_plan.v1",
4004
- proofBundle: "hasna.proof_bundle.v1"
4004
+ proofBundle: "hasna.proof_bundle.v1",
4005
+ scaffoldManifest: "hasna.scaffold_manifest.v1",
4006
+ scaffoldInstallRecord: "hasna.scaffold_install_record.v1"
4005
4007
  };
4006
4008
  var SchemaIdSchema = exports_external.string().regex(/^hasna\.[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*\.v[0-9]+$/);
4007
4009
  var TimestampSchema = exports_external.string().datetime();
@@ -4305,6 +4307,144 @@ var ValidationPlanSchema = contractBaseSchema(SCHEMA_IDS.validationPlan).extend(
4305
4307
  verifier: ActorPointerSchema.optional(),
4306
4308
  requiredEvidenceKinds: exports_external.array(EvidenceKindSchema).default([])
4307
4309
  }).strict();
4310
+ var ScaffoldTypeSchema = exports_external.enum([
4311
+ "open_source",
4312
+ "internal_app",
4313
+ "platform",
4314
+ "app",
4315
+ "agent",
4316
+ "content",
4317
+ "overlay",
4318
+ "other"
4319
+ ]);
4320
+ var ScaffoldStatusSchema = exports_external.enum(["draft", "active", "deprecated", "archived"]);
4321
+ var ScaffoldCapabilitySchema = exports_external.enum([
4322
+ "cli",
4323
+ "mcp",
4324
+ "library",
4325
+ "sdk",
4326
+ "rest_api",
4327
+ "dashboard",
4328
+ "database",
4329
+ "auth",
4330
+ "billing",
4331
+ "worker",
4332
+ "daemon",
4333
+ "native",
4334
+ "browser_extension",
4335
+ "ai_provider",
4336
+ "media_pipeline",
4337
+ "data_pipeline",
4338
+ "tests",
4339
+ "ci",
4340
+ "deployment",
4341
+ "docs",
4342
+ "other"
4343
+ ]);
4344
+ var ScaffoldEnvVarSchema = exports_external.object({
4345
+ key: exports_external.string().regex(/^[A-Z][A-Z0-9_]*$/),
4346
+ description: exports_external.string().min(1),
4347
+ required: exports_external.boolean().default(false),
4348
+ secret: exports_external.boolean().default(false),
4349
+ group: exports_external.string().min(1).optional(),
4350
+ default: exports_external.string().optional()
4351
+ }).strict().superRefine((value, ctx) => {
4352
+ if (value.secret && value.default !== undefined) {
4353
+ ctx.addIssue({
4354
+ code: exports_external.ZodIssueCode.custom,
4355
+ message: "Secret scaffold env vars cannot include defaults",
4356
+ path: ["default"]
4357
+ });
4358
+ }
4359
+ });
4360
+ var ScaffoldScriptSchema = exports_external.object({
4361
+ name: exports_external.string().min(1),
4362
+ command: exports_external.string().min(1),
4363
+ description: exports_external.string().min(1).optional(),
4364
+ required: exports_external.boolean().default(false)
4365
+ }).strict();
4366
+ var ScaffoldOutputShapeSchema = exports_external.object({
4367
+ packageManager: exports_external.enum(["bun", "npm", "pnpm", "yarn", "cargo", "pip", "other"]).optional(),
4368
+ languages: exports_external.array(exports_external.string().min(1)).default([]),
4369
+ requiredFiles: exports_external.array(exports_external.string().min(1)).default([]),
4370
+ requiredDirectories: exports_external.array(exports_external.string().min(1)).default([]),
4371
+ optionalDirectories: exports_external.array(exports_external.string().min(1)).default([])
4372
+ }).strict();
4373
+ var ScaffoldManifestSchema = contractBaseSchema(SCHEMA_IDS.scaffoldManifest).extend({
4374
+ name: exports_external.string().min(1),
4375
+ version: exports_external.string().min(1),
4376
+ summary: exports_external.string().min(1),
4377
+ type: ScaffoldTypeSchema,
4378
+ status: ScaffoldStatusSchema.default("draft"),
4379
+ capabilities: exports_external.array(ScaffoldCapabilitySchema).default([]),
4380
+ techStack: exports_external.array(exports_external.string().min(1)).default([]),
4381
+ tags: TagsSchema,
4382
+ source: ResourcePointerSchema.optional(),
4383
+ output: ScaffoldOutputShapeSchema,
4384
+ env: exports_external.array(ScaffoldEnvVarSchema).default([]),
4385
+ scripts: exports_external.array(ScaffoldScriptSchema).default([]),
4386
+ validationChecks: exports_external.array(ValidationCheckSchema).default([]),
4387
+ evidenceRefs: exports_external.array(EvidencePointerSchema).default([])
4388
+ }).strict().superRefine((value, ctx) => {
4389
+ if (value.source?.uri?.startsWith("file://")) {
4390
+ ctx.addIssue({
4391
+ code: exports_external.ZodIssueCode.custom,
4392
+ message: "Public scaffold manifest source refs cannot use local file:// URIs",
4393
+ path: ["source", "uri"]
4394
+ });
4395
+ }
4396
+ if (value.status === "active" && value.validationChecks.length === 0) {
4397
+ ctx.addIssue({
4398
+ code: exports_external.ZodIssueCode.custom,
4399
+ message: "Active scaffold manifests require validation checks",
4400
+ path: ["validationChecks"]
4401
+ });
4402
+ }
4403
+ if (value.status === "active" && value.output.requiredFiles.length === 0 && value.output.requiredDirectories.length === 0) {
4404
+ ctx.addIssue({
4405
+ code: exports_external.ZodIssueCode.custom,
4406
+ message: "Active scaffold manifests require at least one required file or directory",
4407
+ path: ["output"]
4408
+ });
4409
+ }
4410
+ });
4411
+ var ScaffoldInstallStatusSchema = exports_external.enum(["installed", "failed", "cancelled", "partial", "unknown"]);
4412
+ var ScaffoldInstallRecordSchema = contractBaseSchema(SCHEMA_IDS.scaffoldInstallRecord).extend({
4413
+ scaffoldId: exports_external.string().min(1),
4414
+ scaffoldVersion: exports_external.string().min(1).optional(),
4415
+ manifestRef: ResourcePointerSchema.optional(),
4416
+ target: ResourcePointerSchema,
4417
+ status: ScaffoldInstallStatusSchema,
4418
+ installedAt: TimestampSchema.optional(),
4419
+ installer: ActorPointerSchema.optional(),
4420
+ packageManager: exports_external.enum(["bun", "npm", "pnpm", "yarn", "cargo", "pip", "other"]).optional(),
4421
+ options: MetadataSchema.optional(),
4422
+ generatedFiles: exports_external.array(ResourcePointerSchema).default([]),
4423
+ evidenceRefs: exports_external.array(EvidencePointerSchema).default([]),
4424
+ proofBundleRefs: exports_external.array(ResourcePointerSchema).default([])
4425
+ }).strict().superRefine((value, ctx) => {
4426
+ if (value.status === "installed" && !value.installedAt) {
4427
+ ctx.addIssue({
4428
+ code: exports_external.ZodIssueCode.custom,
4429
+ message: "Installed scaffold records require installedAt",
4430
+ path: ["installedAt"]
4431
+ });
4432
+ }
4433
+ if (value.status === "installed" && value.generatedFiles.length === 0 && value.evidenceRefs.length === 0 && value.proofBundleRefs.length === 0) {
4434
+ ctx.addIssue({
4435
+ code: exports_external.ZodIssueCode.custom,
4436
+ message: "Installed scaffold records require generated files, evidence, or proof bundle refs",
4437
+ path: ["generatedFiles"]
4438
+ });
4439
+ }
4440
+ if ((value.status === "failed" || value.status === "partial") && value.evidenceRefs.length === 0 && value.proofBundleRefs.length === 0) {
4441
+ ctx.addIssue({
4442
+ code: exports_external.ZodIssueCode.custom,
4443
+ message: "Failed or partial scaffold records require evidence or proof bundle refs",
4444
+ path: ["evidenceRefs"]
4445
+ });
4446
+ }
4447
+ });
4308
4448
  var ProofCheckResultSchema = exports_external.object({
4309
4449
  checkId: exports_external.string().min(1),
4310
4450
  status: ContractStatusSchema,
@@ -4451,7 +4591,9 @@ var ContractSchemaRegistry = {
4451
4591
  [SCHEMA_IDS.contextPack]: ContextPackSchema,
4452
4592
  [SCHEMA_IDS.agentTrajectory]: AgentTrajectorySchema,
4453
4593
  [SCHEMA_IDS.validationPlan]: ValidationPlanSchema,
4454
- [SCHEMA_IDS.proofBundle]: ProofBundleSchema
4594
+ [SCHEMA_IDS.proofBundle]: ProofBundleSchema,
4595
+ [SCHEMA_IDS.scaffoldManifest]: ScaffoldManifestSchema,
4596
+ [SCHEMA_IDS.scaffoldInstallRecord]: ScaffoldInstallRecordSchema
4455
4597
  };
4456
4598
 
4457
4599
  // src/validators.ts
@@ -0,0 +1,12 @@
1
+ {
2
+ "schema": "hasna.scaffold_install_record.v1",
3
+ "id": "install_scaffold_open_source_invalid",
4
+ "createdAt": "2026-06-28T16:56:00.000Z",
5
+ "scaffoldId": "scaffold-open-source",
6
+ "target": {
7
+ "kind": "repo",
8
+ "id": "open-example",
9
+ "uri": "git+https://github.com/hasna/open-example.git"
10
+ },
11
+ "status": "installed"
12
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "schema": "hasna.scaffold_install_record.v1",
3
+ "id": "install_scaffold_open_source_001",
4
+ "createdAt": "2026-06-28T16:56:00.000Z",
5
+ "scaffoldId": "scaffold-open-source",
6
+ "scaffoldVersion": "1.0.0",
7
+ "manifestRef": {
8
+ "kind": "artifact",
9
+ "id": "scaffold-open-source-manifest",
10
+ "uri": "artifact://scaffolds/scaffold-open-source/scaffold.manifest.json"
11
+ },
12
+ "target": {
13
+ "kind": "repo",
14
+ "id": "open-example",
15
+ "uri": "git+https://github.com/hasna/open-example.git"
16
+ },
17
+ "status": "installed",
18
+ "installedAt": "2026-06-28T16:56:30.000Z",
19
+ "installer": {
20
+ "kind": "agent",
21
+ "id": "agent_codewith",
22
+ "name": "Codewith"
23
+ },
24
+ "packageManager": "bun",
25
+ "options": {
26
+ "includeDashboard": false,
27
+ "includeMcp": true
28
+ },
29
+ "generatedFiles": [
30
+ {
31
+ "kind": "file",
32
+ "id": "package_json",
33
+ "uri": "repo://open-example/package.json"
34
+ }
35
+ ],
36
+ "evidenceRefs": [
37
+ {
38
+ "id": "ev_scaffold_validate",
39
+ "kind": "command_output",
40
+ "uri": "artifact://runs/install_scaffold_open_source_001/scaffolds-validate.txt"
41
+ }
42
+ ]
43
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "schema": "hasna.scaffold_manifest.v1",
3
+ "id": "scaffold-empty",
4
+ "createdAt": "2026-06-28T16:55:00.000Z",
5
+ "name": "scaffold-empty",
6
+ "version": "1.0.0",
7
+ "summary": "Invalid active scaffold without output requirements or validation.",
8
+ "type": "open_source",
9
+ "status": "active",
10
+ "output": {
11
+ "packageManager": "bun"
12
+ }
13
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "schema": "hasna.scaffold_manifest.v1",
3
+ "id": "scaffold-open-source",
4
+ "createdAt": "2026-06-28T16:55:00.000Z",
5
+ "name": "scaffold-open-source",
6
+ "version": "1.0.0",
7
+ "summary": "Bun and TypeScript CLI/MCP/library package scaffold for public Hasna open-source repos.",
8
+ "type": "open_source",
9
+ "status": "active",
10
+ "capabilities": ["cli", "mcp", "library", "tests", "ci", "docs"],
11
+ "techStack": ["Bun", "TypeScript", "Commander", "Zod"],
12
+ "tags": ["open-source", "cli", "mcp", "package"],
13
+ "source": {
14
+ "kind": "repo",
15
+ "id": "hasna_contracts",
16
+ "uri": "git+https://github.com/hasna/contracts.git"
17
+ },
18
+ "output": {
19
+ "packageManager": "bun",
20
+ "languages": ["TypeScript"],
21
+ "requiredFiles": ["package.json", "README.md", "src/index.ts"],
22
+ "requiredDirectories": ["src", "tests"],
23
+ "optionalDirectories": ["examples", "docs"]
24
+ },
25
+ "env": [
26
+ {
27
+ "key": "HASNA_HOME",
28
+ "description": "Optional Hasna state directory override.",
29
+ "required": false,
30
+ "secret": false,
31
+ "group": "runtime"
32
+ }
33
+ ],
34
+ "scripts": [
35
+ {
36
+ "name": "test",
37
+ "command": "bun test",
38
+ "description": "Run unit tests.",
39
+ "required": true
40
+ },
41
+ {
42
+ "name": "typecheck",
43
+ "command": "tsc --noEmit",
44
+ "description": "Run TypeScript type checking.",
45
+ "required": true
46
+ }
47
+ ],
48
+ "validationChecks": [
49
+ {
50
+ "id": "typecheck",
51
+ "kind": "typecheck",
52
+ "command": "bun run typecheck",
53
+ "required": true
54
+ },
55
+ {
56
+ "id": "tests",
57
+ "kind": "test",
58
+ "command": "bun test",
59
+ "required": true
60
+ }
61
+ ]
62
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/contracts",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Shared schemas and validators for Hasna open-source agent infrastructure contracts.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -45,12 +45,13 @@
45
45
  "typecheck": "tsc --noEmit",
46
46
  "test": "bun test",
47
47
  "lint": "tsc --noEmit",
48
- "verify:release": "bun run typecheck && bun test && bun run build && bun run smoke:dist && bun run pack:check",
48
+ "conformance": "bun run src/cli/index.ts conformance examples",
49
+ "verify:release": "bun run typecheck && bun test && bun run conformance && bun run build && bun run smoke:dist && bun run pack:check",
49
50
  "smoke:dist": "bun scripts/smoke-dist.ts",
50
- "pack:check": "npm pack --dry-run --json --ignore-scripts",
51
+ "pack:check": "bun pm pack --dry-run --ignore-scripts",
51
52
  "dev:cli": "bun run src/cli/index.ts",
52
53
  "prepack": "bun run verify:release",
53
- "prepublishOnly": "bun run typecheck && bun test"
54
+ "prepublishOnly": "bun run verify:release"
54
55
  },
55
56
  "keywords": [
56
57
  "contracts",