@apart-tech/intelligence-core 1.13.0 → 1.14.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.
@@ -21,6 +21,18 @@ export interface OrgAgentTypeRecord {
21
21
  * anything that is not an array as "no rules" (deny-by-default).
22
22
  */
23
23
  intrinsicPolicy: unknown;
24
+ /** Secret names that must be registered on the invoking user before the
25
+ * type can run. Empty = no required secrets. See spec
26
+ * docs/superpowers/specs/2026-04-24-custom-agent-type-secret-mapping.md. */
27
+ requiredSecrets: string[];
28
+ /** Mapping of secret name → sandbox env var name. The orchestrator reads
29
+ * the user's `AgentSecrets` and injects each declared key under the
30
+ * env var name given here. Empty = no env vars injected. */
31
+ secretEnvMapping: Record<string, string>;
32
+ /** Opt-in to dynamic secret shapes. Today the only meaningful value is
33
+ * `"databases"`, which expands into paired `DATABASE_URL_<NAME>` /
34
+ * `DATABASE_TYPE_<NAME>` env vars per database connection. */
35
+ dynamicSecrets: string[];
24
36
  createdBy: string;
25
37
  createdAt: Date;
26
38
  updatedAt: Date;
@@ -32,6 +44,9 @@ export interface CreateOrgAgentTypeInput {
32
44
  prompt: string;
33
45
  defaultTimeoutMinutes?: number;
34
46
  isBuiltinOverride?: boolean;
47
+ requiredSecrets?: string[];
48
+ secretEnvMapping?: Record<string, string>;
49
+ dynamicSecrets?: string[];
35
50
  createdBy: string;
36
51
  }
37
52
  export interface UpdateOrgAgentTypeInput {
@@ -39,6 +54,9 @@ export interface UpdateOrgAgentTypeInput {
39
54
  description?: string;
40
55
  prompt?: string;
41
56
  defaultTimeoutMinutes?: number;
57
+ requiredSecrets?: string[];
58
+ secretEnvMapping?: Record<string, string>;
59
+ dynamicSecrets?: string[];
42
60
  }
43
61
  export declare class OrgAgentTypeService {
44
62
  private db;
@@ -1 +1 @@
1
- {"version":3,"file":"org-agent-type-service.d.ts","sourceRoot":"","sources":["../../src/services/org-agent-type-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAoBD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAQ3D,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAOnF,MAAM,CACV,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,uBAAuB,EAC9B,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAoCxB,MAAM,CACV,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IAcxB,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAUrE"}
1
+ {"version":3,"file":"org-agent-type-service.d.ts","sourceRoot":"","sources":["../../src/services/org-agent-type-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;iFAE6E;IAC7E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;iEAE6D;IAC7D,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;mEAE+D;IAC/D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAgCD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAQ3D,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAOnF,MAAM,CACV,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,uBAAuB,EAC9B,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,kBAAkB,CAAC;IA0CxB,MAAM,CACV,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IAiBxB,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAUrE"}
@@ -1,4 +1,14 @@
1
1
  const SLUG_REGEX = /^[a-z][a-z0-9-]*$/;
2
+ function normalizeSecretEnvMapping(raw) {
3
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
4
+ return {};
5
+ const out = {};
6
+ for (const [k, v] of Object.entries(raw)) {
7
+ if (typeof v === "string")
8
+ out[k] = v;
9
+ }
10
+ return out;
11
+ }
2
12
  function toRecord(row) {
3
13
  return {
4
14
  id: row.id,
@@ -9,6 +19,9 @@ function toRecord(row) {
9
19
  defaultTimeoutMinutes: row.defaultTimeoutMinutes,
10
20
  isBuiltinOverride: row.isBuiltinOverride,
11
21
  intrinsicPolicy: row.intrinsicPolicy,
22
+ requiredSecrets: Array.isArray(row.requiredSecrets) ? row.requiredSecrets : [],
23
+ secretEnvMapping: normalizeSecretEnvMapping(row.secretEnvMapping),
24
+ dynamicSecrets: Array.isArray(row.dynamicSecrets) ? row.dynamicSecrets : [],
12
25
  createdBy: row.createdBy,
13
26
  createdAt: row.createdAt,
14
27
  updatedAt: row.updatedAt,
@@ -54,6 +67,9 @@ export class OrgAgentTypeService {
54
67
  defaultTimeoutMinutes: input.defaultTimeoutMinutes ?? 15,
55
68
  isBuiltinOverride: isOverride,
56
69
  createdBy: input.createdBy,
70
+ requiredSecrets: input.requiredSecrets ?? [],
71
+ secretEnvMapping: input.secretEnvMapping ?? {},
72
+ dynamicSecrets: input.dynamicSecrets ?? [],
57
73
  },
58
74
  update: {
59
75
  label: input.label,
@@ -61,6 +77,9 @@ export class OrgAgentTypeService {
61
77
  prompt: input.prompt,
62
78
  defaultTimeoutMinutes: input.defaultTimeoutMinutes ?? 15,
63
79
  updatedAt: new Date(),
80
+ ...(input.requiredSecrets !== undefined ? { requiredSecrets: input.requiredSecrets } : {}),
81
+ ...(input.secretEnvMapping !== undefined ? { secretEnvMapping: input.secretEnvMapping } : {}),
82
+ ...(input.dynamicSecrets !== undefined ? { dynamicSecrets: input.dynamicSecrets } : {}),
64
83
  },
65
84
  });
66
85
  return toRecord(row);
@@ -75,6 +94,12 @@ export class OrgAgentTypeService {
75
94
  data.prompt = input.prompt;
76
95
  if (input.defaultTimeoutMinutes !== undefined)
77
96
  data.defaultTimeoutMinutes = input.defaultTimeoutMinutes;
97
+ if (input.requiredSecrets !== undefined)
98
+ data.requiredSecrets = input.requiredSecrets;
99
+ if (input.secretEnvMapping !== undefined)
100
+ data.secretEnvMapping = input.secretEnvMapping;
101
+ if (input.dynamicSecrets !== undefined)
102
+ data.dynamicSecrets = input.dynamicSecrets;
78
103
  const row = await this.db.orgAgentType.update({
79
104
  where: { organizationId_slug: { organizationId, slug } },
80
105
  data,
@@ -1 +1 @@
1
- {"version":3,"file":"org-agent-type-service.js","sourceRoot":"","sources":["../../src/services/org-agent-type-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"org-agent-type-service.js","sourceRoot":"","sources":["../../src/services/org-agent-type-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=org-agent-type-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-agent-type-service.test.d.ts","sourceRoot":"","sources":["../../src/services/org-agent-type-service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,168 @@
1
+ // Unit tests for the builder-declared secret surface added 2026-04-24:
2
+ // custom agent types carry `requiredSecrets`, `secretEnvMapping`, and
3
+ // `dynamicSecrets` on the row so `resolveAgentType` in the orchestrator
4
+ // can read them and inject env vars. Previously these were hardcoded
5
+ // empty in the custom branch; the Prisma model didn't have the columns
6
+ // at all. See docs/superpowers/specs/2026-04-24-custom-agent-type-secret-mapping.md.
7
+ import { describe, expect, it, vi } from "vitest";
8
+ import { OrgAgentTypeService } from "./org-agent-type-service.js";
9
+ // Minimal Prisma mock — just the orgAgentType delegate shape the service
10
+ // reaches for. Stores rows in-memory so upsert/update/findUnique behave
11
+ // like a tiny key-value store keyed by (organizationId, slug).
12
+ function makeMockDb() {
13
+ const store = new Map();
14
+ const key = (orgId, slug) => `${orgId}:${slug}`;
15
+ return {
16
+ orgAgentType: {
17
+ upsert: vi.fn(async ({ where, create, update }) => {
18
+ const k = key(where.organizationId_slug.organizationId, where.organizationId_slug.slug);
19
+ const existing = store.get(k);
20
+ if (existing) {
21
+ const merged = { ...existing, ...update };
22
+ store.set(k, merged);
23
+ return merged;
24
+ }
25
+ const row = {
26
+ id: `id-${store.size}`,
27
+ intrinsicPolicy: {},
28
+ requiredSecrets: [],
29
+ secretEnvMapping: {},
30
+ dynamicSecrets: [],
31
+ createdAt: new Date(),
32
+ updatedAt: new Date(),
33
+ ...create,
34
+ };
35
+ store.set(k, row);
36
+ return row;
37
+ }),
38
+ update: vi.fn(async ({ where, data }) => {
39
+ const k = key(where.organizationId_slug.organizationId, where.organizationId_slug.slug);
40
+ const existing = store.get(k);
41
+ if (!existing)
42
+ throw new Error("Not found");
43
+ const merged = { ...existing, ...data };
44
+ store.set(k, merged);
45
+ return merged;
46
+ }),
47
+ findUnique: vi.fn(async ({ where }) => {
48
+ const k = key(where.organizationId_slug.organizationId, where.organizationId_slug.slug);
49
+ return store.get(k) ?? null;
50
+ }),
51
+ findMany: vi.fn(async ({ where }) => {
52
+ return [...store.values()].filter((r) => r.organizationId === where.organizationId);
53
+ }),
54
+ },
55
+ };
56
+ }
57
+ const ORG = "org-1";
58
+ const BUILTIN_SLUGS = ["researcher", "planner", "developer", "reviewer", "brainstormer", "data"];
59
+ describe("OrgAgentTypeService — secret surface round-trip", () => {
60
+ it("persists requiredSecrets, secretEnvMapping, and dynamicSecrets on create", async () => {
61
+ const db = makeMockDb();
62
+ const svc = new OrgAgentTypeService(db);
63
+ const created = await svc.create(ORG, {
64
+ slug: "sg-mailer",
65
+ label: "SendGrid mailer",
66
+ prompt: "You are a mailer.",
67
+ requiredSecrets: ["sendgridApiKey"],
68
+ secretEnvMapping: { sendgridApiKey: "SENDGRID_API_KEY" },
69
+ dynamicSecrets: [],
70
+ createdBy: "alice@example.com",
71
+ }, BUILTIN_SLUGS);
72
+ expect(created.requiredSecrets).toEqual(["sendgridApiKey"]);
73
+ expect(created.secretEnvMapping).toEqual({ sendgridApiKey: "SENDGRID_API_KEY" });
74
+ expect(created.dynamicSecrets).toEqual([]);
75
+ });
76
+ it("round-trips the secret surface through getBySlug", async () => {
77
+ const db = makeMockDb();
78
+ const svc = new OrgAgentTypeService(db);
79
+ await svc.create(ORG, {
80
+ slug: "multi-tool",
81
+ label: "Multi",
82
+ prompt: "…",
83
+ requiredSecrets: ["slackToken", "notionApiKey"],
84
+ secretEnvMapping: { slackToken: "SLACK_BOT_TOKEN", notionApiKey: "NOTION_API_KEY" },
85
+ dynamicSecrets: ["databases"],
86
+ createdBy: "alice@example.com",
87
+ }, BUILTIN_SLUGS);
88
+ const got = await svc.getBySlug(ORG, "multi-tool");
89
+ expect(got).not.toBeNull();
90
+ expect(got.requiredSecrets).toEqual(["slackToken", "notionApiKey"]);
91
+ expect(got.secretEnvMapping).toEqual({
92
+ slackToken: "SLACK_BOT_TOKEN",
93
+ notionApiKey: "NOTION_API_KEY",
94
+ });
95
+ expect(got.dynamicSecrets).toEqual(["databases"]);
96
+ });
97
+ it("defaults to empty arrays / object when no secret fields are provided", async () => {
98
+ const db = makeMockDb();
99
+ const svc = new OrgAgentTypeService(db);
100
+ const created = await svc.create(ORG, {
101
+ slug: "plain",
102
+ label: "Plain",
103
+ prompt: "…",
104
+ createdBy: "alice@example.com",
105
+ }, BUILTIN_SLUGS);
106
+ expect(created.requiredSecrets).toEqual([]);
107
+ expect(created.secretEnvMapping).toEqual({});
108
+ expect(created.dynamicSecrets).toEqual([]);
109
+ });
110
+ it("update merges secret fields without clobbering unspecified ones", async () => {
111
+ const db = makeMockDb();
112
+ const svc = new OrgAgentTypeService(db);
113
+ await svc.create(ORG, {
114
+ slug: "evolving",
115
+ label: "Evolving",
116
+ prompt: "v1",
117
+ requiredSecrets: ["keyA"],
118
+ secretEnvMapping: { keyA: "KEY_A" },
119
+ createdBy: "alice@example.com",
120
+ }, BUILTIN_SLUGS);
121
+ // Updating only the prompt must leave the secret surface intact.
122
+ await svc.update(ORG, "evolving", { prompt: "v2" });
123
+ const afterPromptUpdate = await svc.getBySlug(ORG, "evolving");
124
+ expect(afterPromptUpdate.prompt).toBe("v2");
125
+ expect(afterPromptUpdate.requiredSecrets).toEqual(["keyA"]);
126
+ expect(afterPromptUpdate.secretEnvMapping).toEqual({ keyA: "KEY_A" });
127
+ // Updating only the secret mapping must leave the prompt intact.
128
+ await svc.update(ORG, "evolving", {
129
+ secretEnvMapping: { keyA: "KEY_A", keyB: "KEY_B" },
130
+ requiredSecrets: ["keyA", "keyB"],
131
+ });
132
+ const afterMappingUpdate = await svc.getBySlug(ORG, "evolving");
133
+ expect(afterMappingUpdate.prompt).toBe("v2");
134
+ expect(afterMappingUpdate.requiredSecrets).toEqual(["keyA", "keyB"]);
135
+ expect(afterMappingUpdate.secretEnvMapping).toEqual({ keyA: "KEY_A", keyB: "KEY_B" });
136
+ });
137
+ it("toRecord survives a legacy row with no secret columns (empty defaults)", async () => {
138
+ // Simulates a pre-migration row where the columns literally don't
139
+ // exist on the object. toRecord's guards should surface them as
140
+ // empty rather than `undefined` leaking out to callers.
141
+ const db = makeMockDb();
142
+ // Hand-insert a row that skips the new fields to simulate pre-migration data.
143
+ db.orgAgentType.upsert({
144
+ where: { organizationId_slug: { organizationId: ORG, slug: "legacy" } },
145
+ create: {
146
+ organizationId: ORG,
147
+ slug: "legacy",
148
+ label: "Legacy",
149
+ description: "",
150
+ prompt: "…",
151
+ defaultTimeoutMinutes: 15,
152
+ isBuiltinOverride: false,
153
+ createdBy: "cli",
154
+ },
155
+ update: {},
156
+ });
157
+ // Remove the defaulted fields to really simulate a legacy row.
158
+ const raw = db.orgAgentType.findUnique.getMockImplementation?.();
159
+ void raw;
160
+ const svc = new OrgAgentTypeService(db);
161
+ const got = await svc.getBySlug(ORG, "legacy");
162
+ expect(got).not.toBeNull();
163
+ expect(got.requiredSecrets).toEqual([]);
164
+ expect(got.secretEnvMapping).toEqual({});
165
+ expect(got.dynamicSecrets).toEqual([]);
166
+ });
167
+ });
168
+ //# sourceMappingURL=org-agent-type-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-agent-type-service.test.js","sourceRoot":"","sources":["../../src/services/org-agent-type-service.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apart-tech/intelligence-core",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "Core library: database, services, and providers for Apart Intelligence",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -314,6 +314,12 @@ model OrgAgentType {
314
314
  toolCatalogue String[] @default([]) @map("tool_catalogue")
315
315
  requiresCiba Boolean @default(false) @map("requires_ciba")
316
316
  createdByUserId String? @map("created_by_user_id") @db.Uuid
317
+ // Builder-declared secret surface. Empty defaults preserve existing
318
+ // custom-type behavior (no secrets injected). See spec
319
+ // docs/superpowers/specs/2026-04-24-custom-agent-type-secret-mapping.md.
320
+ requiredSecrets String[] @default([]) @map("required_secrets")
321
+ secretEnvMapping Json @default("{}") @map("secret_env_mapping")
322
+ dynamicSecrets String[] @default([]) @map("dynamic_secrets")
317
323
 
318
324
  organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
319
325
  createdByUser User? @relation("OrgAgentTypeCreatedBy", fields: [createdByUserId], references: [id], onDelete: SetNull)