@stratusagent/agents 0.11.3 → 0.11.5

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 (53) hide show
  1. package/dist/define.d.ts +22 -0
  2. package/dist/define.d.ts.map +1 -0
  3. package/dist/define.js +64 -0
  4. package/dist/define.js.map +1 -0
  5. package/dist/frontmatter.d.ts +65 -0
  6. package/dist/frontmatter.d.ts.map +1 -0
  7. package/dist/frontmatter.js +260 -0
  8. package/dist/frontmatter.js.map +1 -0
  9. package/dist/identity.d.ts +139 -0
  10. package/dist/identity.d.ts.map +1 -0
  11. package/dist/identity.js +259 -0
  12. package/dist/identity.js.map +1 -0
  13. package/dist/index.d.ts +11 -643
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +16 -1516
  16. package/dist/index.js.map +1 -1
  17. package/dist/router.d.ts +18 -0
  18. package/dist/router.d.ts.map +1 -0
  19. package/dist/router.js +44 -0
  20. package/dist/router.js.map +1 -0
  21. package/dist/schedules.d.ts +163 -0
  22. package/dist/schedules.d.ts.map +1 -0
  23. package/dist/schedules.js +215 -0
  24. package/dist/schedules.js.map +1 -0
  25. package/dist/skills.d.ts +135 -0
  26. package/dist/skills.d.ts.map +1 -0
  27. package/dist/skills.js +167 -0
  28. package/dist/skills.js.map +1 -0
  29. package/dist/soul.d.ts +44 -0
  30. package/dist/soul.d.ts.map +1 -0
  31. package/dist/soul.js +98 -0
  32. package/dist/soul.js.map +1 -0
  33. package/dist/tools/delegate.d.ts +93 -0
  34. package/dist/tools/delegate.d.ts.map +1 -0
  35. package/dist/tools/delegate.js +223 -0
  36. package/dist/tools/delegate.js.map +1 -0
  37. package/dist/tools/gateway-only.d.ts +19 -0
  38. package/dist/tools/gateway-only.d.ts.map +1 -0
  39. package/dist/tools/gateway-only.js +29 -0
  40. package/dist/tools/gateway-only.js.map +1 -0
  41. package/dist/tools/memory.d.ts +51 -0
  42. package/dist/tools/memory.d.ts.map +1 -0
  43. package/dist/tools/memory.js +306 -0
  44. package/dist/tools/memory.js.map +1 -0
  45. package/dist/tools/message.d.ts +26 -0
  46. package/dist/tools/message.d.ts.map +1 -0
  47. package/dist/tools/message.js +46 -0
  48. package/dist/tools/message.js.map +1 -0
  49. package/dist/tools/schedule.d.ts +20 -0
  50. package/dist/tools/schedule.d.ts.map +1 -0
  51. package/dist/tools/schedule.js +146 -0
  52. package/dist/tools/schedule.js.map +1 -0
  53. package/package.json +2 -2
@@ -0,0 +1,259 @@
1
+ // First names only — agents should feel like a teammate you call by name.
2
+ // Uniqueness comes from the generated id suffix, never from the name.
3
+ const AGENT_NAMES = [
4
+ 'Ada', 'Amara', 'Arlo', 'Asha', 'August', 'Beatrix', 'Caleb', 'Camila',
5
+ 'Dara', 'Devon', 'Eleni', 'Elio', 'Esme', 'Felix', 'Freya', 'Gideon',
6
+ 'Hana', 'Hugo', 'Imani', 'Ines', 'Jasper', 'Juno', 'Kai', 'Kira',
7
+ 'Leandro', 'Lucia', 'Mabel', 'Mateo', 'Nadia', 'Nico', 'Odessa', 'Otis',
8
+ 'Priya', 'Quinn', 'Rafael', 'Romy', 'Sana', 'Silas', 'Tamsin', 'Theo',
9
+ 'Uma', 'Vera', 'Wesley', 'Xiomara', 'Yusuf', 'Zadie',
10
+ 'Alba', 'Bruno', 'Celia', 'Dashiell', 'Edie', 'Ferris', 'Greta', 'Hollis',
11
+ 'Ida', 'Jules', 'Koa', 'Lior', 'Marisol', 'Nyla', 'Oren', 'Paloma',
12
+ 'Reza', 'Sunny', 'Tobias', 'Vada', 'Wren', 'Yara', 'Zeke',
13
+ ];
14
+ /**
15
+ * The one house style every Stratus agent avatar is drawn in. Surfaces
16
+ * (CLI, web, macOS) render this style; agents differ by their name-derived
17
+ * hue and palette, so the team looks cohesive while each member is
18
+ * recognizable.
19
+ */
20
+ export const AVATAR_STYLE = 'stratus';
21
+ /** Deterministic 32-bit hash so the same seed always yields the same identity. */
22
+ const hashSeed = (seed) => {
23
+ let hash = 2166136261;
24
+ for (let index = 0; index < seed.length; index += 1) {
25
+ hash ^= seed.charCodeAt(index);
26
+ hash = Math.imul(hash, 16777619);
27
+ }
28
+ return hash >>> 0;
29
+ };
30
+ const hslToHex = (hue, saturation, lightness) => {
31
+ const s = saturation / 100;
32
+ const l = lightness / 100;
33
+ const k = (n) => (n + hue / 30) % 12;
34
+ const a = s * Math.min(l, 1 - l);
35
+ const channel = (n) => {
36
+ const value = l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
37
+ return Math.round(value * 255).toString(16).padStart(2, '0');
38
+ };
39
+ return `#${channel(0)}${channel(8)}${channel(4)}`;
40
+ };
41
+ /**
42
+ * Generate a human-ish first name. Deterministic when a seed is supplied;
43
+ * random otherwise.
44
+ */
45
+ export const generateAgentName = (seed) => {
46
+ const value = seed !== undefined
47
+ ? hashSeed(seed)
48
+ : Math.floor(Math.random() * 0xffffffff);
49
+ return AGENT_NAMES[value % AGENT_NAMES.length] ?? 'Quinn';
50
+ };
51
+ /**
52
+ * Derive an avatar theme from a name: a stable hue and a small palette in
53
+ * the shared Stratus house style. Consumers (CLI, web, macOS) draw the
54
+ * actual image from this so the agent looks the same on every surface.
55
+ */
56
+ export const generateAvatarTheme = (name) => {
57
+ const value = hashSeed(name);
58
+ const hue = value % 360;
59
+ return {
60
+ seed: name,
61
+ hue,
62
+ palette: [
63
+ hslToHex(hue, 70, 55),
64
+ hslToHex((hue + 30) % 360, 65, 70),
65
+ hslToHex((hue + 180) % 360, 60, 45),
66
+ ],
67
+ style: AVATAR_STYLE,
68
+ };
69
+ };
70
+ export const slugify = (name) => name
71
+ .toLowerCase()
72
+ .replace(/[^a-z0-9]+/g, '-')
73
+ .replace(/^-+|-+$/g, '') || 'agent';
74
+ /**
75
+ * The shape an id is *minted* in: lowercase alphanumerics and internal
76
+ * hyphens, starting with an alphanumeric. Everything `slugify` produces
77
+ * matches it, so every id this module derives does.
78
+ *
79
+ * Not what validation enforces. A hand-written `id:` predates any shape
80
+ * rule and `Ava_1` was as valid as `ava` — see `isValidAgentId`.
81
+ */
82
+ export const AGENT_ID_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
83
+ /**
84
+ * How long an id we *build* is allowed to get. A construction bound, not a
85
+ * validation rule — `isValidAgentId` deliberately does not check it.
86
+ *
87
+ * Every id derived from a long name predates this bound, and enforcing it
88
+ * retroactively drops working agents off the roster, while trimming them
89
+ * silently re-keys their sessions, memory, and credentials to an id nobody
90
+ * has ever used. So the bound applies where an id is minted fresh and
91
+ * nothing is keyed to it yet, and nowhere else. File systems still have
92
+ * limits, and an id long enough to hit them fails at the join with a name
93
+ * that says so.
94
+ */
95
+ export const MAX_AGENT_ID_LENGTH = 64;
96
+ /**
97
+ * What an id may never be, whatever else it is: anything that stops being
98
+ * a single, addressable path segment. A separator escapes the directory,
99
+ * a leading dot hides the file or walks up out of it (`..`), and a control
100
+ * character is not typeable back.
101
+ */
102
+ const PATH_UNSAFE_ID = /[/\\]|[\u0000-\u001f\u007f]/;
103
+ /**
104
+ * The safety half of every id rule here, shared because agent ids and
105
+ * session ids answer it identically and a second copy would drift from the
106
+ * first the next time one of them learned something.
107
+ *
108
+ * Safety only: what an id may never be. Shape — the slug pattern, a length
109
+ * bound — is per-kind and stays with the kind, because the reasons differ.
110
+ */
111
+ const isAddressableId = (id) => id.length > 0
112
+ // Invisible leading or trailing space cannot be typed back reliably, so
113
+ // an id that is not its own trimmed self is a mistake, not a legacy.
114
+ && id === id.trim()
115
+ && !id.startsWith('.')
116
+ && !PATH_UNSAFE_ID.test(id)
117
+ // An id keys plain objects too — `credentials.channels.slack[id]` among
118
+ // them — where an inherited name is not a free slot. `toString` reads as
119
+ // already connected with nothing stored, and `__proto__` assigns through
120
+ // to the prototype, so the write lands nowhere and `JSON.stringify` drops
121
+ // it. `in {}` names exactly that set, and names it by the property it
122
+ // has rather than by a list to keep in step.
123
+ && !(id in {});
124
+ /**
125
+ * Whether `id` is safe to key an agent's resources and paths by.
126
+ *
127
+ * Ids are not labels. They key sessions, memory, credentials, Slack channel
128
+ * tokens, and every per-agent path on disk — and an explicit frontmatter
129
+ * `id` is untrusted input: a soul file travels with a repository, and in
130
+ * the hosted profile it comes from a tenant. `id: ../../escape` reaches
131
+ * every one of those joins intact, so it is stopped once here rather than
132
+ * defended at each of them.
133
+ *
134
+ * **Unsafe is the rule, not un-sluglike.** Nothing before this checked an
135
+ * explicit id at all, so `Ava_1`, `team.alpha`, and `AVA` are all out there
136
+ * keying real sessions and real credentials. Holding them to the shape ids
137
+ * are minted in would not make anything safer — none of them can leave
138
+ * their directory — and `loadRosterSouls` degrades a soul that will not
139
+ * parse to a warning, so the only thing it would accomplish is dropping
140
+ * those agents off the roster on upgrade, quietly, while their data stays
141
+ * behind under the old id. Reserving the slug shape for ids nobody has
142
+ * chosen yet costs nothing; imposing it on ids people are already using
143
+ * costs them their agent.
144
+ *
145
+ * Rejected, never sanitized: rewriting `../../escape` into `escape` hands
146
+ * back an agent nobody asked for, keyed to resources nobody named.
147
+ */
148
+ // `*` is the delegate wildcard (`delegates: ['*']`), so an agent with that
149
+ // id could never be delegated to alone — reserved rather than ambiguous.
150
+ // Agent ids only: a session id is a broader address, and the wildcard means
151
+ // nothing there.
152
+ export const isValidAgentId = (id) => isAddressableId(id) && id !== '*';
153
+ /**
154
+ * Whether a `delegates` entry is one the soul can hold: any agent id, or
155
+ * the wildcard — the same rule as {@link isValidAgentId}, so every agent a
156
+ * roster can hold can be named as a target. Exported so the control API
157
+ * refuses a bad entry as the client's error rather than discovering it in
158
+ * the soul round-trip.
159
+ */
160
+ export const isValidDelegateEntry = (entry) => entry === '*' || isValidAgentId(entry);
161
+ /**
162
+ * How much of a new session id is the *client's* to spend, on top of the
163
+ * agent id it addresses.
164
+ *
165
+ * Every id in circulation is a colon-joined address that embeds the agent
166
+ * id — `web:<agentId>:<uuid>` from the dashboard, a channel key of
167
+ * `<channel>:<agentId>:<team>:<conversation>:<thread>`, with a bare UUID
168
+ * from the CLI the one exception. So a flat cap is the wrong shape: agent
169
+ * ids are deliberately unbounded (see {@link isValidAgentId}), and a flat
170
+ * 200 refused every dashboard conversation for an agent whose id ran past
171
+ * 159 characters — an agent that stays on the roster and simply stops being
172
+ * chattable, which is the quiet-breakage failure the unbounded rule exists
173
+ * to avoid.
174
+ *
175
+ * Budgeting the composition instead keeps the bound meaningful without
176
+ * capping the agent id through the back door. It cannot be gamed to widen
177
+ * itself: the allowance comes from an agent id already checked against the
178
+ * roster, not from the caller's own string.
179
+ */
180
+ export const MAX_SESSION_ID_LENGTH = 200;
181
+ /**
182
+ * Ids that are a client's bug rendered as text, not an address anyone chose.
183
+ *
184
+ * Each is what JavaScript prints when an id was never computed — an
185
+ * unresolved variable, a null field, arithmetic that went sideways, an
186
+ * object concatenated into a template. The dashboard shipped the first one:
187
+ * `/sessions/undefined/messages`, accepted, and a durable conversation
188
+ * literally named `undefined`.
189
+ *
190
+ * A blocklist rather than a pattern, because these are safe, well-formed
191
+ * strings — nothing about their *shape* is wrong, which is exactly why no
192
+ * shape rule catches them. Kept to the strings the language itself
193
+ * produces: guessing at what else looks like a mistake would start refusing
194
+ * ids people meant.
195
+ */
196
+ const STRINGIFIED_NOTHING = new Set(['undefined', 'null', 'NaN', '[object Object]']);
197
+ /**
198
+ * Whether `id` may open a *new* conversation.
199
+ *
200
+ * Session ids are client-minted and a `POST` to an unknown one creates it,
201
+ * so this is the only thing standing between an HTTP caller and a durable
202
+ * row. `undefined`, `null`, and a bare space have all reached the session
203
+ * table through that door — the dashboard shipped the first of them.
204
+ *
205
+ * **Checked where an id is minted, never where one is used.** An id already
206
+ * in the store addresses a real conversation, whatever shape it is, and
207
+ * re-validating on read would lock someone out of their own history to
208
+ * enforce a rule that postdates it. Same reasoning as
209
+ * {@link MAX_AGENT_ID_LENGTH}, which is why the length bound lives here and
210
+ * not in {@link isValidAgentId}.
211
+ *
212
+ * `agentId` is the agent the id addresses, when the caller knows it — every
213
+ * client convention embeds it, so its length is part of the budget rather
214
+ * than something the bound gets to cap. The allowance applies only to an id
215
+ * that actually contains it, since those are the characters being paid for;
216
+ * a bare UUID and an unrelated string are both held to
217
+ * {@link MAX_SESSION_ID_LENGTH} alone, as they are when `agentId` is
218
+ * omitted.
219
+ *
220
+ * Shape is deliberately not enforced. Every id above is a legitimate
221
+ * address, and no pattern admitting all of them excludes `undefined` — so
222
+ * the safety rule, a bound, and {@link STRINGIFIED_NOTHING} are what catch
223
+ * the real mistakes. Rejected, never sanitized: trimming an id hands the
224
+ * caller back a conversation at an address it never asked for.
225
+ */
226
+ export const isValidSessionId = (id, agentId) => isAddressableId(id)
227
+ // The allowance is for an id that actually *spends* those characters on
228
+ // the agent id. Granting it merely because the request names a long-id
229
+ // agent would let that agent's existence buy an unrelated caller 300 more
230
+ // characters of junk — the durable-garbage case the bound is here to stop.
231
+ && id.length <= MAX_SESSION_ID_LENGTH
232
+ + (agentId !== undefined && id.includes(agentId) ? agentId.length : 0)
233
+ && !STRINGIFIED_NOTHING.has(id);
234
+ /**
235
+ * A freshly minted id, bounded — `base` trimmed so that appending `suffix`
236
+ * still fits, with any hyphen left dangling by the trim removed.
237
+ *
238
+ * Only for ids nothing is keyed to yet: a generated agent's
239
+ * name-plus-suffix, and `agent new` retrying a filename collision. Both mint
240
+ * an id in the same breath as the agent, so trimming takes nothing away.
241
+ * Shared rather than re-derived so the two do not each own half of the bound
242
+ * and drift. An id derived from a name someone chose does *not* come through
243
+ * here — that name may already have an agent behind it.
244
+ */
245
+ export const agentIdWithSuffix = (base, suffix) => {
246
+ const tail = suffix ? `-${suffix}` : '';
247
+ const room = Math.max(1, MAX_AGENT_ID_LENGTH - tail.length);
248
+ return `${base.slice(0, room).replace(/-+$/, '') || 'agent'}${tail}`;
249
+ };
250
+ // Ids for generated names carry a short unique suffix: the name pool is
251
+ // small, and two agents that draw the same name must still be two people —
252
+ // memory and access scopes are keyed by id. Deterministic when seeded.
253
+ export const generatedIdSuffix = (seed) => {
254
+ const value = seed !== undefined
255
+ ? hashSeed(`${seed}:id`)
256
+ : Math.floor(Math.random() * 0xffffffff);
257
+ return value.toString(36).padStart(4, '0').slice(0, 4);
258
+ };
259
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}