@ikenga/contract 0.3.0 → 0.4.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/engine.d.ts +509 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +79 -1
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/manifest.d.ts +829 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +10 -0
- package/dist/manifest.js.map +1 -1
- package/package.json +10 -10
- package/src/engine.test.ts +205 -0
- package/src/engine.ts +428 -0
- package/src/index.ts +1 -1
- package/src/manifest.ts +12 -0
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
//
|
|
9
9
|
// On disk: `<pkg-root>/manifest.json` (JSON, not TOML).
|
|
10
10
|
import { z } from 'zod';
|
|
11
|
+
import { EngineProvidesSchema } from './engine.js';
|
|
11
12
|
export const IKENGA_API_VERSION = 1;
|
|
12
13
|
export const IKENGA_API_MIN_SUPPORTED = 1;
|
|
13
14
|
// ---------- Sub-schemas ----------
|
|
@@ -139,7 +140,16 @@ export const ManifestSchema = z.object({
|
|
|
139
140
|
cron: z.array(CronEntrySchema).default([]),
|
|
140
141
|
window: WindowBlockSchema.optional(),
|
|
141
142
|
queries: QueriesBlockSchema.optional(),
|
|
143
|
+
/**
|
|
144
|
+
* Engine-adapter manifest block. Present iff this pkg is an engine-*
|
|
145
|
+
* adapter. Declares the agent id, display name, capability snapshot,
|
|
146
|
+
* and onboarding hints surfaced by the first-run wizard.
|
|
147
|
+
* See `@ikenga/contract/engine` for the source-of-truth schema.
|
|
148
|
+
*/
|
|
149
|
+
engine: EngineProvidesSchema.optional(),
|
|
142
150
|
});
|
|
151
|
+
/** Alias retained for symmetry with the Rust side / external consumers. */
|
|
152
|
+
export const PkgManifestSchema = ManifestSchema;
|
|
143
153
|
// ---------- Helpers ----------
|
|
144
154
|
/** Convert a reverse-DNS id to a slug: `com.ikenga.studio` → `com-ikenga-studio`. */
|
|
145
155
|
export function pkgSlug(id) {
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,0DAA0D;AAC1D,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,wEAAwE;AACxE,4DAA4D;AAC5D,EAAE;AACF,wDAAwD;AAExD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ikenga/contract",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Shared contract for the Ikenga pkg system: manifest schema, RPC types, Engine interface, capability scopes.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/
|
|
8
|
+
"url": "git+https://github.com/Royalti-io/ikenga-contract.git"
|
|
9
9
|
},
|
|
10
10
|
"type": "module",
|
|
11
11
|
"main": "./dist/index.js",
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"schemas",
|
|
47
47
|
"README.md"
|
|
48
48
|
],
|
|
49
|
-
"scripts": {
|
|
50
|
-
"build": "tsc -p tsconfig.json",
|
|
51
|
-
"dev": "tsc -p tsconfig.json --watch",
|
|
52
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
53
|
-
"generate:schemas": "node scripts/generate-schemas.mjs",
|
|
54
|
-
"test": "node --test --import=tsx 'src/**/*.test.ts'"
|
|
55
|
-
},
|
|
56
49
|
"dependencies": {
|
|
57
50
|
"zod": "^3.23.0",
|
|
58
51
|
"zod-to-json-schema": "^3.25.2"
|
|
@@ -63,5 +56,12 @@
|
|
|
63
56
|
},
|
|
64
57
|
"publishConfig": {
|
|
65
58
|
"access": "public"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "tsc -p tsconfig.json",
|
|
62
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
63
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
64
|
+
"generate:schemas": "node scripts/generate-schemas.mjs",
|
|
65
|
+
"test": "node --test --import=tsx 'src/**/*.test.ts'"
|
|
66
66
|
}
|
|
67
|
-
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { test } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import {
|
|
4
|
+
AgentCapabilitiesSchema,
|
|
5
|
+
EngineOnboardingSchema,
|
|
6
|
+
EngineProvidesSchema,
|
|
7
|
+
type AgentCapabilities,
|
|
8
|
+
type Engine,
|
|
9
|
+
type EngineProvides,
|
|
10
|
+
} from './engine.js';
|
|
11
|
+
import { ManifestSchema, PkgManifestSchema } from './manifest.js';
|
|
12
|
+
|
|
13
|
+
const fullCaps: AgentCapabilities = {
|
|
14
|
+
streaming: true,
|
|
15
|
+
toolUse: true,
|
|
16
|
+
thinking: true,
|
|
17
|
+
artifacts: true,
|
|
18
|
+
fileAttachments: true,
|
|
19
|
+
imageInput: true,
|
|
20
|
+
slashCommands: true,
|
|
21
|
+
modelSwitching: true,
|
|
22
|
+
promptCaching: true,
|
|
23
|
+
agenticTools: true,
|
|
24
|
+
mcp: true,
|
|
25
|
+
sessionResume: true,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const noopCaps: AgentCapabilities = {
|
|
29
|
+
streaming: false,
|
|
30
|
+
toolUse: false,
|
|
31
|
+
thinking: false,
|
|
32
|
+
artifacts: false,
|
|
33
|
+
fileAttachments: false,
|
|
34
|
+
imageInput: false,
|
|
35
|
+
slashCommands: false,
|
|
36
|
+
modelSwitching: false,
|
|
37
|
+
promptCaching: false,
|
|
38
|
+
agenticTools: false,
|
|
39
|
+
mcp: false,
|
|
40
|
+
sessionResume: false,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// ---------------- AgentCapabilitiesSchema ----------------
|
|
44
|
+
|
|
45
|
+
test('AgentCapabilitiesSchema accepts a fully-true snapshot', () => {
|
|
46
|
+
const r = AgentCapabilitiesSchema.safeParse(fullCaps);
|
|
47
|
+
assert.equal(r.success, true);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('AgentCapabilitiesSchema accepts an all-false (noop) snapshot', () => {
|
|
51
|
+
const r = AgentCapabilitiesSchema.safeParse(noopCaps);
|
|
52
|
+
assert.equal(r.success, true);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('AgentCapabilitiesSchema rejects missing fields', () => {
|
|
56
|
+
const { streaming: _drop, ...partial } = fullCaps;
|
|
57
|
+
const r = AgentCapabilitiesSchema.safeParse(partial);
|
|
58
|
+
assert.equal(r.success, false);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test('AgentCapabilitiesSchema rejects non-boolean values', () => {
|
|
62
|
+
const r = AgentCapabilitiesSchema.safeParse({ ...fullCaps, streaming: 'yes' });
|
|
63
|
+
assert.equal(r.success, false);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// ---------------- EngineOnboardingSchema ----------------
|
|
67
|
+
|
|
68
|
+
test('EngineOnboardingSchema defaults arrays when omitted', () => {
|
|
69
|
+
const r = EngineOnboardingSchema.parse({});
|
|
70
|
+
assert.deepEqual(r.requiredVaultKeys, []);
|
|
71
|
+
assert.deepEqual(r.requiredEnvVars, []);
|
|
72
|
+
assert.equal(r.authCommand, undefined);
|
|
73
|
+
assert.equal(r.docsUrl, undefined);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('EngineOnboardingSchema accepts full onboarding hints', () => {
|
|
77
|
+
const r = EngineOnboardingSchema.safeParse({
|
|
78
|
+
requiredVaultKeys: ['ANTHROPIC_API_KEY'],
|
|
79
|
+
requiredEnvVars: ['CLAUDE_HOME'],
|
|
80
|
+
authCommand: 'claude login',
|
|
81
|
+
docsUrl: 'https://docs.anthropic.com/claude-code',
|
|
82
|
+
});
|
|
83
|
+
assert.equal(r.success, true);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test('EngineOnboardingSchema rejects non-URL docsUrl', () => {
|
|
87
|
+
const r = EngineOnboardingSchema.safeParse({ docsUrl: 'not-a-url' });
|
|
88
|
+
assert.equal(r.success, false);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// ---------------- EngineProvidesSchema ----------------
|
|
92
|
+
|
|
93
|
+
test('EngineProvidesSchema accepts a minimal engine block', () => {
|
|
94
|
+
const r = EngineProvidesSchema.safeParse({
|
|
95
|
+
agentId: 'claude-code',
|
|
96
|
+
capabilities: fullCaps,
|
|
97
|
+
});
|
|
98
|
+
assert.equal(r.success, true);
|
|
99
|
+
if (r.success) {
|
|
100
|
+
assert.deepEqual(r.data.onboarding.requiredVaultKeys, []);
|
|
101
|
+
assert.deepEqual(r.data.onboarding.requiredEnvVars, []);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('EngineProvidesSchema rejects empty agentId', () => {
|
|
106
|
+
const r = EngineProvidesSchema.safeParse({
|
|
107
|
+
agentId: '',
|
|
108
|
+
capabilities: fullCaps,
|
|
109
|
+
});
|
|
110
|
+
assert.equal(r.success, false);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test('EngineProvidesSchema rejects missing capabilities', () => {
|
|
114
|
+
const r = EngineProvidesSchema.safeParse({ agentId: 'codex' });
|
|
115
|
+
assert.equal(r.success, false);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// ---------------- Manifest integration ----------------
|
|
119
|
+
|
|
120
|
+
test('Manifest accepts an optional engine block', () => {
|
|
121
|
+
const m = {
|
|
122
|
+
id: 'com.ikenga.engine-claude-code',
|
|
123
|
+
name: 'Claude Code Engine',
|
|
124
|
+
version: '0.1.0',
|
|
125
|
+
ikenga_api: '1',
|
|
126
|
+
kind: 'engine',
|
|
127
|
+
engine: {
|
|
128
|
+
agentId: 'claude-code',
|
|
129
|
+
display: 'Claude Code',
|
|
130
|
+
capabilities: fullCaps,
|
|
131
|
+
onboarding: {
|
|
132
|
+
requiredVaultKeys: ['ANTHROPIC_API_KEY'],
|
|
133
|
+
authCommand: 'claude login',
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
const r = ManifestSchema.safeParse(m);
|
|
138
|
+
assert.equal(r.success, true, r.success ? '' : JSON.stringify(r.error.issues));
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('Manifest still parses without an engine block (non-engine pkg)', () => {
|
|
142
|
+
const m = {
|
|
143
|
+
id: 'com.ikenga.studio',
|
|
144
|
+
name: 'Studio',
|
|
145
|
+
version: '0.1.0',
|
|
146
|
+
ikenga_api: '1',
|
|
147
|
+
};
|
|
148
|
+
const r = ManifestSchema.safeParse(m);
|
|
149
|
+
assert.equal(r.success, true);
|
|
150
|
+
if (r.success) assert.equal(r.data.engine, undefined);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
test('Manifest rejects a malformed engine block', () => {
|
|
154
|
+
const m = {
|
|
155
|
+
id: 'com.ikenga.engine-broken',
|
|
156
|
+
name: 'Broken',
|
|
157
|
+
version: '0.1.0',
|
|
158
|
+
ikenga_api: '1',
|
|
159
|
+
engine: { agentId: 'broken' }, // missing capabilities
|
|
160
|
+
};
|
|
161
|
+
const r = ManifestSchema.safeParse(m);
|
|
162
|
+
assert.equal(r.success, false);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
test('PkgManifestSchema alias is identical to ManifestSchema', () => {
|
|
166
|
+
// Same instance — symmetry check with the Rust side.
|
|
167
|
+
assert.equal(PkgManifestSchema, ManifestSchema);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// ---------------- Engine.metadata type-level check ----------------
|
|
171
|
+
|
|
172
|
+
test('Engine.metadata is structurally required at type level', () => {
|
|
173
|
+
// The type-level check is enforced by tsc at build time. This runtime
|
|
174
|
+
// test just exercises the shape so a regression that drops `metadata`
|
|
175
|
+
// would force a compile error here.
|
|
176
|
+
const sample: Engine['metadata'] = {
|
|
177
|
+
agentId: 'noop',
|
|
178
|
+
display: 'No-op',
|
|
179
|
+
capabilities: noopCaps,
|
|
180
|
+
onboarding: { requiredVaultKeys: [], requiredEnvVars: [] },
|
|
181
|
+
};
|
|
182
|
+
assert.equal(sample.agentId, 'noop');
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// ---------------- AdapterLoader manifest input shape ----------------
|
|
186
|
+
|
|
187
|
+
test('AdapterLoader.load consumes a manifest carrying EngineProvides', () => {
|
|
188
|
+
const provides: EngineProvides = {
|
|
189
|
+
agentId: 'codex',
|
|
190
|
+
display: 'OpenAI Codex',
|
|
191
|
+
capabilities: { ...noopCaps, streaming: true, mcp: true },
|
|
192
|
+
onboarding: {
|
|
193
|
+
requiredVaultKeys: ['OPENAI_API_KEY'],
|
|
194
|
+
requiredEnvVars: [],
|
|
195
|
+
docsUrl: 'https://openai.com/codex',
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
// Loader input is `{ id: string; engine: EngineProvides }` — verify
|
|
199
|
+
// we can construct one structurally.
|
|
200
|
+
const input: { id: string; engine: EngineProvides } = {
|
|
201
|
+
id: 'com.ikenga.engine-codex',
|
|
202
|
+
engine: provides,
|
|
203
|
+
};
|
|
204
|
+
assert.equal(input.engine.agentId, 'codex');
|
|
205
|
+
});
|