@looprun-ai/core 0.1.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.
Files changed (46) hide show
  1. package/LICENSE +202 -0
  2. package/dist/guards.d.ts +76 -0
  3. package/dist/guards.d.ts.map +1 -0
  4. package/dist/guards.js +407 -0
  5. package/dist/guards.js.map +1 -0
  6. package/dist/index.d.ts +23 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +17 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/model-params.d.ts +16 -0
  11. package/dist/model-params.d.ts.map +1 -0
  12. package/dist/model-params.js +27 -0
  13. package/dist/model-params.js.map +1 -0
  14. package/dist/rules.d.ts +76 -0
  15. package/dist/rules.d.ts.map +1 -0
  16. package/dist/rules.js +11 -0
  17. package/dist/rules.js.map +1 -0
  18. package/dist/runtime/ledger.d.ts +28 -0
  19. package/dist/runtime/ledger.d.ts.map +1 -0
  20. package/dist/runtime/ledger.js +50 -0
  21. package/dist/runtime/ledger.js.map +1 -0
  22. package/dist/runtime/terminal.d.ts +18 -0
  23. package/dist/runtime/terminal.d.ts.map +1 -0
  24. package/dist/runtime/terminal.js +50 -0
  25. package/dist/runtime/terminal.js.map +1 -0
  26. package/dist/runtime/turn.d.ts +38 -0
  27. package/dist/runtime/turn.d.ts.map +1 -0
  28. package/dist/runtime/turn.js +127 -0
  29. package/dist/runtime/turn.js.map +1 -0
  30. package/dist/runtime/types.d.ts +55 -0
  31. package/dist/runtime/types.d.ts.map +1 -0
  32. package/dist/runtime/types.js +5 -0
  33. package/dist/runtime/types.js.map +1 -0
  34. package/dist/spec.d.ts +147 -0
  35. package/dist/spec.d.ts.map +1 -0
  36. package/dist/spec.js +168 -0
  37. package/dist/spec.js.map +1 -0
  38. package/dist/trunk.d.ts +35 -0
  39. package/dist/trunk.d.ts.map +1 -0
  40. package/dist/trunk.js +98 -0
  41. package/dist/trunk.js.map +1 -0
  42. package/dist/validate.d.ts +15 -0
  43. package/dist/validate.d.ts.map +1 -0
  44. package/dist/validate.js +36 -0
  45. package/dist/validate.js.map +1 -0
  46. package/package.json +49 -0
package/dist/guards.js ADDED
@@ -0,0 +1,407 @@
1
+ // ── Custom (the agent-ruleset escape hatch) ──────────────────────────────────
2
+ export function custom(opts) {
3
+ return { kind: opts.kind, dim: opts.dim, check: opts.check, prose: opts.prose };
4
+ }
5
+ // ── helpers ──────────────────────────────────────────────────────────────────
6
+ const lc = (s) => String(s ?? '').toLowerCase();
7
+ const ran = (observed, tool) => observed.some((o) => o.name === tool && o.ok);
8
+ const ranThisTurn = (ctx, tool) => ctx.observed.some((o) => o.name === tool && o.ok && o.turnIndex === ctx.turnIndex);
9
+ function resolveLabel(args, field) {
10
+ const v = args[field];
11
+ if (v == null)
12
+ return null;
13
+ if (typeof v === 'string')
14
+ return v.trim() || null;
15
+ if (typeof v === 'object' && 'label' in v) {
16
+ const l = v.label;
17
+ return l == null ? null : String(l).trim() || null;
18
+ }
19
+ return null;
20
+ }
21
+ // ── SPATIAL (graph / sequencing) ─────────────────────────────────────────────
22
+ /** T may run only after EVERY dep has already run successfully this conversation. */
23
+ export function requiresBefore(deps) {
24
+ return {
25
+ kind: 'requiresBefore',
26
+ dim: 'spatial',
27
+ check(ctx) {
28
+ const missing = deps.filter((d) => !ran(ctx.observed, d));
29
+ return missing.length ? `Do ${missing.join(' then ')} FIRST — it must run before this tool.` : null;
30
+ },
31
+ prose: () => `only after ${deps.join(' → ')} has run`,
32
+ };
33
+ }
34
+ /** T is forbidden for this turn. */
35
+ export function forbidThisTurn(reason) {
36
+ return { kind: 'forbidThisTurn', dim: 'spatial', check: () => reason, prose: () => reason };
37
+ }
38
+ // ── INPUT (parameter rules) ──────────────────────────────────────────────────
39
+ /** Arg `field` must be present and non-empty. */
40
+ export function argRequired(field) {
41
+ return {
42
+ kind: 'argRequired',
43
+ dim: 'input',
44
+ check(ctx) {
45
+ const v = ctx.args[field];
46
+ const empty = v == null || (typeof v === 'string' && v.trim() === '');
47
+ return empty ? `Missing required argument "${field}". Provide it.` : null;
48
+ },
49
+ prose: () => `always pass "${field}"`,
50
+ };
51
+ }
52
+ /** Arg `field` must NOT be present. */
53
+ export function argAbsent(field) {
54
+ return {
55
+ kind: 'argAbsent',
56
+ dim: 'input',
57
+ check(ctx) {
58
+ return field in ctx.args && ctx.args[field] != null ? `Do not pass "${field}" to this tool — remove it.` : null;
59
+ },
60
+ prose: () => `never pass "${field}" (it is not an argument of this tool)`,
61
+ };
62
+ }
63
+ /** A label-typed arg must resolve to an EXISTING media label. */
64
+ export function labelExists(field) {
65
+ return {
66
+ kind: 'labelExists',
67
+ dim: 'input',
68
+ check(ctx) {
69
+ const w = ctx.world;
70
+ const label = resolveLabel(ctx.args, field);
71
+ if (label == null)
72
+ return `Missing media label in "${field}".`;
73
+ if (!w.hasMediaLabel(label)) {
74
+ const known = w.mediaLabels();
75
+ return `Label "${label}" does not exist in Recent Media. Use one the user referenced — available: ${known.join(', ') || '(none)'}. Do NOT invent a label.`;
76
+ }
77
+ return null;
78
+ },
79
+ prose: () => `"${field}" must be a real label from Recent Media (do not invent one)`,
80
+ };
81
+ }
82
+ /** A PRESENT non-empty string arg must match `pattern`; absent/empty is left to argRequired. */
83
+ export function argFormat(field, pattern, flags, reason) {
84
+ const re = new RegExp(pattern, flags ?? '');
85
+ const msg = reason ?? `Argument "${field}" is malformed — it must match ${pattern}. Use a REAL value (never invent one).`;
86
+ return {
87
+ kind: 'argFormat',
88
+ dim: 'input',
89
+ check(ctx) {
90
+ const v = ctx.args[field];
91
+ if (typeof v !== 'string' || v === '')
92
+ return null;
93
+ return re.test(v) ? null : msg;
94
+ },
95
+ prose: () => `"${field}" must match ${pattern}`,
96
+ };
97
+ }
98
+ /** Upload-range labels: i900+ (the attachment-sequence convention of media worlds). */
99
+ export function isUploadLabel(label) {
100
+ return /^i(9\d\d|\d{4,})$/i.test(label);
101
+ }
102
+ /** A label-typed arg must come from the expected provenance class (upload = i900+). */
103
+ export function labelProvenance(field, expect, reason) {
104
+ const msg = reason ?? (expect === 'uploaded'
105
+ ? `"${field}" must be an UPLOADED image label (i900+) — for generated images use the matching tool instead.`
106
+ : `"${field}" must be a GENERATED image label — uploads (i900+) are not valid here.`);
107
+ return {
108
+ kind: 'labelProvenance',
109
+ dim: 'input',
110
+ check(ctx) {
111
+ const v = ctx.args[field];
112
+ const label = typeof v === 'string' ? v.trim()
113
+ : (v && typeof v === 'object' && 'label' in v) ? String(v.label ?? '').trim() : '';
114
+ if (!label)
115
+ return null;
116
+ const isUp = isUploadLabel(label);
117
+ return (expect === 'uploaded' ? isUp : !isUp) ? null : msg;
118
+ },
119
+ prose: () => msg,
120
+ };
121
+ }
122
+ // ── RUN (execution preconditions) ────────────────────────────────────────────
123
+ /** Generic state precondition: the call is allowed only while `ok(world)` holds. `prose` states the
124
+ * CONDITION (always-rendered), separate from the deny `reason` (fires only when the condition is false). */
125
+ export function precondition(ok, reason, prose) {
126
+ return {
127
+ kind: 'precondition',
128
+ dim: 'run',
129
+ check: (ctx) => (ok(ctx.world) ? null : reason),
130
+ prose: () => prose ?? reason,
131
+ };
132
+ }
133
+ /** `tool` may run at most `n` times per turn (counts the model's OWN successful calls). */
134
+ export function maxCallsPerTurn(tool, n, reason) {
135
+ return {
136
+ kind: 'maxCallsPerTurn',
137
+ dim: 'run',
138
+ check(ctx) {
139
+ const count = ctx.observed.filter((o) => o.name === tool && o.ok && o.turnIndex === ctx.turnIndex).length;
140
+ return count >= n ? reason : null;
141
+ },
142
+ prose: () => reason,
143
+ };
144
+ }
145
+ /** Side-effect budget ACROSS turns (maxCallsPerTurn minus the turnIndex filter). */
146
+ export function maxCallsPerConversation(tool, n, reason) {
147
+ return {
148
+ kind: 'maxCallsPerConversation',
149
+ dim: 'run',
150
+ check(ctx) {
151
+ const count = ctx.observed.filter((o) => o.name === tool && o.ok).length;
152
+ return count >= n ? reason : null;
153
+ },
154
+ prose: () => reason,
155
+ };
156
+ }
157
+ /** Key-order-independent canonical fingerprint of a call's args. */
158
+ export function canonArgs(v) {
159
+ if (Array.isArray(v))
160
+ return `[${v.map(canonArgs).join(',')}]`;
161
+ if (v && typeof v === 'object') {
162
+ const rec = v;
163
+ const keys = Object.keys(rec).filter((k) => rec[k] !== undefined).sort();
164
+ return `{${keys.map((k) => `${JSON.stringify(k)}:${canonArgs(rec[k])}`).join(',')}}`;
165
+ }
166
+ return JSON.stringify(v) ?? 'null';
167
+ }
168
+ /** Deny a call whose (tool, canonical args) already SUCCEEDED this turn. */
169
+ export function noDuplicateCall() {
170
+ return {
171
+ kind: 'noDuplicateCall',
172
+ dim: 'run',
173
+ check(ctx) {
174
+ if (!ctx.tool)
175
+ return null;
176
+ const key = canonArgs(ctx.args);
177
+ const dupOk = ctx.observed.some((o) => o.turnIndex === ctx.turnIndex && o.ok && o.name === ctx.tool && canonArgs(o.args) === key);
178
+ return dupOk
179
+ ? `You already called ${ctx.tool} with these EXACT arguments this turn and it succeeded — do not repeat it. Use the earlier result and move on (or reply to the user).`
180
+ : null;
181
+ },
182
+ prose: () => 'never repeat a tool call that already succeeded with the same arguments',
183
+ };
184
+ }
185
+ /** A destructive tool's `confirmed:true` is legal ONLY when its probe (confirmed absent/false) ran and
186
+ * took effect in an EARLIER turn — never confirm your own same-turn probe, never skip it. */
187
+ export function confirmFirst(argFlag = 'confirmed') {
188
+ return {
189
+ kind: 'confirmFirst',
190
+ dim: 'run',
191
+ check(ctx) {
192
+ if (!ctx.tool)
193
+ return null;
194
+ if (ctx.args[argFlag] !== true)
195
+ return null;
196
+ const probe = ctx.observed.find((o) => o.name === ctx.tool && o.ok && o.args?.[argFlag] !== true && o.turnIndex < ctx.turnIndex);
197
+ return probe
198
+ ? null
199
+ : `Do NOT pass ${argFlag}:true — first call ${ctx.tool} WITHOUT it, relay the confirmation question to the user, and only confirm in a LATER turn after the user agrees.`;
200
+ },
201
+ prose: () => `destructive actions need ${argFlag}:false first + the USER's explicit confirmation in a later turn`,
202
+ };
203
+ }
204
+ /** At most ONE successful destructive action per turn. */
205
+ export function destructiveThrottle(destructiveTools) {
206
+ const set = new Set(destructiveTools);
207
+ return {
208
+ kind: 'destructiveThrottle',
209
+ dim: 'run',
210
+ check(ctx) {
211
+ if (!ctx.tool || !set.has(ctx.tool))
212
+ return null;
213
+ const prior = ctx.observed.find((o) => o.turnIndex === ctx.turnIndex && o.ok && set.has(o.name));
214
+ return prior
215
+ ? `A destructive action (${prior.name}) already ran this turn — do NOT chain another destructive call. Reply to the user first.`
216
+ : null;
217
+ },
218
+ prose: () => 'at most one destructive action per turn',
219
+ };
220
+ }
221
+ // ── OUTPUT (postTool result invariant) ───────────────────────────────────────
222
+ export function resultInvariant(pred, reason) {
223
+ return {
224
+ kind: 'resultInvariant',
225
+ dim: 'output',
226
+ check(ctx) {
227
+ if (ctx.result === undefined)
228
+ return null;
229
+ return pred(ctx.result, ctx.world) ? null : reason;
230
+ },
231
+ prose: () => reason,
232
+ };
233
+ }
234
+ // ── BEHAVIOR (reply-checks) ──────────────────────────────────────────────────
235
+ const VERB_FIRST_CLAIM_RE = /(gerando|criando|preparando|gerei|criei|generating|creating)\s+(\w+\s+){0,2}(imagem|image)/i;
236
+ /** If `tool` did NOT succeed this turn, the reply must not claim/imply it did (existence-keyed). */
237
+ export function noFabricatedSuccess(tool, opts) {
238
+ return {
239
+ kind: 'noFabricatedSuccess',
240
+ dim: 'behavior',
241
+ check(ctx) {
242
+ if (ranThisTurn(ctx, tool))
243
+ return null;
244
+ const reply = ctx.reply ?? '';
245
+ const labels = reply.match(/\bi\d{3,}\b/gi) ?? [];
246
+ const produced = ctx.producedThisTurn ?? [];
247
+ const invented = labels.filter((l) => !produced.includes(l) && !ctx.world.hasMediaLabel(l));
248
+ if (invented.length)
249
+ return opts.reason;
250
+ const claims = opts.claimRe.test(reply) || VERB_FIRST_CLAIM_RE.test(reply);
251
+ if (claims && labels.length === 0)
252
+ return opts.reason;
253
+ return null;
254
+ },
255
+ prose: () => opts.reason,
256
+ };
257
+ }
258
+ /** The reply must contain at least one of `keywords` (case-insensitive). */
259
+ export function replyMustMention(keywords, reason) {
260
+ return {
261
+ kind: 'replyMustMention',
262
+ dim: 'behavior',
263
+ check(ctx) {
264
+ const r = lc(ctx.reply);
265
+ return keywords.some((k) => r.includes(lc(k))) ? null : reason;
266
+ },
267
+ prose: () => reason,
268
+ };
269
+ }
270
+ /** At most `n` distinct CTA lemmas from `ctas` may appear. */
271
+ export function replyMaxOccurrences(ctas, n, reason) {
272
+ return {
273
+ kind: 'replyMaxOccurrences',
274
+ dim: 'behavior',
275
+ check(ctx) {
276
+ const r = lc(ctx.reply);
277
+ const distinct = ctas.filter((c) => r.includes(lc(c))).length;
278
+ return distinct > n ? reason : null;
279
+ },
280
+ prose: () => reason,
281
+ };
282
+ }
283
+ /** The reply must be a single short question (exactly one '?'). */
284
+ export function replySingleQuestion(reason) {
285
+ return {
286
+ kind: 'replySingleQuestion',
287
+ dim: 'behavior',
288
+ check(ctx) {
289
+ const questionMarks = ((ctx.reply ?? '').match(/\?/g) ?? []).length;
290
+ return questionMarks === 1 ? null : reason;
291
+ },
292
+ prose: () => reason,
293
+ };
294
+ }
295
+ /** The reply must not match a production-claim regex. */
296
+ export function replyNoProductionClaim(claimRe, reason) {
297
+ return {
298
+ kind: 'replyNoProductionClaim',
299
+ dim: 'behavior',
300
+ check(ctx) {
301
+ return claimRe.test(ctx.reply ?? '') ? reason : null;
302
+ },
303
+ prose: () => reason,
304
+ };
305
+ }
306
+ /** The reply must be non-empty and name ALL `labels`. */
307
+ export function replyConfirmsLabels(labels, reason) {
308
+ return {
309
+ kind: 'replyConfirmsLabels',
310
+ dim: 'behavior',
311
+ check(ctx) {
312
+ const r = ctx.reply ?? '';
313
+ if (r.trim() === '')
314
+ return reason;
315
+ return labels.every((l) => r.includes(l)) ? null : reason;
316
+ },
317
+ prose: () => reason,
318
+ };
319
+ }
320
+ /** The final reply must be non-empty. */
321
+ export function emptyReply() {
322
+ return {
323
+ kind: 'emptyReply',
324
+ dim: 'behavior',
325
+ check(ctx) {
326
+ return (ctx.reply ?? '').trim() === ''
327
+ ? 'Your reply was EMPTY — produce the complete user-facing message now, in the user\'s language.'
328
+ : null;
329
+ },
330
+ prose: () => 'never end a turn with an empty reply',
331
+ };
332
+ }
333
+ // A reply "seeks confirmation" if it asks a question OR carries confirm-language (EN + pt/es).
334
+ const CONFIRM_ASK_RE = /\?|\b(confirm|are you sure|do you want|would you like|shall i|proceed\??|go ahead|confirma|confirmar|tem certeza|deseja|quer(?:es)?|gostaria|posso prosseguir|autoriz)/i;
335
+ /** A destructive PROBE returned requiresConfirmation this turn — the reply MUST relay the question. */
336
+ export function pendingConfirmMustAsk() {
337
+ return {
338
+ kind: 'pendingConfirmMustAsk',
339
+ dim: 'behavior',
340
+ check(ctx) {
341
+ const pending = ctx.observed.some((o) => o.turnIndex === ctx.turnIndex && o.resultFlags?.requiresConfirmation);
342
+ if (!pending)
343
+ return null;
344
+ return CONFIRM_ASK_RE.test(ctx.reply ?? '')
345
+ ? null
346
+ : 'A confirmation is PENDING — relay the confirmation question to the user (your reply must ask it), and do not summarize the action as done.';
347
+ },
348
+ prose: () => 'when a tool asks for confirmation, relay that question to the user before anything else',
349
+ };
350
+ }
351
+ /** The reply claims a deletion/removal, but no destructive tool SUCCEEDED this turn (with exemptions
352
+ * for the confirm-probe two-step and honest failure/negation reports). */
353
+ export function destructiveClaimRequiresSuccess(destructiveTools, claimRe, exemptRe) {
354
+ const re = claimRe ?? /(exclu[íi]d?[oa]?|apagad[oa]|apaguei|removid[oa]|removi|deletad[oa]|deleted|removed)/i;
355
+ const set = new Set(destructiveTools);
356
+ return {
357
+ kind: 'destructiveClaimRequiresSuccess',
358
+ dim: 'behavior',
359
+ check(ctx) {
360
+ const destructiveOk = ctx.observed.some((o) => o.turnIndex === ctx.turnIndex && o.ok && set.has(o.name) && o.args?.confirmed === true);
361
+ if (destructiveOk)
362
+ return null;
363
+ const reply = ctx.reply ?? '';
364
+ const probedThisTurn = ctx.observed.some((o) => o.turnIndex === ctx.turnIndex && o.ok && set.has(o.name) && o.args?.confirmed !== true);
365
+ if (probedThisTurn && CONFIRM_ASK_RE.test(reply))
366
+ return null;
367
+ if (exemptRe && exemptRe.test(reply))
368
+ return null;
369
+ return re.test(reply)
370
+ ? 'Nothing destructive succeeded this turn — do not claim a deletion/removal happened. Report the actual state.'
371
+ : null;
372
+ },
373
+ prose: () => 'never claim something was deleted/removed unless the destructive tool actually succeeded this turn',
374
+ };
375
+ }
376
+ /** If every tool call this turn SUCCEEDED (and at least one ran), the reply may not claim inability. */
377
+ export function noFalseFailureClaim() {
378
+ const claimRe = /(n[ãa]o (consigo|foi poss[íi]vel|posso)|infelizmente n[ãa]o|cannot|can'?t|unable to|falh(ou|a)|failed)[^.!?\n]{0,40}(atualiz|update|alter|salv|sav|configur|aplic|apply|cri(ar|ei)|creat|gerar|generat|aprend|learn)/i;
379
+ return {
380
+ kind: 'noFalseFailureClaim',
381
+ dim: 'behavior',
382
+ check(ctx) {
383
+ const thisTurn = ctx.observed.filter((o) => o.turnIndex === ctx.turnIndex);
384
+ if (!thisTurn.length || thisTurn.some((o) => !o.ok))
385
+ return null;
386
+ return claimRe.test(ctx.reply ?? '')
387
+ ? 'Every tool you called this turn SUCCEEDED — do not claim you could not do it. Report what was actually done, grounded in the tool results.'
388
+ : null;
389
+ },
390
+ prose: () => 'never claim an action failed or that you are unable when your tool calls succeeded — report what actually happened',
391
+ };
392
+ }
393
+ // ── Egress mutator ───────────────────────────────────────────────────────────
394
+ /** Deterministic egress jargon scrub (word-boundary, case-insensitive) before the reply leaves. */
395
+ export function jargonScrub(map) {
396
+ const entries = Object.entries(map).map(([from, to]) => ({ re: new RegExp(`\\b${from}\\b`, 'gi'), to }));
397
+ return {
398
+ kind: 'jargonScrub',
399
+ apply(reply) {
400
+ let out = reply;
401
+ for (const { re, to } of entries)
402
+ out = out.replace(re, to);
403
+ return out;
404
+ },
405
+ };
406
+ }
407
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @looprun-ai/core — public API.
3
+ *
4
+ * AgentSpec (the map) + typed deterministic guards (the safety kit) + the scoped trunk renderer +
5
+ * the backend-agnostic governed-turn machine (the GPS). Framework backends live in sibling
6
+ * packages (@looprun-ai/mastra, …).
7
+ */
8
+ export * from './rules.js';
9
+ export * from './guards.js';
10
+ export { AgentSpecMinimal, AgentSpecBase, AgentSpecFull, resolveBindings, resolveGuards, resolveMutators, } from './spec.js';
11
+ export type { AgentSpec, AgentSpecConfig, AgentControls, AgentModelRef, GuardBinding, MutatorBinding, StateDirective, TerminalPolicy, ToolSchemaLike, Hook, ToolTarget, Layer, } from './spec.js';
12
+ export { renderScopedSpecTrunk, chainOrder } from './trunk.js';
13
+ export type { TrunkTheme } from './trunk.js';
14
+ export { validateSpec, MAX_TOOL_SURFACE } from './validate.js';
15
+ export type { SpecWarning } from './validate.js';
16
+ export { geminiThinkingOff, pinnedDecoding } from './model-params.js';
17
+ export type { ToolDef, TokenUsage, TurnInput, TurnRecord, RunResult, RuntimeTurnInput, RuntimeTurnRecord } from './runtime/types.js';
18
+ export { createLedger, beginTurn, resultOk, recordVeto, recordToolResult, recordTerminal } from './runtime/ledger.js';
19
+ export type { TurnLedger } from './runtime/ledger.js';
20
+ export { TERMINAL_TOOLS, isTerminal, terminalProtocol, TERMINAL_PROTOCOL, TERMINAL_PROTOCOL_REPLY_ONLY, forcedTerminalPrompt, terminalToolDefs, } from './runtime/terminal.js';
21
+ export { evaluatePreTool, evaluateOnInput, applyMutators, checkReply, redriveMessage, defaultExhaustionReply, finalizeReply, } from './runtime/turn.js';
22
+ export type { PreToolVerdict, ReplyViolation, FinalizedReply } from './runtime/turn.js';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,IAAI,EACJ,UAAU,EACV,KAAK,GACN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGtE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrI,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtH,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,4BAA4B,EAC5B,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,eAAe,EACf,aAAa,EACb,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @looprun-ai/core — public API.
3
+ *
4
+ * AgentSpec (the map) + typed deterministic guards (the safety kit) + the scoped trunk renderer +
5
+ * the backend-agnostic governed-turn machine (the GPS). Framework backends live in sibling
6
+ * packages (@looprun-ai/mastra, …).
7
+ */
8
+ export * from './rules.js';
9
+ export * from './guards.js';
10
+ export { AgentSpecMinimal, AgentSpecBase, AgentSpecFull, resolveBindings, resolveGuards, resolveMutators, } from './spec.js';
11
+ export { renderScopedSpecTrunk, chainOrder } from './trunk.js';
12
+ export { validateSpec, MAX_TOOL_SURFACE } from './validate.js';
13
+ export { geminiThinkingOff, pinnedDecoding } from './model-params.js';
14
+ export { createLedger, beginTurn, resultOk, recordVeto, recordToolResult, recordTerminal } from './runtime/ledger.js';
15
+ export { TERMINAL_TOOLS, isTerminal, terminalProtocol, TERMINAL_PROTOCOL, TERMINAL_PROTOCOL_REPLY_ONLY, forcedTerminalPrompt, terminalToolDefs, } from './runtime/terminal.js';
16
+ export { evaluatePreTool, evaluateOnInput, applyMutators, checkReply, redriveMessage, defaultExhaustionReply, finalizeReply, } from './runtime/turn.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,WAAW,CAAC;AAenB,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAItE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEtH,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,4BAA4B,EAC5B,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,eAAe,EACf,aAAa,EACb,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @looprun-ai/core — pure model-parameter presets (zero deps, no provider SDK imports).
3
+ *
4
+ * These are plain option objects spread into a backend's generate calls. They encode measured
5
+ * provider footguns so hosts don't re-discover them.
6
+ */
7
+ /**
8
+ * Gemini with thinking OFF. TRAP (measured): Google's 'off' must use the NUMERIC
9
+ * `thinkingBudget: 0` — `thinkingLevel` does NOT turn thinking off.
10
+ */
11
+ export declare function geminiThinkingOff(): Record<string, unknown>;
12
+ /** Pinned decoding for reproducible runs (temperature 0 + optional seed — llama.cpp honors seed). */
13
+ export declare function pinnedDecoding(opts?: {
14
+ seed?: number;
15
+ }): Record<string, unknown>;
16
+ //# sourceMappingURL=model-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-params.d.ts","sourceRoot":"","sources":["../src/model-params.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM3D;AAED,qGAAqG;AACrG,wBAAgB,cAAc,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOpF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @looprun-ai/core — pure model-parameter presets (zero deps, no provider SDK imports).
3
+ *
4
+ * These are plain option objects spread into a backend's generate calls. They encode measured
5
+ * provider footguns so hosts don't re-discover them.
6
+ */
7
+ /**
8
+ * Gemini with thinking OFF. TRAP (measured): Google's 'off' must use the NUMERIC
9
+ * `thinkingBudget: 0` — `thinkingLevel` does NOT turn thinking off.
10
+ */
11
+ export function geminiThinkingOff() {
12
+ return {
13
+ providerOptions: {
14
+ google: { thinkingConfig: { thinkingBudget: 0, includeThoughts: false } },
15
+ },
16
+ };
17
+ }
18
+ /** Pinned decoding for reproducible runs (temperature 0 + optional seed — llama.cpp honors seed). */
19
+ export function pinnedDecoding(opts = {}) {
20
+ return {
21
+ modelSettings: {
22
+ temperature: 0,
23
+ ...(opts.seed != null ? { seed: opts.seed } : {}),
24
+ },
25
+ };
26
+ }
27
+ //# sourceMappingURL=model-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-params.js","sourceRoot":"","sources":["../src/model-params.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,eAAe,EAAE;YACf,MAAM,EAAE,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE;SAC1E;KACF,CAAC;AACJ,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,cAAc,CAAC,OAA0B,EAAE;IACzD,OAAO;QACL,aAAa,EAAE;YACb,WAAW,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @looprun-ai/core — guard TYPES (framework-free).
3
+ *
4
+ * The governance primitives the agentspec skill authors: a deterministic `check` paired with an
5
+ * LLM-facing `prose`, keyed only on tool args / world state / observed calls — NEVER the user
6
+ * text (the magnet firewall: guards must not scope behavior by user intent). The world is an
7
+ * opaque, host-injected seam (`AgentWorld`); domain guards narrow it (e.g. `MediaWorld`) — the
8
+ * package itself is domain-neutral.
9
+ */
10
+ /** The five enforcement dims (taxonomy metadata; the structural key is the hook it maps to). */
11
+ export type Dim = 'spatial' | 'input' | 'run' | 'output' | 'behavior';
12
+ /**
13
+ * The read/exec world seam the runtime + guards depend on — host-injected, opaque to the package.
14
+ * The core methods the runtime calls are typed; domain-specific accessors (hasMediaLabel,
15
+ * imageQuotaRemaining, hasVisualStyle, …) flow through the index signature so a domain's
16
+ * guards/theme can read them without the package knowing the domain.
17
+ */
18
+ export interface AgentWorld {
19
+ exec(name: string, args: Record<string, unknown>): Promise<unknown> | unknown;
20
+ advanceTurn(): void;
21
+ ingestAttachment(url: string): string;
22
+ toolCalls: Array<{
23
+ name: string;
24
+ args: unknown;
25
+ result?: unknown;
26
+ tookEffect?: boolean;
27
+ }>;
28
+ sseActions: unknown[];
29
+ [k: string]: any;
30
+ }
31
+ /** The media-label capability a media domain's world exposes (narrowed by label guards). */
32
+ export interface MediaWorld {
33
+ hasMediaLabel(label: string): boolean;
34
+ mediaLabels(): string[];
35
+ }
36
+ /** One tool call observed this CONVERSATION. Magnet-safe: no user text. */
37
+ export interface ObservedCall {
38
+ name: string;
39
+ args: Record<string, unknown>;
40
+ ok: boolean;
41
+ turnIndex: number;
42
+ resultFlags?: {
43
+ requiresConfirmation?: boolean;
44
+ };
45
+ }
46
+ /** Everything a guard predicate may read — NEVER the user's text. */
47
+ export interface GuardCtx {
48
+ args: Record<string, unknown>;
49
+ tool?: string;
50
+ world: AgentWorld;
51
+ observed: ObservedCall[];
52
+ turnIndex: number;
53
+ reply?: string;
54
+ producedThisTurn?: string[];
55
+ attachmentsThisTurn?: string[];
56
+ result?: unknown;
57
+ notes?: string[];
58
+ }
59
+ /** A typed guard instance: deterministic gate + LLM-facing explanation (the prose+check pairing). */
60
+ export interface Guard {
61
+ kind: string;
62
+ dim: Dim;
63
+ check(ctx: GuardCtx): string | null | Promise<string | null>;
64
+ prose(): string;
65
+ }
66
+ /** A deterministic egress TRANSFORM on the final reply (no LLM call), applied before the onReply checks. */
67
+ export interface ReplyMutator {
68
+ kind: string;
69
+ apply(reply: string, ctx: GuardCtx): string;
70
+ }
71
+ /** A producer→consumer flow edge, rendered as a FLOW line in the trunk. */
72
+ export interface SpatialEdge {
73
+ from: string;
74
+ to: string;
75
+ }
76
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gGAAgG;AAChG,MAAM,MAAM,GAAG,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC9E,WAAW,IAAI,IAAI,CAAC;IACpB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC1F,UAAU,EAAE,OAAO,EAAE,CAAC;IAEtB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,4FAA4F;AAC5F,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACtC,WAAW,IAAI,MAAM,EAAE,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAClD;AAED,qEAAqE;AACrE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qGAAqG;AACrG,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7D,KAAK,IAAI,MAAM,CAAC;CACjB;AAED,4GAA4G;AAC5G,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC7C;AAED,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ"}
package/dist/rules.js ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @looprun-ai/core — guard TYPES (framework-free).
3
+ *
4
+ * The governance primitives the agentspec skill authors: a deterministic `check` paired with an
5
+ * LLM-facing `prose`, keyed only on tool args / world state / observed calls — NEVER the user
6
+ * text (the magnet firewall: guards must not scope behavior by user intent). The world is an
7
+ * opaque, host-injected seam (`AgentWorld`); domain guards narrow it (e.g. `MediaWorld`) — the
8
+ * package itself is domain-neutral.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}