🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@absolutejs/manifest

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@absolutejs/manifest - npm Package Compare versions

Comparing version
0.7.2
to
0.7.3
+22
-1
dist/cli.js

@@ -193,2 +193,10 @@ #!/usr/bin/env bun

implements: Type.Optional(Type.Array(adapterImplementation)),
integration: Type.Optional(Type.Object({
description: Type.Optional(Type.String({ minLength: 1 })),
mode: Type.Union([
Type.Literal("adapter"),
Type.Literal("code-first"),
Type.Literal("recipe")
])
})),
lifecycle: Type.Optional(Type.Array(lifecycleStep)),

@@ -373,2 +381,12 @@ presets: Type.Optional(Type.Array(Type.Object({

};
var integrationFailure = (manifest) => {
const mode = manifest.integration?.mode;
if (mode === "recipe" && manifest.wiring.length === 0)
return 'integration mode "recipe" requires at least one wiring recipe';
if (mode === "adapter" && (manifest.implements?.length ?? 0) === 0)
return 'integration mode "adapter" requires at least one implementation';
if (mode === "code-first" && manifest.wiring.length > 0)
return 'integration mode "code-first" cannot declare automatic wiring recipes';
return;
};
var validate = (candidate, source) => {

@@ -379,2 +397,5 @@ if (!isManifestShaped(candidate))

if (Value.Check(manifestSchema, projected)) {
const invalidIntegration = integrationFailure(candidate);
if (invalidIntegration)
return invalid(invalidIntegration);
if (candidate.contract === 1 && Object.values(candidate.tools ?? {}).some((tool) => tool.authorization !== undefined))

@@ -762,3 +783,3 @@ return invalid("tool authorization metadata requires manifest contract 2");

//# debugId=158590DDEB43CAE864756E2164756E21
//# debugId=6F9C6BAFFBC1EA6864756E2164756E21
//# sourceMappingURL=cli.js.map
+1
-1

@@ -16,2 +16,2 @@ export { defineImplementation, defineManifest } from "./defineManifest";

export type { ManifestSecurityPosture, ManifestToolSecurityCode, ManifestToolSecurityIssue, ManifestToolSecurityPosture, } from "./security";
export type { AdapterImplementation, AdapterSlot, AnyPackageManifest, AuthorizedManifestTool, AuthorizedRuntimeTool, AuthorizedWorkspaceTool, BridgedAITool, BridgedMcpTool, ClientFramework, EnvRequirement, LifecycleStep, ManifestCategory, ManifestIdentity, ManifestDiscovery, ManifestRequirements, ManifestTool, LegacyManifestTool, LegacyRuntimeTool, LegacyWorkspaceTool, PackageManifest, PeerRequirement, RuntimeTool, ServiceRequirement, SettingsOf, SettingsPreset, ToolAnnotations, ToolAuthorization, ToolAuthorizationRequest, ToolAudience, ToolBindings, ToolEffect, ToolEnforcement, ToolExecution, ToolIdempotencyBinding, ToolResourceBinding, ToolSpendBinding, WiringImport, WiringPlacement, WiringRecipe, WiringSnippet, Workspace, WorkspaceCapability, WorkspaceTool, } from "./types";
export type { AdapterImplementation, AdapterSlot, AnyPackageManifest, AuthorizedManifestTool, AuthorizedRuntimeTool, AuthorizedWorkspaceTool, BridgedAITool, BridgedMcpTool, ClientFramework, EnvRequirement, LifecycleStep, ManifestCategory, ManifestIdentity, ManifestIntegration, ManifestDiscovery, ManifestRequirements, ManifestTool, LegacyManifestTool, LegacyRuntimeTool, LegacyWorkspaceTool, PackageManifest, PeerRequirement, RuntimeTool, ServiceRequirement, SettingsOf, SettingsPreset, ToolAnnotations, ToolAuthorization, ToolAuthorizationRequest, ToolAudience, ToolBindings, ToolEffect, ToolEnforcement, ToolExecution, ToolIdempotencyBinding, ToolResourceBinding, ToolSpendBinding, WiringImport, WiringPlacement, WiringRecipe, WiringSnippet, Workspace, WorkspaceCapability, WorkspaceTool, } from "./types";

@@ -531,2 +531,10 @@ // @bun

implements: Type.Optional(Type.Array(adapterImplementation)),
integration: Type.Optional(Type.Object({
description: Type.Optional(Type.String({ minLength: 1 })),
mode: Type.Union([
Type.Literal("adapter"),
Type.Literal("code-first"),
Type.Literal("recipe")
])
})),
lifecycle: Type.Optional(Type.Array(lifecycleStep)),

@@ -584,2 +592,12 @@ presets: Type.Optional(Type.Array(Type.Object({

};
var integrationFailure = (manifest) => {
const mode = manifest.integration?.mode;
if (mode === "recipe" && manifest.wiring.length === 0)
return 'integration mode "recipe" requires at least one wiring recipe';
if (mode === "adapter" && (manifest.implements?.length ?? 0) === 0)
return 'integration mode "adapter" requires at least one implementation';
if (mode === "code-first" && manifest.wiring.length > 0)
return 'integration mode "code-first" cannot declare automatic wiring recipes';
return;
};
var validate = (candidate, source) => {

@@ -590,2 +608,5 @@ if (!isManifestShaped(candidate))

if (Value2.Check(manifestSchema, projected)) {
const invalidIntegration = integrationFailure(candidate);
if (invalidIntegration)
return invalid(invalidIntegration);
if (candidate.contract === 1 && Object.values(candidate.tools ?? {}).some((tool) => tool.authorization !== undefined))

@@ -792,3 +813,3 @@ return invalid("tool authorization metadata requires manifest contract 2");

//# debugId=D1FD94F105058A1964756E2164756E21
//# debugId=39F6B9A4611BBF5A64756E2164756E21
//# sourceMappingURL=index.js.map

@@ -61,2 +61,6 @@ import { type AnyPackageManifest } from "./types";

}>>>;
integration: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
mode: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"adapter">, import("@sinclair/typebox").TLiteral<"code-first">, import("@sinclair/typebox").TLiteral<"recipe">]>;
}>>;
lifecycle: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{

@@ -63,0 +67,0 @@ command: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;

@@ -33,2 +33,16 @@ import type { Static, TSchema } from "@sinclair/typebox";

};
/**
* How a no-code host may integrate this package.
*
* `recipe` packages own at least one executable wiring recipe. `adapter`
* packages implement a named slot contract. `code-first` packages are
* discoverable ecosystem building blocks whose production integration needs
* host-owned instances, policies, stores, signers, or callbacks and must not
* be represented as one-click wiring.
*/
export type ManifestIntegration = {
mode: "adapter" | "code-first" | "recipe";
/** Plain-language explanation shown when automatic wiring is unavailable. */
description?: string;
};
export type EnvRequirement = {

@@ -276,2 +290,3 @@ /** 'GOOGLE_CLIENT_SECRET' */

identity: ManifestIdentity;
integration?: ManifestIntegration;
discovery?: ManifestDiscovery;

@@ -278,0 +293,0 @@ requires?: ManifestRequirements;

{
"name": "@absolutejs/manifest",
"version": "0.7.2",
"version": "0.7.3",
"description": "The AbsoluteJS package manifest contract. Every @absolutejs/* package exports a typed manifest (settings schema, env requirements, adapter slots, wiring recipes, AI tools) from its ./manifest subpath; this package is the contract those manifests are written against, plus bridges that turn any manifest into an AI tool map or a remote MCP tool registry.",

@@ -5,0 +5,0 @@ "repository": {

@@ -54,2 +54,18 @@ # @absolutejs/manifest

## No-code integration role
Packages explicitly describe how a no-code host may integrate them:
- `integration: { mode: "recipe" }` owns executable wiring and must publish at
least one wiring recipe.
- `integration: { mode: "adapter" }` fills a named ecosystem slot and must
publish at least one `implements` entry.
- `integration: { mode: "code-first", description: "…" }` remains searchable
and explainable, but the host must not pretend it can automatically assemble
production-specific stores, policies, signers, callbacks, or identities.
Older manifests without this field remain valid for compatibility. Consumers
may retain their historical inference for those packages, but current
manifests should declare the role explicitly.
## Why TypeBox

@@ -56,0 +72,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display