@ai-matrx/agents 0.59.228 → 0.59.230

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.
@@ -20,49 +20,205 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // quick/index.ts
21
21
  var quick_exports = {};
22
22
  __export(quick_exports, {
23
- QUICK_AGENT_BOUNDS: () => QUICK_AGENT_BOUNDS,
24
- QUICK_AGENT_DEFAULT_SETTINGS: () => QUICK_AGENT_DEFAULT_SETTINGS,
25
23
  QUICK_AGENT_KIND: () => QUICK_AGENT_KIND,
24
+ QUICK_AGENT_KNOBS: () => QUICK_AGENT_KNOBS,
26
25
  QUICK_AGENT_TAG: () => QUICK_AGENT_TAG,
27
- buildQuickAgentRow: () => buildQuickAgentRow,
28
- buildQuickAgentUpdate: () => buildQuickAgentUpdate,
29
26
  clampQuickAgentSettings: () => clampQuickAgentSettings,
30
- createQuickAgent: () => createQuickAgent,
31
- deleteQuickAgent: () => deleteQuickAgent,
27
+ defaultQuickAgentSettings: () => defaultQuickAgentSettings,
32
28
  isQuickAgentSummary: () => isQuickAgentSummary,
33
29
  listMyQuickAgents: () => listMyQuickAgents,
30
+ listQuickAgents: () => listQuickAgents,
31
+ quickAgentFields: () => quickAgentFields,
34
32
  quickAgentFromRow: () => quickAgentFromRow,
35
33
  quickAgentMessages: () => quickAgentMessages,
36
34
  quickAgentProblems: () => quickAgentProblems,
37
35
  quickAgentSettingsJson: () => quickAgentSettingsJson,
38
36
  readQuickAgent: () => readQuickAgent,
39
- updateQuickAgent: () => updateQuickAgent,
37
+ resolveQuickAgentLimits: () => resolveQuickAgentLimits,
38
+ sliderStep: () => sliderStep,
40
39
  withoutQuickAgents: () => withoutQuickAgents
41
40
  });
42
41
  module.exports = __toCommonJS(quick_exports);
43
42
 
43
+ // catalog/selectors.ts
44
+ function memoize1(fn) {
45
+ let lastA;
46
+ let last;
47
+ let has = false;
48
+ return (a) => {
49
+ if (!has || lastA !== a) {
50
+ last = fn(a);
51
+ lastA = a;
52
+ has = true;
53
+ }
54
+ return last;
55
+ };
56
+ }
57
+ function memoize2(fn) {
58
+ let lastA;
59
+ let lastB;
60
+ let last;
61
+ let has = false;
62
+ return (a, b) => {
63
+ if (!has || lastA !== a || lastB !== b) {
64
+ last = fn(a, b);
65
+ lastA = a;
66
+ lastB = b;
67
+ has = true;
68
+ }
69
+ return last;
70
+ };
71
+ }
72
+ var selectAllAgentCategories = memoize1(
73
+ (agents) => {
74
+ const cats = /* @__PURE__ */ new Set();
75
+ for (const a of agents) {
76
+ if (a.agentType === "user" && a.category) cats.add(a.category);
77
+ }
78
+ return Array.from(cats).sort();
79
+ }
80
+ );
81
+ var selectAllSystemAgentCategories = memoize1(
82
+ (agents) => {
83
+ const cats = /* @__PURE__ */ new Set();
84
+ for (const a of agents) {
85
+ if (a.agentType === "builtin" && a.category) cats.add(a.category);
86
+ }
87
+ return Array.from(cats).sort();
88
+ }
89
+ );
90
+ var selectAllAgentTags = memoize1(
91
+ (agents) => {
92
+ const tags = /* @__PURE__ */ new Set();
93
+ for (const a of agents) {
94
+ if (a.agentType === "user") a.tags?.forEach((t) => tags.add(t));
95
+ }
96
+ return Array.from(tags).sort();
97
+ }
98
+ );
99
+ var selectAllSystemAgentTags = memoize1(
100
+ (agents) => {
101
+ const tags = /* @__PURE__ */ new Set();
102
+ for (const a of agents) {
103
+ if (a.agentType === "builtin") a.tags?.forEach((t) => tags.add(t));
104
+ }
105
+ return Array.from(tags).sort();
106
+ }
107
+ );
108
+ var selectUserTypeAgents = memoize1(
109
+ (agents) => agents.filter((a) => a.agentType === "user")
110
+ );
111
+ var selectBuiltinTypeAgents = memoize1(
112
+ (agents) => agents.filter((a) => a.agentType === "builtin")
113
+ );
114
+ function agentMatchesArchiveFilter(agent, archFilter) {
115
+ if (archFilter === "active") return !agent.isArchived;
116
+ if (archFilter === "archived") return Boolean(agent.isArchived);
117
+ return true;
118
+ }
119
+ function countBuiltinRows(agents, archFilter) {
120
+ let n = 0;
121
+ for (const a of agents) {
122
+ if (a.agentType !== "builtin") continue;
123
+ if (!agentMatchesArchiveFilter(a, archFilter)) continue;
124
+ n += 1;
125
+ }
126
+ return n;
127
+ }
128
+ function countUserRows(agents, archFilter, predicate) {
129
+ let n = 0;
130
+ for (const a of agents) {
131
+ if (a.agentType !== "user") continue;
132
+ if (!agentMatchesArchiveFilter(a, archFilter)) continue;
133
+ if (predicate(a)) n += 1;
134
+ }
135
+ return n;
136
+ }
137
+ var isOwned = (a) => a.isOwner === true;
138
+ var isShared = (a) => a.isOwner === false && a.accessLevel != null;
139
+ var isAny = () => true;
140
+ var isFavorite = (a) => Boolean(a.isFavorite);
141
+ var selectAgentTabCounts = memoize2(
142
+ (agents, archFilter) => ({
143
+ mine: countUserRows(agents, archFilter, isOwned),
144
+ shared: countUserRows(agents, archFilter, isShared),
145
+ all: countUserRows(agents, archFilter, isAny),
146
+ system: countBuiltinRows(agents, archFilter)
147
+ })
148
+ );
149
+ var selectTotalUserAgentsCount = memoize1(
150
+ (agents) => countUserRows(agents, "active", isAny)
151
+ );
152
+ var selectTotalOwnedAgentsCount = memoize1(
153
+ (agents) => countUserRows(agents, "active", isOwned)
154
+ );
155
+ var selectTotalSharedAgentsCount = memoize1(
156
+ (agents) => countUserRows(agents, "active", isShared)
157
+ );
158
+ var selectTotalBuiltinAgentsCount = memoize1(
159
+ (agents) => countBuiltinRows(agents, "active")
160
+ );
161
+ var selectTotalFavoriteAgentsCount = memoize1(
162
+ (agents) => countUserRows(agents, "active", isFavorite)
163
+ );
164
+
44
165
  // quick/shape.ts
45
166
  var QUICK_AGENT_KIND = "quick";
46
167
  var QUICK_AGENT_TAG = "kind:quick";
47
- var QUICK_AGENT_BOUNDS = {
48
- temperature: { min: 0, max: 2, step: 0.1 },
49
- topP: { min: 0, max: 1, step: 0.05 },
50
- maxOutputTokens: { min: 256, max: 32768, step: 256 }
168
+ var QUICK_AGENT_KNOBS = {
169
+ temperatureMax: { feature: "agents.quick", key: "temperature_max" },
170
+ temperatureDefault: { feature: "agents.quick", key: "temperature_default" },
171
+ topPDefault: { feature: "agents.quick", key: "top_p_default" },
172
+ maxOutputMin: { feature: "agents.quick", key: "max_output_min" },
173
+ maxOutputMax: { feature: "agents.quick", key: "max_output_max" },
174
+ maxOutputDefault: { feature: "agents.quick", key: "max_output_default" }
51
175
  };
52
- var QUICK_AGENT_DEFAULT_SETTINGS = Object.freeze({
53
- temperature: 0.7,
54
- topP: 1,
55
- maxOutputTokens: 4096
56
- });
176
+ var isNum = (v) => typeof v === "number" && Number.isFinite(v);
177
+ function sliderStep(min, max) {
178
+ const raw = (max - min) / 100;
179
+ if (!(raw > 0)) return 1;
180
+ const pow = 10 ** Math.floor(Math.log10(raw));
181
+ const unit = raw / pow;
182
+ const nice = unit <= 1 ? 1 : unit <= 2 ? 2 : unit <= 5 ? 5 : 10;
183
+ return Number((nice * pow).toPrecision(6));
184
+ }
185
+ function limit(min, max, rest, whole) {
186
+ const step = whole ? Math.max(1, Math.round(sliderStep(min, max))) : sliderStep(min, max);
187
+ return { min, max, step, default: Math.min(max, Math.max(min, rest)) };
188
+ }
189
+ function resolveQuickAgentLimits(model, knobs) {
190
+ const t = model?.temperature;
191
+ const p = model?.top_p;
192
+ const m = model?.max_output_tokens;
193
+ const tMin = isNum(t?.min) ? t.min : 0;
194
+ const tMax = isNum(t?.max) ? t.max : knobs.temperatureMax;
195
+ const tRest = isNum(t?.default) ? t.default : knobs.temperatureDefault;
196
+ const pMin = isNum(p?.min) ? p.min : 0;
197
+ const pMax = isNum(p?.max) ? p.max : 1;
198
+ const pRest = isNum(p?.default) ? p.default : knobs.topPDefault;
199
+ const mMin = isNum(m?.min) ? m.min : knobs.maxOutputMin;
200
+ const mMax = isNum(m?.max) ? m.max : knobs.maxOutputMax;
201
+ const mRest = isNum(m?.default) ? m.default : knobs.maxOutputDefault;
202
+ if (!isNum(tMax) || !isNum(tRest) || !isNum(pRest) || !isNum(mMin) || !isNum(mMax) || !isNum(mRest)) return null;
203
+ if (tMax <= tMin || pMax <= pMin || mMax <= mMin) return null;
204
+ return {
205
+ temperature: limit(tMin, tMax, tRest, false),
206
+ topP: limit(pMin, pMax, pRest, false),
207
+ maxOutputTokens: limit(mMin, mMax, mRest, true)
208
+ };
209
+ }
210
+ function defaultQuickAgentSettings(limits) {
211
+ return { temperature: limits.temperature.default, topP: limits.topP.default, maxOutputTokens: limits.maxOutputTokens.default };
212
+ }
57
213
  function clamp(value, bound) {
58
214
  if (!Number.isFinite(value)) return bound.min;
59
215
  return Math.min(bound.max, Math.max(bound.min, value));
60
216
  }
61
- function clampQuickAgentSettings(settings) {
217
+ function clampQuickAgentSettings(settings, limits) {
62
218
  return {
63
- temperature: clamp(settings.temperature, QUICK_AGENT_BOUNDS.temperature),
64
- topP: clamp(settings.topP, QUICK_AGENT_BOUNDS.topP),
65
- maxOutputTokens: Math.round(clamp(settings.maxOutputTokens, QUICK_AGENT_BOUNDS.maxOutputTokens))
219
+ temperature: clamp(settings.temperature, limits.temperature),
220
+ topP: clamp(settings.topP, limits.topP),
221
+ maxOutputTokens: Math.round(clamp(settings.maxOutputTokens, limits.maxOutputTokens))
66
222
  };
67
223
  }
68
224
  function quickAgentProblems(def) {
@@ -73,44 +229,31 @@ function quickAgentProblems(def) {
73
229
  return problems;
74
230
  }
75
231
  function quickAgentSettingsJson(settings) {
76
- const s = clampQuickAgentSettings(settings);
77
- return { stream: true, temperature: s.temperature, top_p: s.topP, max_output_tokens: s.maxOutputTokens };
232
+ return { stream: true, temperature: settings.temperature, top_p: settings.topP, max_output_tokens: settings.maxOutputTokens };
78
233
  }
79
234
  function quickAgentMessages(systemPrompt) {
80
235
  return [{ role: "system", content: [{ type: "text", text: systemPrompt }] }];
81
236
  }
82
- function buildQuickAgentRow(def, owner) {
237
+ function quickAgentFields(def) {
83
238
  return {
84
- agent_type: "user",
85
239
  name: def.name.trim(),
86
- description: null,
87
240
  tags: [QUICK_AGENT_TAG],
88
- is_active: true,
89
- is_archived: false,
90
- model_id: def.modelId,
241
+ isActive: true,
242
+ isArchived: false,
243
+ modelId: def.modelId,
91
244
  messages: quickAgentMessages(def.systemPrompt),
92
245
  settings: quickAgentSettingsJson(def.settings),
93
- tools: [],
94
- metadata: { kind: QUICK_AGENT_KIND },
95
- created_by: owner.userId,
96
- organization_id: owner.organizationId
97
- };
98
- }
99
- function buildQuickAgentUpdate(def) {
100
- return {
101
- name: def.name.trim(),
102
- model_id: def.modelId,
103
- messages: quickAgentMessages(def.systemPrompt),
104
- settings: quickAgentSettingsJson(def.settings)
246
+ tools: []
105
247
  };
106
248
  }
107
249
  function num(value, fallback) {
108
250
  return typeof value === "number" && Number.isFinite(value) ? value : fallback;
109
251
  }
110
- function quickAgentFromRow(row) {
252
+ function quickAgentFromRow(row, defaults) {
111
253
  if (!row) return null;
112
254
  const metadata = row["metadata"];
113
- if (metadata?.["kind"] !== QUICK_AGENT_KIND) return null;
255
+ const tags = Array.isArray(row["tags"]) ? row["tags"] : [];
256
+ if (metadata?.["kind"] !== QUICK_AGENT_KIND && !tags.includes(QUICK_AGENT_TAG)) return null;
114
257
  const messages = Array.isArray(row["messages"]) ? row["messages"] : [];
115
258
  const system = messages.find((m) => m["role"] === "system");
116
259
  const parts = Array.isArray(system?.["content"]) ? system?.["content"] : [];
@@ -121,55 +264,35 @@ function quickAgentFromRow(row) {
121
264
  name: typeof row["name"] === "string" ? row["name"] : "",
122
265
  systemPrompt,
123
266
  modelId: typeof row["model_id"] === "string" ? row["model_id"] : "",
124
- settings: clampQuickAgentSettings({
125
- temperature: num(raw["temperature"], QUICK_AGENT_DEFAULT_SETTINGS.temperature),
126
- topP: num(raw["top_p"], QUICK_AGENT_DEFAULT_SETTINGS.topP),
127
- maxOutputTokens: num(raw["max_output_tokens"], QUICK_AGENT_DEFAULT_SETTINGS.maxOutputTokens)
128
- })
267
+ settings: {
268
+ temperature: num(raw["temperature"], defaults.temperature),
269
+ topP: num(raw["top_p"], defaults.topP),
270
+ maxOutputTokens: num(raw["max_output_tokens"], defaults.maxOutputTokens)
271
+ }
129
272
  };
130
273
  }
131
274
  function isQuickAgentSummary(row) {
132
275
  return row.tags.includes(QUICK_AGENT_TAG);
133
276
  }
277
+ function listQuickAgents(rows, userId) {
278
+ const live = (row) => isQuickAgentSummary(row) && !row.isArchived && row.isActive !== false;
279
+ const user = selectUserTypeAgents(rows).filter(live);
280
+ const mine = userId ? user.filter((row) => row.createdBy === userId) : [];
281
+ const organization = user.filter((row) => !mine.includes(row));
282
+ const system = selectBuiltinTypeAgents(rows).filter(live);
283
+ return { mine, organization, system };
284
+ }
134
285
  function listMyQuickAgents(rows, userId) {
135
- if (!userId) return [];
136
- return rows.filter((row) => isQuickAgentSummary(row) && row.createdBy === userId && !row.isArchived && row.isActive !== false);
286
+ const lanes = listQuickAgents(rows, userId);
287
+ return [...lanes.mine, ...lanes.organization, ...lanes.system];
137
288
  }
138
289
  function withoutQuickAgents(rows) {
139
290
  return rows.filter((row) => !isQuickAgentSummary(row));
140
291
  }
141
292
 
142
- // quick/writes.ts
143
- function refuse(def) {
144
- const problems = quickAgentProblems(def);
145
- if (problems.length > 0) throw new Error(problems[0]);
146
- }
147
- function fail(error) {
148
- throw new Error(error?.message ?? "The agent could not be saved.");
149
- }
150
- var table = (client) => client.schema("agent").from("definition");
151
- async function createQuickAgent(client, def, owner) {
152
- refuse(def);
153
- const { data, error } = await table(client).insert(buildQuickAgentRow(def, owner)).select().single();
154
- if (error) fail(error);
155
- const saved = quickAgentFromRow(data);
156
- if (!saved) fail(null);
157
- return saved;
158
- }
159
- async function updateQuickAgent(client, id, def) {
160
- refuse(def);
161
- const { data, error } = await table(client).update(buildQuickAgentUpdate(def)).eq("id", id).select().single();
162
- if (error) fail(error);
163
- const saved = quickAgentFromRow(data);
164
- if (!saved) fail(null);
165
- return saved;
166
- }
167
- async function deleteQuickAgent(client, id) {
168
- const { error } = await table(client).update({ deleted_at: (/* @__PURE__ */ new Date()).toISOString() }).eq("id", id);
169
- if (error) fail(error);
170
- }
171
- async function readQuickAgent(client, id) {
172
- const { data, error } = await table(client).select("id,name,model_id,messages,settings,metadata").eq("id", id).is("deleted_at", null).maybeSingle();
173
- if (error) fail(error);
174
- return quickAgentFromRow(data);
293
+ // quick/reads.ts
294
+ async function readQuickAgent(client, id, defaults) {
295
+ const { data, error } = await client.schema("agent").from("definition").select("id,name,model_id,messages,settings,tags,metadata").eq("id", id).is("deleted_at", null).maybeSingle();
296
+ if (error) throw new Error(error.message ?? "The agent could not be read.");
297
+ return quickAgentFromRow(data, defaults);
175
298
  }
@@ -6,12 +6,13 @@ import { A as AgentSummary } from '../types-DZhDqrVE.cjs';
6
6
  * A quick agent is a named bundle of exactly: name, system prompt, model and three settings
7
7
  * (temperature, top-p, max output tokens). It is an ordinary `agent.definition` row — one agent
8
8
  * table, one permission model, no second prompt store — marked `kind: quick` so the big catalog
9
- * can hide or group it. This entry owns the shape and the pure builders/selectors; `./writes`
10
- * owns the four database calls (the one named write allowlist entry of this package).
9
+ * can hide or group it. This entry owns the shape and the pure builders/selectors; the WRITES go
10
+ * through chat's one agent-definition write path (`agents/redux/agent-definition/definition-writes`),
11
+ * never a second one here.
11
12
  *
12
- * The marker lives in two places on purpose: `metadata.kind = "quick"` is the record's own
13
- * statement; the `kind:quick` tag rides every catalog row (the catalog read carries tags, not
14
- * metadata), so a list can filter without a second read — exactly how `chat-agent` marks presets.
13
+ * The marker is the `kind:quick` tag: it rides every catalog row, so a list can filter without a
14
+ * second read — exactly how `chat-agent` marks presets. (Rows saved before the shared write path also
15
+ * carry `metadata.kind = "quick"`; both read as quick.)
15
16
  */
16
17
 
17
18
  declare const QUICK_AGENT_KIND: "quick";
@@ -34,26 +35,81 @@ interface QuickAgentDefinition {
34
35
  interface QuickAgent extends QuickAgentDefinition {
35
36
  id: string;
36
37
  }
37
- declare const QUICK_AGENT_BOUNDS: {
38
- readonly temperature: {
39
- readonly min: 0;
40
- readonly max: 2;
41
- readonly step: 0.1;
38
+ /** One setting's slider: where it starts, where it stops, where a new agent rests. */
39
+ interface QuickAgentSettingLimit {
40
+ min: number;
41
+ max: number;
42
+ step: number;
43
+ default: number;
44
+ }
45
+ interface QuickAgentLimits {
46
+ temperature: QuickAgentSettingLimit;
47
+ topP: QuickAgentSettingLimit;
48
+ maxOutputTokens: QuickAgentSettingLimit;
49
+ }
50
+ /** A model's own settings row for one control (`ai.model` controls: min / max / default), when it states one. */
51
+ interface ModelSettingRow {
52
+ min?: number | null | undefined;
53
+ max?: number | null | undefined;
54
+ default?: unknown;
55
+ }
56
+ /** The chosen model's settings rows for the three controls; a control it does not state is absent. */
57
+ interface ModelSettingRows {
58
+ temperature?: ModelSettingRow | null | undefined;
59
+ top_p?: ModelSettingRow | null | undefined;
60
+ max_output_tokens?: ModelSettingRow | null | undefined;
61
+ }
62
+ /**
63
+ * The `agents.quick` knob values (organization and person can set them). `undefined` = the register
64
+ * has not answered yet. A probability lives in 0..1 and a temperature starts at 0 by definition;
65
+ * every other bound and every default is a knob.
66
+ */
67
+ interface QuickAgentKnobValues {
68
+ temperatureMax?: unknown;
69
+ temperatureDefault?: unknown;
70
+ topPDefault?: unknown;
71
+ maxOutputMin?: unknown;
72
+ maxOutputMax?: unknown;
73
+ maxOutputDefault?: unknown;
74
+ }
75
+ declare const QUICK_AGENT_KNOBS: {
76
+ readonly temperatureMax: {
77
+ readonly feature: "agents.quick";
78
+ readonly key: "temperature_max";
79
+ };
80
+ readonly temperatureDefault: {
81
+ readonly feature: "agents.quick";
82
+ readonly key: "temperature_default";
83
+ };
84
+ readonly topPDefault: {
85
+ readonly feature: "agents.quick";
86
+ readonly key: "top_p_default";
87
+ };
88
+ readonly maxOutputMin: {
89
+ readonly feature: "agents.quick";
90
+ readonly key: "max_output_min";
42
91
  };
43
- readonly topP: {
44
- readonly min: 0;
45
- readonly max: 1;
46
- readonly step: 0.05;
92
+ readonly maxOutputMax: {
93
+ readonly feature: "agents.quick";
94
+ readonly key: "max_output_max";
47
95
  };
48
- readonly maxOutputTokens: {
49
- readonly min: 256;
50
- readonly max: 32768;
51
- readonly step: 256;
96
+ readonly maxOutputDefault: {
97
+ readonly feature: "agents.quick";
98
+ readonly key: "max_output_default";
52
99
  };
53
100
  };
54
- declare const QUICK_AGENT_DEFAULT_SETTINGS: QuickAgentSettings;
55
- /** Settings pulled inside their bounds (a slider can never save a value the model refuses). */
56
- declare function clampQuickAgentSettings(settings: QuickAgentSettings): QuickAgentSettings;
101
+ /** A slider step that gives ~100 positions over the range, on a 1 / 2 / 5 grid (0.02 -> 0.05 style). */
102
+ declare function sliderStep(min: number, max: number): number;
103
+ /**
104
+ * THE ONE SOURCE of the three sliders' bounds and resting values: the chosen model's own settings
105
+ * rows where it states them, else the `agents.quick` knobs. `null` until every number is known (the
106
+ * panel shows no slider for a number nobody has answered — there is no code default).
107
+ */
108
+ declare function resolveQuickAgentLimits(model: ModelSettingRows | null | undefined, knobs: QuickAgentKnobValues): QuickAgentLimits | null;
109
+ /** A new agent's settings: every slider at its resting value. */
110
+ declare function defaultQuickAgentSettings(limits: QuickAgentLimits): QuickAgentSettings;
111
+ /** Settings pulled inside their limits (a slider can never save a value the model refuses). */
112
+ declare function clampQuickAgentSettings(settings: QuickAgentSettings, limits: QuickAgentLimits): QuickAgentSettings;
57
113
  /** What stops a save, in words — empty when the definition is saveable. */
58
114
  declare function quickAgentProblems(def: Pick<QuickAgentDefinition, "name" | "systemPrompt" | "modelId">): string[];
59
115
  interface QuickAgentSystemMessage {
@@ -66,28 +122,44 @@ interface QuickAgentSystemMessage {
66
122
  /** The persisted `settings` JSON: the three params plus the stream flag every agent row carries. */
67
123
  declare function quickAgentSettingsJson(settings: QuickAgentSettings): Record<string, unknown>;
68
124
  declare function quickAgentMessages(systemPrompt: string): QuickAgentSystemMessage[];
69
- /** The `agent.definition` insert for a new quick agent. Born active; no tools, variables or context. */
70
- declare function buildQuickAgentRow(def: QuickAgentDefinition, owner: {
71
- organizationId: string;
72
- userId: string;
73
- }): Record<string, unknown>;
74
- /** The `agent.definition` update for an edit: only the four things a quick agent has. */
75
- declare function buildQuickAgentUpdate(def: QuickAgentDefinition): Record<string, unknown>;
76
- /** A stored row read back as a quick agent; `null` when the row is not one. */
77
- declare function quickAgentFromRow(row: Record<string, unknown> | null | undefined): QuickAgent | null;
125
+ /**
126
+ * The agent fields a quick agent sets, in the shape of the ONE agent-definition write path
127
+ * (chat `definition-writes`): name + system message + model + the three settings, marked quick, no
128
+ * tools. Nothing else is ever part of a quick agent.
129
+ */
130
+ declare function quickAgentFields(def: QuickAgentDefinition): {
131
+ name: string;
132
+ tags: string[];
133
+ isActive: true;
134
+ isArchived: false;
135
+ modelId: string;
136
+ messages: QuickAgentSystemMessage[];
137
+ settings: Record<string, unknown>;
138
+ tools: never[];
139
+ };
140
+ /**
141
+ * A stored row read back as a quick agent; `null` when the row is not one. A setting the row does
142
+ * not carry rests at `defaults` (the resolved limits' resting values).
143
+ */
144
+ declare function quickAgentFromRow(row: Record<string, unknown> | null | undefined, defaults: QuickAgentSettings): QuickAgent | null;
78
145
  declare function isQuickAgentSummary(row: Pick<AgentSummary, "tags">): boolean;
79
146
  /**
80
- * THE PERSONAL LIST: the person's own, live quick agents out of the ONE catalog read.
81
- * (Org and system lanes are the catalogue's own tabs; this is "mine".)
147
+ * THE QUICK-AGENT LIST in the platform's visibility lanes: mine, then my organization's, then the
148
+ * system's (the catalog's own user-type / builtin split; "mine" is what the person created).
82
149
  */
150
+ declare function listQuickAgents(rows: readonly AgentSummary[], userId: string | null): {
151
+ mine: AgentSummary[];
152
+ organization: AgentSummary[];
153
+ system: AgentSummary[];
154
+ };
155
+ /** The pill's list: mine, then organization, then system. */
83
156
  declare function listMyQuickAgents(rows: readonly AgentSummary[], userId: string | null): AgentSummary[];
84
157
  /** The big catalogue's view: quick agents leave the general list (a filter, never a delete). */
85
158
  declare function withoutQuickAgents<T extends Pick<AgentSummary, "tags">>(rows: readonly T[]): T[];
86
159
 
87
160
  /**
88
- * The four database calls of a quick agent, over the EXISTING `agent.definition` table.
89
- * The only write entry of this package besides favorites (check-agents-below-chat WRITE_ALLOWLIST).
90
- * The client is the host's own RLS-bound Supabase client; nothing here knows how it was built.
161
+ * The one READ of a quick agent: its full definition (the catalog row carries no prompt). Reads
162
+ * only; every write goes through chat's one agent-definition write path.
91
163
  */
92
164
 
93
165
  interface QuickAgentClient {
@@ -95,14 +167,7 @@ interface QuickAgentClient {
95
167
  from(table: "definition"): any;
96
168
  };
97
169
  }
98
- declare function createQuickAgent(client: QuickAgentClient, def: QuickAgentDefinition, owner: {
99
- organizationId: string;
100
- userId: string;
101
- }): Promise<QuickAgent>;
102
- declare function updateQuickAgent(client: QuickAgentClient, id: string, def: QuickAgentDefinition): Promise<QuickAgent>;
103
- /** Soft delete — the same `deleted_at` every agent delete sets, so every list already hides it. */
104
- declare function deleteQuickAgent(client: QuickAgentClient, id: string): Promise<void>;
105
- /** One quick agent's full definition (the catalog row carries no prompt). */
106
- declare function readQuickAgent(client: QuickAgentClient, id: string): Promise<QuickAgent | null>;
170
+ /** One quick agent's full definition; settings the row lacks rest at `defaults`. */
171
+ declare function readQuickAgent(client: QuickAgentClient, id: string, defaults: QuickAgentSettings): Promise<QuickAgent | null>;
107
172
 
108
- export { QUICK_AGENT_BOUNDS, QUICK_AGENT_DEFAULT_SETTINGS, QUICK_AGENT_KIND, QUICK_AGENT_TAG, type QuickAgent, type QuickAgentClient, type QuickAgentDefinition, type QuickAgentSettings, type QuickAgentSystemMessage, buildQuickAgentRow, buildQuickAgentUpdate, clampQuickAgentSettings, createQuickAgent, deleteQuickAgent, isQuickAgentSummary, listMyQuickAgents, quickAgentFromRow, quickAgentMessages, quickAgentProblems, quickAgentSettingsJson, readQuickAgent, updateQuickAgent, withoutQuickAgents };
173
+ export { type ModelSettingRow, type ModelSettingRows, QUICK_AGENT_KIND, QUICK_AGENT_KNOBS, QUICK_AGENT_TAG, type QuickAgent, type QuickAgentClient, type QuickAgentDefinition, type QuickAgentKnobValues, type QuickAgentLimits, type QuickAgentSettingLimit, type QuickAgentSettings, type QuickAgentSystemMessage, clampQuickAgentSettings, defaultQuickAgentSettings, isQuickAgentSummary, listMyQuickAgents, listQuickAgents, quickAgentFields, quickAgentFromRow, quickAgentMessages, quickAgentProblems, quickAgentSettingsJson, readQuickAgent, resolveQuickAgentLimits, sliderStep, withoutQuickAgents };