@ikenga/contract 0.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ // Ikenga pkg manifest schema — mirrors the Rust schema in
2
+ // `royalti-io/ikenga` at `src-tauri/src/pkg/manifest.rs`.
3
+ //
4
+ // Source of truth is the Rust struct. This zod schema is used by the CLI,
5
+ // registry, and tooling for client-side parse + validation. Field changes
6
+ // MUST be made in lockstep with the Rust struct, and IKENGA_API_VERSION
7
+ // must be bumped if semantics change in a non-additive way.
8
+ //
9
+ // On disk: `<pkg-root>/manifest.json` (JSON, not TOML).
10
+ import { z } from 'zod';
11
+ export const IKENGA_API_VERSION = 1;
12
+ export const IKENGA_API_MIN_SUPPORTED = 1;
13
+ // ---------- Sub-schemas ----------
14
+ export const AuthorSchema = z.object({
15
+ name: z.string(),
16
+ key: z.string().optional(),
17
+ });
18
+ export const McpServerSchema = z.object({
19
+ name: z.string(),
20
+ command: z.string(),
21
+ args: z.array(z.string()).default([]),
22
+ env: z.record(z.string()).default({}),
23
+ /** "per-call" (default) | "long-lived" */
24
+ lifecycle: z.enum(['per-call', 'long-lived']).optional(),
25
+ });
26
+ export const SidecarSpecSchema = z.object({
27
+ /** Must start with `pa-<pkg-slug>-` (slug = id with `.` → `-`). */
28
+ name: z.string(),
29
+ /** Path inside pkg dir; may contain `{target}` (host triple). */
30
+ bin: z.string(),
31
+ /** "json" (default) | "raw" */
32
+ stdio: z.string().default('json'),
33
+ });
34
+ export const PermissionsSchema = z.object({
35
+ 'shell.execute': z.array(z.string()).default([]),
36
+ 'fs.read': z.array(z.string()).default([]),
37
+ 'fs.write': z.array(z.string()).default([]),
38
+ net: z.array(z.string()).default([]),
39
+ 'supabase.tables': z.array(z.string()).default([]),
40
+ 'vault.keys': z.array(z.string()).default([]),
41
+ }).default({});
42
+ export const NavEntrySchema = z.object({
43
+ id: z.string(),
44
+ label: z.string(),
45
+ icon: z.string().optional(),
46
+ section: z.string().optional(),
47
+ route: z.string(),
48
+ });
49
+ export const UiRouteSchema = z.object({
50
+ path: z.string(),
51
+ /** "iframe" | "component" (component is builtin-only) */
52
+ kind: z.enum(['iframe', 'component']),
53
+ /** iframe: URL or pkg-relative html path. component: identifier. */
54
+ source: z.string(),
55
+ });
56
+ export const CommandPaletteEntrySchema = z.object({
57
+ id: z.string(),
58
+ label: z.string(),
59
+ shortcut: z.string().optional(),
60
+ action: z.unknown(),
61
+ });
62
+ export const SidePaneViewerSchema = z.object({
63
+ id: z.string(),
64
+ label: z.string(),
65
+ route: z.string(),
66
+ });
67
+ export const UiBlockSchema = z.object({
68
+ nav: z.array(NavEntrySchema).default([]),
69
+ routes: z.array(UiRouteSchema).default([]),
70
+ command_palette: z.array(CommandPaletteEntrySchema).default([]),
71
+ side_pane_viewers: z.array(SidePaneViewerSchema).default([]),
72
+ /** Per-directive CSP overrides for the iframe content. */
73
+ csp: z.record(z.array(z.string())).optional(),
74
+ /** Per-directive Permission-Policy values. */
75
+ permissions: z.record(z.array(z.string())).optional(),
76
+ }).default({});
77
+ export const SettingsFieldSchema = z.object({
78
+ key: z.string(),
79
+ type: z.enum(['string', 'number', 'boolean', 'secret']),
80
+ label: z.string(),
81
+ default: z.unknown().optional(),
82
+ description: z.string().optional(),
83
+ });
84
+ export const SettingsBlockSchema = z.object({
85
+ schema: z.array(SettingsFieldSchema).default([]),
86
+ });
87
+ export const IykeRouteSchema = z.object({
88
+ method: z.enum(['GET', 'POST']),
89
+ /** Must start with `/pkg/<id>/`. */
90
+ path: z.string(),
91
+ /** `sidecar:<name> <sub>` | `event:<name>` */
92
+ handler: z.string(),
93
+ });
94
+ export const IykeBlockSchema = z.object({
95
+ routes: z.array(IykeRouteSchema).default([]),
96
+ events: z.array(z.string()).default([]),
97
+ });
98
+ export const CronEntrySchema = z.object({
99
+ id: z.string(),
100
+ /** 6-field cron expression: sec min hour day month dow */
101
+ expr: z.string(),
102
+ handler: z.string(),
103
+ env_from_settings: z.array(z.string()).default([]),
104
+ });
105
+ export const WindowBlockSchema = z.object({
106
+ label: z.string(),
107
+ url: z.string(),
108
+ size: z.tuple([z.number(), z.number()]).optional(),
109
+ decorations: z.boolean().optional(),
110
+ menu: z.string().optional(),
111
+ });
112
+ export const QueriesBlockSchema = z.object({
113
+ key_prefixes: z.array(z.string()).default([]),
114
+ });
115
+ // ---------- Manifest ----------
116
+ export const ManifestSchema = z.object({
117
+ /** Reverse-DNS, e.g. `com.ikenga.studio`. */
118
+ id: z.string().regex(/^[a-z0-9]+(\.[a-z0-9-]+)+$/, 'must be reverse-DNS'),
119
+ name: z.string(),
120
+ version: z.string(),
121
+ /** Numeric string — host accepts versions in [MIN, CURRENT]. */
122
+ ikenga_api: z.string().regex(/^\d+$/),
123
+ /** Hint, not enforced: "skill" | "embedded" | "windowed" | "engine". */
124
+ kind: z.string().optional(),
125
+ author: AuthorSchema.optional(),
126
+ /** Rust target triples; empty = host-agnostic. */
127
+ targets: z.array(z.string()).default([]),
128
+ // Capability blocks (all optional — kernel walks present blocks)
129
+ skills: z.string().optional(),
130
+ commands: z.string().optional(),
131
+ agents: z.string().optional(),
132
+ mcp: z.array(McpServerSchema).default([]),
133
+ sidecars: z.array(SidecarSpecSchema).default([]),
134
+ permissions: PermissionsSchema,
135
+ migrations: z.string().optional(),
136
+ settings: SettingsBlockSchema.optional(),
137
+ ui: UiBlockSchema,
138
+ iyke: IykeBlockSchema.optional(),
139
+ cron: z.array(CronEntrySchema).default([]),
140
+ window: WindowBlockSchema.optional(),
141
+ queries: QueriesBlockSchema.optional(),
142
+ });
143
+ // ---------- Helpers ----------
144
+ /** Convert a reverse-DNS id to a slug: `com.ikenga.studio` → `com-ikenga-studio`. */
145
+ export function pkgSlug(id) {
146
+ return id.replaceAll('.', '-');
147
+ }
148
+ /** Sidecar names must start with `pa-<pkg-slug>-`. */
149
+ export function expectedSidecarPrefix(id) {
150
+ return `pa-${pkgSlug(id)}-`;
151
+ }
152
+ export function isCompatible(api) {
153
+ const n = Number.parseInt(api, 10);
154
+ if (Number.isNaN(n))
155
+ return false;
156
+ return n >= IKENGA_API_MIN_SUPPORTED && n <= IKENGA_API_VERSION;
157
+ }
158
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
package/dist/rpc.d.ts ADDED
@@ -0,0 +1,130 @@
1
+ export declare const CONTRACT_VERSION: 1;
2
+ export interface RpcRequest<TParams = unknown> {
3
+ v: typeof CONTRACT_VERSION;
4
+ id: string;
5
+ method: string;
6
+ params: TParams;
7
+ }
8
+ export interface RpcResponseOk<TResult = unknown> {
9
+ v: typeof CONTRACT_VERSION;
10
+ id: string;
11
+ result: TResult;
12
+ }
13
+ export interface RpcResponseErr {
14
+ v: typeof CONTRACT_VERSION;
15
+ id: string;
16
+ error: {
17
+ code: RpcErrorCode;
18
+ message: string;
19
+ data?: unknown;
20
+ };
21
+ }
22
+ export type RpcResponse<T = unknown> = RpcResponseOk<T> | RpcResponseErr;
23
+ export type RpcMessage = RpcRequest | RpcResponse;
24
+ export type RpcErrorCode = 'method_not_found' | 'invalid_params' | 'scope_denied' | 'pkg_not_authenticated' | 'shell_unavailable' | 'internal_error';
25
+ export interface RpcNotification<TParams = unknown> {
26
+ v: typeof CONTRACT_VERSION;
27
+ notify: string;
28
+ params: TParams;
29
+ }
30
+ export interface RpcMethods {
31
+ 'identity.whoami': {
32
+ req: void;
33
+ res: {
34
+ user_id: string;
35
+ tenant_id: string | null;
36
+ };
37
+ };
38
+ 'engine.start_session': {
39
+ req: {
40
+ systemPrompt?: string;
41
+ toolAllowList?: string[];
42
+ };
43
+ res: {
44
+ sessionId: string;
45
+ };
46
+ };
47
+ 'engine.stream': {
48
+ req: {
49
+ sessionId: string;
50
+ input: string;
51
+ };
52
+ res: {
53
+ ok: true;
54
+ };
55
+ };
56
+ 'engine.cancel': {
57
+ req: {
58
+ sessionId: string;
59
+ };
60
+ res: {
61
+ ok: true;
62
+ };
63
+ };
64
+ 'shell.notify': {
65
+ req: {
66
+ title: string;
67
+ body?: string;
68
+ level?: 'info' | 'warn' | 'error';
69
+ };
70
+ res: void;
71
+ };
72
+ 'shell.open_pane': {
73
+ req: {
74
+ route?: string;
75
+ pkg_id?: string;
76
+ split?: 'horizontal' | 'vertical';
77
+ };
78
+ res: {
79
+ pane_id: string;
80
+ };
81
+ };
82
+ 'tasks.list': {
83
+ req: {
84
+ status?: string;
85
+ owner?: string;
86
+ };
87
+ res: unknown[];
88
+ };
89
+ 'tasks.create': {
90
+ req: {
91
+ subject: string;
92
+ description?: string;
93
+ };
94
+ res: {
95
+ id: string;
96
+ };
97
+ };
98
+ 'email_drafts.list': {
99
+ req: {
100
+ status?: string;
101
+ };
102
+ res: unknown[];
103
+ };
104
+ 'email_drafts.create': {
105
+ req: {
106
+ subject: string;
107
+ body_html: string;
108
+ to: string[];
109
+ };
110
+ res: {
111
+ id: string;
112
+ };
113
+ };
114
+ }
115
+ export interface ShellToPkgNotifications {
116
+ 'engine.event': {
117
+ sessionId: string;
118
+ event: import('./engine.js').EngineEvent;
119
+ };
120
+ 'shell.theme_changed': {
121
+ theme: 'light' | 'dark';
122
+ };
123
+ 'shell.pane_focused': {
124
+ focused: boolean;
125
+ };
126
+ }
127
+ export type RpcMethodName = keyof RpcMethods;
128
+ export type RpcParams<M extends RpcMethodName> = RpcMethods[M]['req'];
129
+ export type RpcResult<M extends RpcMethodName> = RpcMethods[M]['res'];
130
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
package/dist/rpc.js ADDED
@@ -0,0 +1,8 @@
1
+ // Shell ↔ pkg RPC. Same envelope on both transports:
2
+ // - iframe pkgs: postMessage over MessageChannel
3
+ // - mounted pkgs: direct function call on the host bus
4
+ //
5
+ // Methods are namespaced by capability area. The kernel enforces scopes
6
+ // declared in the pkg manifest before dispatching.
7
+ export const CONTRACT_VERSION = 1;
8
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,kDAAkD;AAClD,wDAAwD;AACxD,EAAE;AACF,wEAAwE;AACxE,mDAAmD;AAEnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ScopeDef {
2
+ scope: string;
3
+ description: string;
4
+ /** Whether this scope requires explicit user consent at install time. */
5
+ sensitive?: boolean;
6
+ }
7
+ export declare const SCOPE_CATALOGUE: ScopeDef[];
8
+ export declare function isKnownScope(scope: string): boolean;
9
+ export declare function isSensitiveScope(scope: string): boolean;
10
+ export type Scope = string;
11
+ //# sourceMappingURL=scopes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../src/scopes.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,EAAE,QAAQ,EAgCrC,CAAC;AAIF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMvD;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC"}
package/dist/scopes.js ADDED
@@ -0,0 +1,56 @@
1
+ // Capability scopes a pkg can request in its manifest. The kernel enforces
2
+ // these at the IPC boundary — scope-denied requests fail with
3
+ // `RpcErrorCode.scope_denied` before reaching the handler.
4
+ //
5
+ // Scope syntax: `<resource>:<action>` or `<resource>:<action>:<qualifier>`
6
+ //
7
+ // Pattern wildcards are allowed in qualifiers only:
8
+ // "fs:read:projects/*" ✓ (file under /projects/)
9
+ // "tasks:*" ✗ (action wildcards forbidden — be explicit)
10
+ export const SCOPE_CATALOGUE = [
11
+ // identity
12
+ { scope: 'identity:read', description: 'Read the current user / tenant identity.' },
13
+ // tasks
14
+ { scope: 'tasks:read', description: 'List and read tasks.' },
15
+ { scope: 'tasks:write', description: 'Create, update, complete tasks.' },
16
+ // contacts
17
+ { scope: 'contacts:read', description: 'Read the contacts directory.' },
18
+ { scope: 'contacts:write', description: 'Create or update contacts.', sensitive: true },
19
+ // email
20
+ { scope: 'email_drafts:read', description: 'Read drafts in the email queue.' },
21
+ { scope: 'email_drafts:write', description: 'Create or modify drafts.' },
22
+ { scope: 'email:send', description: 'Send email through the shell delivery layer.', sensitive: true },
23
+ // social
24
+ { scope: 'social:read', description: 'Read queued and posted social items.' },
25
+ { scope: 'social:publish', description: 'Publish to connected social accounts.', sensitive: true },
26
+ // filesystem (shell-mediated)
27
+ { scope: 'fs:read', description: 'Read files inside the shell-managed sandbox.' },
28
+ { scope: 'fs:write', description: 'Write files inside the shell-managed sandbox.', sensitive: true },
29
+ // engine
30
+ { scope: 'engine:invoke', description: 'Start sessions and stream from the active AI engine.' },
31
+ { scope: 'engine:register_mcp', description: 'Register additional MCP servers with the engine.', sensitive: true },
32
+ // shell chrome
33
+ { scope: 'shell:notify', description: 'Show notifications in the shell UI.' },
34
+ { scope: 'shell:open_pane', description: 'Open or split panes in the shell layout.' },
35
+ ];
36
+ const SCOPE_INDEX = new Map(SCOPE_CATALOGUE.map((s) => [s.scope, s]));
37
+ export function isKnownScope(scope) {
38
+ if (SCOPE_INDEX.has(scope))
39
+ return true;
40
+ // Allow qualified variants (`fs:read:projects/*`) only if the unqualified
41
+ // form is in the catalogue.
42
+ const parts = scope.split(':');
43
+ if (parts.length < 3)
44
+ return false;
45
+ return SCOPE_INDEX.has(`${parts[0]}:${parts[1]}`);
46
+ }
47
+ export function isSensitiveScope(scope) {
48
+ const def = SCOPE_INDEX.get(scope);
49
+ if (def)
50
+ return !!def.sensitive;
51
+ const parts = scope.split(':');
52
+ if (parts.length < 3)
53
+ return false;
54
+ return !!SCOPE_INDEX.get(`${parts[0]}:${parts[1]}`)?.sensitive;
55
+ }
56
+ //# sourceMappingURL=scopes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.js","sourceRoot":"","sources":["../src/scopes.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@ikenga/contract",
3
+ "version": "0.3.0",
4
+ "description": "Shared contract for the Ikenga pkg system: manifest schema, RPC types, Engine interface, capability scopes.",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/royalti-io/ikenga-contract.git"
9
+ },
10
+ "type": "module",
11
+ "main": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ },
18
+ "./manifest": {
19
+ "types": "./dist/manifest.d.ts",
20
+ "import": "./dist/manifest.js"
21
+ },
22
+ "./rpc": {
23
+ "types": "./dist/rpc.d.ts",
24
+ "import": "./dist/rpc.js"
25
+ },
26
+ "./engine": {
27
+ "types": "./dist/engine.d.ts",
28
+ "import": "./dist/engine.js"
29
+ },
30
+ "./scopes": {
31
+ "types": "./dist/scopes.d.ts",
32
+ "import": "./dist/scopes.js"
33
+ },
34
+ "./iyke": {
35
+ "types": "./dist/iyke.d.ts",
36
+ "import": "./dist/iyke.js"
37
+ },
38
+ "./artifact": {
39
+ "types": "./dist/artifact.d.ts",
40
+ "import": "./dist/artifact.js"
41
+ }
42
+ },
43
+ "files": [
44
+ "dist",
45
+ "src",
46
+ "schemas",
47
+ "README.md"
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
+ "dependencies": {
57
+ "zod": "^3.23.0",
58
+ "zod-to-json-schema": "^3.25.2"
59
+ },
60
+ "devDependencies": {
61
+ "tsx": "^4.21.0",
62
+ "typescript": "^5.4.0"
63
+ },
64
+ "publishConfig": {
65
+ "access": "public"
66
+ }
67
+ }