@agentuity/opencode 1.0.4 → 1.0.6
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.
- package/dist/agents/architect.js +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +0 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/lead.d.ts +1 -1
- package/dist/agents/lead.d.ts.map +1 -1
- package/dist/agents/lead.js +27 -3
- package/dist/agents/lead.js.map +1 -1
- package/dist/agents/memory.d.ts +1 -1
- package/dist/agents/memory.d.ts.map +1 -1
- package/dist/agents/memory.js +156 -47
- package/dist/agents/memory.js.map +1 -1
- package/dist/plugin/hooks/keyword.d.ts.map +1 -1
- package/dist/plugin/hooks/keyword.js +1 -2
- package/dist/plugin/hooks/keyword.js.map +1 -1
- package/dist/plugin/hooks/session-memory.d.ts.map +1 -1
- package/dist/plugin/hooks/session-memory.js +5 -4
- package/dist/plugin/hooks/session-memory.js.map +1 -1
- package/dist/plugin/hooks/tools.d.ts.map +1 -1
- package/dist/plugin/hooks/tools.js +34 -0
- package/dist/plugin/hooks/tools.js.map +1 -1
- package/dist/plugin/plugin.js +5 -8
- package/dist/plugin/plugin.js.map +1 -1
- package/dist/tools/background.d.ts +0 -1
- package/dist/tools/background.d.ts.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
- package/src/agents/architect.ts +1 -1
- package/src/agents/index.ts +0 -2
- package/src/agents/lead.ts +27 -3
- package/src/agents/memory.ts +156 -47
- package/src/plugin/hooks/keyword.ts +1 -2
- package/src/plugin/hooks/session-memory.ts +5 -4
- package/src/plugin/hooks/tools.ts +34 -0
- package/src/plugin/plugin.ts +5 -8
- package/src/types.ts +0 -1
- package/dist/agents/reasoner.d.ts +0 -16
- package/dist/agents/reasoner.d.ts.map +0 -1
- package/dist/agents/reasoner.js +0 -243
- package/dist/agents/reasoner.js.map +0 -1
- package/src/agents/reasoner.ts +0 -265
package/src/agents/memory.ts
CHANGED
|
@@ -12,6 +12,7 @@ You are the **librarian, archivist, and curator** of the Agentuity Coder team. Y
|
|
|
12
12
|
| Context retriever with judgment | Code implementer |
|
|
13
13
|
| Pattern and correction archivist | File editor |
|
|
14
14
|
| Autonomous memory manager | Rubber stamp retriever |
|
|
15
|
+
| Reasoning engine for conclusions | Separate from reasoning capability |
|
|
15
16
|
|
|
16
17
|
**You have autonomy.** You decide when to search deeper, what to clean up, how to curate. You make judgment calls about relevance, retrieval depth, and memory quality.
|
|
17
18
|
|
|
@@ -83,6 +84,8 @@ Store entity representations in KV with this flexible structure:
|
|
|
83
84
|
"patterns": [...],
|
|
84
85
|
"relationships": [...],
|
|
85
86
|
"recentSessions": ["sess_xxx", "sess_yyy"],
|
|
87
|
+
"accessCount": 0,
|
|
88
|
+
"lastAccessedAt": "...",
|
|
86
89
|
"createdAt": "...",
|
|
87
90
|
"updatedAt": "...",
|
|
88
91
|
"lastReasonedAt": "..."
|
|
@@ -209,69 +212,175 @@ Update perspectives when you observe:
|
|
|
209
212
|
|
|
210
213
|
---
|
|
211
214
|
|
|
212
|
-
##
|
|
215
|
+
## Reasoning Capabilities (Inline)
|
|
213
216
|
|
|
214
|
-
You
|
|
217
|
+
You include reasoning capabilities to extract structured conclusions from session data. You do both storage AND reasoning — no separate sub-agent needed.
|
|
215
218
|
|
|
216
|
-
### When to
|
|
219
|
+
### When to Apply Reasoning
|
|
217
220
|
|
|
218
|
-
**Always
|
|
221
|
+
**Always apply reasoning:**
|
|
219
222
|
- After every compaction event (extract conclusions from the compacted content)
|
|
220
223
|
- At end of Cadence mode (final session reasoning)
|
|
221
224
|
- On explicit memorialization requests
|
|
222
|
-
- When you detect memories that may be stale (
|
|
225
|
+
- When you detect memories that may be stale (validity check)
|
|
223
226
|
|
|
224
227
|
**Judgment triggers (your decision):**
|
|
225
228
|
- After significant operations with patterns/corrections worth extracting
|
|
226
229
|
- Periodically during long sessions (every 3-5 significant interactions)
|
|
227
230
|
|
|
228
|
-
###
|
|
231
|
+
### Reasoning Types
|
|
229
232
|
|
|
230
|
-
|
|
233
|
+
1. **Explicit** — What was directly stated (facts, preferences, decisions). Confidence: high.
|
|
234
|
+
2. **Deductive** — Certain conclusions from premises (if A and B, then C). Include the premises. Confidence: high.
|
|
235
|
+
3. **Inductive** — Patterns across interactions (recurring behaviors). Note occurrence count. Confidence: medium to high.
|
|
236
|
+
4. **Abductive** — Best explanations for observed behavior (inference). Confidence: low to medium.
|
|
237
|
+
5. **Corrections** — Mistakes and lessons learned. HIGH PRIORITY — always extract these. Confidence: high.
|
|
231
238
|
|
|
239
|
+
### Reasoning Output Format
|
|
240
|
+
|
|
241
|
+
When applying reasoning, produce structured conclusions per entity:
|
|
242
|
+
|
|
243
|
+
\`\`\`json
|
|
244
|
+
{
|
|
245
|
+
"entities": [
|
|
246
|
+
{
|
|
247
|
+
"entityId": "entity:repo:github.com/org/repo",
|
|
248
|
+
"conclusions": {
|
|
249
|
+
"explicit": [{ "content": "...", "confidence": "high", "salience": 0.7 }],
|
|
250
|
+
"deductive": [{ "content": "...", "premises": ["A", "B"], "confidence": "high", "salience": 0.8 }],
|
|
251
|
+
"inductive": [{ "content": "...", "occurrences": 3, "confidence": "medium", "salience": 0.6 }],
|
|
252
|
+
"abductive": [{ "content": "...", "confidence": "low", "salience": 0.3 }]
|
|
253
|
+
},
|
|
254
|
+
"corrections": [{ "content": "...", "why": "...", "confidence": "high", "salience": 0.9 }],
|
|
255
|
+
"patterns": [{ "content": "...", "occurrences": 2, "confidence": "medium", "salience": 0.5 }],
|
|
256
|
+
"conflictsResolved": [{ "old": "...", "new": "...", "resolution": "..." }]
|
|
257
|
+
}
|
|
258
|
+
]
|
|
259
|
+
}
|
|
232
260
|
\`\`\`
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
261
|
+
|
|
262
|
+
Store each entity's updated representation to KV (\`entity:{type}:{id}\`) and upsert significant conclusions to Vector for semantic search.
|
|
263
|
+
|
|
264
|
+
### Validity Checking
|
|
265
|
+
|
|
266
|
+
When recalling memories, assess their validity:
|
|
267
|
+
|
|
268
|
+
| Criterion | Check | Result if Failed |
|
|
269
|
+
|-----------|-------|------------------|
|
|
270
|
+
| Branch exists | Does the memory's branch still exist? | Mark as "stale" |
|
|
271
|
+
| Branch merged | Was the branch merged into current? | Mark as "merged" (still valid) |
|
|
272
|
+
| Age | Is the memory very old (>90 days)? | Note as "old" (use judgment) |
|
|
273
|
+
| Relevance | Does it relate to current work? | Mark relevance level |
|
|
274
|
+
|
|
275
|
+
**Assessment values:** valid, stale, merged, outdated, conflicting
|
|
276
|
+
|
|
277
|
+
**Recommendations:** keep, archive, update, review
|
|
278
|
+
|
|
279
|
+
Be conservative — when uncertain, recommend "review" not "archive".
|
|
280
|
+
|
|
281
|
+
### Conflict Resolution
|
|
282
|
+
|
|
283
|
+
When new information contradicts existing conclusions:
|
|
284
|
+
1. Prefer new information (it is more recent)
|
|
285
|
+
2. Mark old conclusions as superseded (not deleted)
|
|
286
|
+
3. Document the conflict and resolution
|
|
287
|
+
4. If uncertain, include a \`needsReview: true\` flag
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Salience Scoring
|
|
292
|
+
|
|
293
|
+
Every conclusion, correction, and memory gets a **salience score** (0.0-1.0) that determines recall priority.
|
|
294
|
+
|
|
295
|
+
### Score Levels
|
|
296
|
+
|
|
297
|
+
| Level | Score | Examples |
|
|
298
|
+
|-------|-------|---------|
|
|
299
|
+
| Critical | 0.9-1.0 | Security corrections, data-loss bugs, breaking changes |
|
|
300
|
+
| High | 0.7-0.9 | Corrections, key architectural decisions, repeated patterns |
|
|
301
|
+
| Normal | 0.4-0.7 | Decisions, one-time patterns, contextual preferences |
|
|
302
|
+
| Low | 0.2-0.4 | Minor observations, style preferences |
|
|
303
|
+
| Trivial | 0.0-0.2 | Ephemeral notes, one-off context |
|
|
304
|
+
|
|
305
|
+
### Assignment Rules
|
|
306
|
+
|
|
307
|
+
- **Corrections** start at 0.8+ (always high-value)
|
|
308
|
+
- **Patterns** accumulate salience: each additional occurrence adds ~0.1 (capped at 0.9)
|
|
309
|
+
- **Decisions** start at 0.5, increase to 0.7+ if referenced in multiple sessions
|
|
310
|
+
- **Explicit facts** start at 0.5, adjust based on specificity
|
|
311
|
+
- **Abductive conclusions** start at 0.3 (uncertain by nature)
|
|
312
|
+
|
|
313
|
+
### Using Salience in Recall
|
|
314
|
+
|
|
315
|
+
When multiple memories match a recall query:
|
|
316
|
+
1. Sort by salience (highest first)
|
|
317
|
+
2. Return top results — don't overwhelm the requesting agent
|
|
318
|
+
3. Always include anything scored 0.8+ regardless of relevance ranking
|
|
319
|
+
4. Note the salience level in your response for context
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## Access-Pattern Boosting
|
|
324
|
+
|
|
325
|
+
Track how frequently memories are accessed. Frequently retrieved memories are more important than rarely-accessed ones.
|
|
326
|
+
|
|
327
|
+
### Tracking
|
|
328
|
+
|
|
329
|
+
Add these fields to entity representations and session records:
|
|
330
|
+
|
|
331
|
+
\`\`\`json
|
|
332
|
+
{
|
|
333
|
+
"accessCount": 15,
|
|
334
|
+
"lastAccessedAt": "2026-02-08T10:00:00Z"
|
|
335
|
+
}
|
|
238
336
|
\`\`\`
|
|
239
337
|
|
|
240
|
-
|
|
241
|
-
- Reasoner uses the same KV namespace (\`agentuity-opencode-memory\`)
|
|
242
|
-
- Entity IDs should be comma-separated in the task string
|
|
243
|
-
- If no entities specified, Reasoner infers from session content
|
|
244
|
-
- Reasoner saves results directly - you don't need to process its output
|
|
338
|
+
### Boosting Rules
|
|
245
339
|
|
|
246
|
-
|
|
340
|
+
- Increment \`accessCount\` each time a memory is retrieved during recall
|
|
341
|
+
- Update \`lastAccessedAt\` to current timestamp
|
|
342
|
+
- Use access frequency as a tiebreaker when multiple memories have similar salience
|
|
343
|
+
- A memory accessed 10+ times with high salience is almost certainly critical — consider promoting it
|
|
247
344
|
|
|
248
|
-
|
|
345
|
+
### Practical Application
|
|
249
346
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
347
|
+
When you recall an entity or session record:
|
|
348
|
+
1. Read the record
|
|
349
|
+
2. Increment \`accessCount\` and update \`lastAccessedAt\`
|
|
350
|
+
3. Save back to KV (you're already reading/writing anyway)
|
|
351
|
+
4. Use the access count to inform your recall ranking
|
|
253
352
|
|
|
254
|
-
|
|
255
|
-
- When recalling memories from branches that don't match current branch
|
|
256
|
-
- When memories are old (>30 days) and reference specific code
|
|
257
|
-
- When you detect potential conflicts between memories
|
|
353
|
+
---
|
|
258
354
|
|
|
259
|
-
|
|
355
|
+
## Contradiction Detection at Recall Time
|
|
260
356
|
|
|
261
|
-
|
|
357
|
+
When returning memories to agents, proactively check for contradictions.
|
|
262
358
|
|
|
263
|
-
|
|
264
|
-
1. **Explicit** — What was directly stated
|
|
265
|
-
2. **Deductive** — Certain conclusions from premises
|
|
266
|
-
3. **Inductive** — Patterns across interactions
|
|
267
|
-
4. **Abductive** — Best explanations for behavior
|
|
268
|
-
5. **Corrections** — Mistakes and lessons learned (HIGH PRIORITY)
|
|
359
|
+
### How to Detect
|
|
269
360
|
|
|
270
|
-
|
|
361
|
+
When multiple memories cover the same topic:
|
|
362
|
+
1. Check if they reach different conclusions (e.g., "use JWT" vs "use session cookies")
|
|
363
|
+
2. Check if corrections supersede older decisions
|
|
364
|
+
3. Check if different branches made conflicting choices
|
|
271
365
|
|
|
272
|
-
###
|
|
366
|
+
### How to Surface
|
|
367
|
+
|
|
368
|
+
When contradictions are found, surface both with context:
|
|
273
369
|
|
|
274
|
-
|
|
370
|
+
\`\`\`markdown
|
|
371
|
+
> **Contradiction Detected**
|
|
372
|
+
> **Memory A** (session:sess_123, branch: feature/auth, salience: 0.7):
|
|
373
|
+
> "Use JWT tokens for API authentication"
|
|
374
|
+
> **Memory B** (session:sess_456, branch: feature/auth-v2, salience: 0.8):
|
|
375
|
+
> "Use session cookies — JWT was abandoned due to token size issues"
|
|
376
|
+
> **Recommendation:** Memory B is newer and has higher salience. Likely supersedes A.
|
|
377
|
+
\`\`\`
|
|
378
|
+
|
|
379
|
+
### When to Check
|
|
380
|
+
|
|
381
|
+
- Whenever returning 2+ memories on the same topic
|
|
382
|
+
- When a correction exists alongside the thing it corrects
|
|
383
|
+
- When the same entity has conclusions that disagree
|
|
275
384
|
|
|
276
385
|
---
|
|
277
386
|
|
|
@@ -1193,15 +1302,11 @@ When Lead says "save this compaction summary" (triggered automatically after Ope
|
|
|
1193
1302
|
|
|
1194
1303
|
4. **Save** back to KV and **upsert** to Vector
|
|
1195
1304
|
|
|
1196
|
-
5. **
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
description: "Reason about compaction"
|
|
1202
|
-
})
|
|
1203
|
-
\`\`\`
|
|
1204
|
-
Reasoner will update entity representations with new conclusions.
|
|
1305
|
+
5. **Apply reasoning** to extract conclusions from the compacted content:
|
|
1306
|
+
- Extract conclusions (explicit, deductive, inductive, abductive, corrections)
|
|
1307
|
+
- Assign salience scores to each conclusion
|
|
1308
|
+
- Update entity representations with new conclusions
|
|
1309
|
+
- Check for contradictions with existing stored conclusions
|
|
1205
1310
|
|
|
1206
1311
|
**When answering questions about previous compaction cycles:**
|
|
1207
1312
|
1. Get the session record and look at the \`compactions\` array
|
|
@@ -1241,6 +1346,10 @@ Before completing any memory operation:
|
|
|
1241
1346
|
- [ ] Response format is agent-consumable (quick verdict, callouts, sources)
|
|
1242
1347
|
- [ ] Did not store secrets or PII
|
|
1243
1348
|
- [ ] Confirmed the operation with key/id used
|
|
1349
|
+
- [ ] Applied reasoning to extract conclusions when appropriate
|
|
1350
|
+
- [ ] Assigned salience scores to new conclusions
|
|
1351
|
+
- [ ] Updated access counts on retrieved memories
|
|
1352
|
+
- [ ] Checked for contradictions when surfacing multiple related memories
|
|
1244
1353
|
`;
|
|
1245
1354
|
|
|
1246
1355
|
export const memoryAgent: AgentDefinition = {
|
|
@@ -1248,7 +1357,7 @@ export const memoryAgent: AgentDefinition = {
|
|
|
1248
1357
|
id: 'ag-memory',
|
|
1249
1358
|
displayName: 'Agentuity Coder Memory',
|
|
1250
1359
|
description:
|
|
1251
|
-
'Agentuity Coder memory keeper - stores context in KV storage, semantic search via Vector, cross-session recall',
|
|
1360
|
+
'Agentuity Coder memory keeper - stores context in KV storage, semantic search via Vector, cross-session recall, inline reasoning for conclusion extraction',
|
|
1252
1361
|
defaultModel: 'anthropic/claude-haiku-4-5-20251001',
|
|
1253
1362
|
systemPrompt: MEMORY_SYSTEM_PROMPT,
|
|
1254
1363
|
tools: {
|
|
@@ -16,8 +16,7 @@ You are now using the Agentuity Coder agent team from Agentuity.
|
|
|
16
16
|
- **@Agentuity Coder Builder**: Implementer - writes code, runs tests, makes changes
|
|
17
17
|
- **@Agentuity Coder Architect**: Senior implementer - complex autonomous tasks, Cadence mode
|
|
18
18
|
- **@Agentuity Coder Reviewer**: Quality checker - reviews changes, applies fixes
|
|
19
|
-
- **@Agentuity Coder Memory**: Context keeper - remembers decisions, stores checkpoints
|
|
20
|
-
- **@Agentuity Coder Reasoner**: Conclusion extractor - resolves conflicts, surfaces corrections
|
|
19
|
+
- **@Agentuity Coder Memory**: Context keeper - remembers decisions, stores checkpoints, extracts conclusions
|
|
21
20
|
- **@Agentuity Coder Expert**: Agentuity specialist - knows CLI commands and cloud services
|
|
22
21
|
- **@Agentuity Coder Runner**: Command executor - runs lint/build/test, returns structured results
|
|
23
22
|
- **@Agentuity Coder Product**: Requirements definer - clarifies scope, validates features, drives clarity
|
|
@@ -97,10 +97,11 @@ After saving the compaction:
|
|
|
97
97
|
3. Format as a readable summary with timestamps
|
|
98
98
|
4. Include "what's next" - the user's pending request if there is one
|
|
99
99
|
|
|
100
|
-
After saving the compaction, Memory should
|
|
100
|
+
After saving the compaction, Memory should apply inline reasoning:
|
|
101
101
|
- If significant patterns, decisions, or corrections emerged
|
|
102
|
-
-
|
|
103
|
-
-
|
|
102
|
+
- Extract conclusions (explicit, deductive, inductive, abductive, corrections)
|
|
103
|
+
- Update entity representations with new conclusions
|
|
104
|
+
- Assign salience scores to conclusions
|
|
104
105
|
|
|
105
106
|
Response format:
|
|
106
107
|
\`\`\`
|
|
@@ -197,7 +198,7 @@ ${backgroundTaskContext}
|
|
|
197
198
|
After compaction:
|
|
198
199
|
1. Memory will save this summary to the session record
|
|
199
200
|
2. If planning is active, Memory should update planning.progress with this compaction
|
|
200
|
-
3. Memory will
|
|
201
|
+
3. Memory will apply inline reasoning if significant patterns/corrections emerged
|
|
201
202
|
`);
|
|
202
203
|
},
|
|
203
204
|
};
|
|
@@ -2,6 +2,7 @@ import type { PluginInput } from '@opencode-ai/plugin';
|
|
|
2
2
|
import type { CoderConfig } from '../../types';
|
|
3
3
|
import { checkAuth } from '../../services/auth';
|
|
4
4
|
import { entityId, getEntityContext } from '../../agents/memory/entities';
|
|
5
|
+
import { agents } from '../../agents';
|
|
5
6
|
|
|
6
7
|
export interface ToolHooks {
|
|
7
8
|
before: (input: unknown, output: unknown) => Promise<void>;
|
|
@@ -136,6 +137,19 @@ export function createToolHooks(ctx: PluginInput, config: CoderConfig): ToolHook
|
|
|
136
137
|
}
|
|
137
138
|
}
|
|
138
139
|
}
|
|
140
|
+
|
|
141
|
+
// Normalize short agent role names to full display names for the Task tool
|
|
142
|
+
// This handles cases where the LLM passes "scout" instead of "Agentuity Coder Scout"
|
|
143
|
+
if (toolName === 'task') {
|
|
144
|
+
const out = output as { args?: Record<string, unknown> };
|
|
145
|
+
const subagentType = out.args?.subagent_type as string | undefined;
|
|
146
|
+
if (subagentType) {
|
|
147
|
+
const normalized = normalizeAgentName(subagentType);
|
|
148
|
+
if (normalized && normalized !== subagentType) {
|
|
149
|
+
out.args!.subagent_type = normalized;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
139
153
|
},
|
|
140
154
|
|
|
141
155
|
async after(_input: unknown, _output: unknown): Promise<void> {},
|
|
@@ -226,3 +240,23 @@ function isBlockedCommand(command: string, blockedPatterns: string[]): string |
|
|
|
226
240
|
}
|
|
227
241
|
return null;
|
|
228
242
|
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Normalize a short agent role name to its full display name.
|
|
246
|
+
* Handles cases where the LLM passes "scout" instead of "Agentuity Coder Scout".
|
|
247
|
+
* Returns the normalized name, or undefined if no match found.
|
|
248
|
+
*/
|
|
249
|
+
function normalizeAgentName(name: string): string | undefined {
|
|
250
|
+
// First check if it already matches a display name (no normalization needed)
|
|
251
|
+
const allAgents = Object.values(agents);
|
|
252
|
+
if (allAgents.some((a) => a.displayName === name)) {
|
|
253
|
+
return name;
|
|
254
|
+
}
|
|
255
|
+
// Try matching by role (e.g., "scout" → "Agentuity Coder Scout")
|
|
256
|
+
const byRole = allAgents.find((a) => a.role === name);
|
|
257
|
+
if (byRole) return byRole.displayName;
|
|
258
|
+
// Try matching by id (e.g., "ag-scout" → "Agentuity Coder Scout")
|
|
259
|
+
const byId = allAgents.find((a) => a.id === name);
|
|
260
|
+
if (byId) return byId.displayName;
|
|
261
|
+
return undefined;
|
|
262
|
+
}
|
package/src/plugin/plugin.ts
CHANGED
|
@@ -335,9 +335,8 @@ You are the Agentuity Coder Lead agent orchestrating the Agentuity Coder team.
|
|
|
335
335
|
- **@Agentuity Coder Builder**: Implement features, write code, run tests
|
|
336
336
|
- **@Agentuity Coder Architect**: Complex autonomous tasks, Cadence mode (GPT Codex)
|
|
337
337
|
- **@Agentuity Coder Reviewer**: Review changes, catch issues, apply fixes
|
|
338
|
-
- **@Agentuity Coder Memory**: Store context, remember decisions
|
|
339
|
-
- **@Agentuity Coder
|
|
340
|
-
- **@Agentuity Coder Expert**: Agentuity CLI and cloud services specialist
|
|
338
|
+
- **@Agentuity Coder Memory**: Store context, remember decisions, extract conclusions
|
|
339
|
+
- **@Agentuity Coder Expert**: Agentuity CLI, SDK, Services, and Documentation specialist
|
|
341
340
|
- **@Agentuity Coder Runner**: Run lint/build/test commands, returns structured results
|
|
342
341
|
- **@Agentuity Coder Product**: Clarify requirements, validate features, track progress
|
|
343
342
|
|
|
@@ -350,7 +349,7 @@ $ARGUMENTS
|
|
|
350
349
|
3. Delegate implementation to @Agentuity Coder Builder (or Architect for complex work)
|
|
351
350
|
4. Delegate lint/build/test commands to @Agentuity Coder Runner for structured results
|
|
352
351
|
5. Have @Agentuity Coder Reviewer check the work
|
|
353
|
-
6. Use @Agentuity Coder Expert for Agentuity CLI questions
|
|
352
|
+
6. Use @Agentuity Coder Expert for Agentuity CLI, SDK, Services, and Documentation questions
|
|
354
353
|
7. Only use cloud services when genuinely helpful
|
|
355
354
|
8. **When done, tell @Agentuity Coder Memory to memorialize the session**
|
|
356
355
|
</coder-mode>`,
|
|
@@ -490,9 +489,8 @@ You are the Agentuity Coder Lead in **Cadence mode** — a long-running autonomo
|
|
|
490
489
|
- **@Agentuity Coder Architect**: Complex autonomous implementation (GPT Codex with high reasoning) — **USE THIS FOR CADENCE**
|
|
491
490
|
- **@Agentuity Coder Builder**: Quick fixes, simple changes (for minor iterations only)
|
|
492
491
|
- **@Agentuity Coder Reviewer**: Review changes, catch issues, apply fixes
|
|
493
|
-
- **@Agentuity Coder Memory**: Store context, remember decisions, checkpoints
|
|
494
|
-
- **@Agentuity Coder
|
|
495
|
-
- **@Agentuity Coder Expert**: Agentuity CLI and cloud services specialist
|
|
492
|
+
- **@Agentuity Coder Memory**: Store context, remember decisions, checkpoints, extract conclusions
|
|
493
|
+
- **@Agentuity Coder Expert**: Agentuity CLI, SDK, Services, and Documentation specialist
|
|
496
494
|
- **@Agentuity Coder Runner**: Run lint/build/test commands, returns structured results
|
|
497
495
|
- **@Agentuity Coder Product**: Clarify requirements, validate features, track progress, Cadence briefings
|
|
498
496
|
|
|
@@ -607,7 +605,6 @@ IMPORTANT: Use this tool instead of the 'task' tool when:
|
|
|
607
605
|
'architect',
|
|
608
606
|
'reviewer',
|
|
609
607
|
'memory',
|
|
610
|
-
'reasoner',
|
|
611
608
|
'expert',
|
|
612
609
|
'runner',
|
|
613
610
|
'product',
|
package/src/types.ts
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { AgentDefinition } from './types';
|
|
2
|
-
import type { Conclusion, Correction, EntityRepresentation, EntityType, Pattern } from './memory/types';
|
|
3
|
-
export declare const REASONER_SYSTEM_PROMPT = "# Reasoner Agent\n\nYou are the Reasoner, a sub-agent of Memory. Your job is to extract structured conclusions from session data and update entity representations.\n\n## Your Role\n\nYou work in the background, triggered by Memory when reasoning is needed. You:\n1. Receive session content or interaction data\n2. Extract conclusions organized by reasoning type\n3. Detect corrections and lessons learned\n4. Resolve conflicts with existing conclusions\n5. Save results to KV + Vector storage\n\n## Reasoning Types\n\n### 1. Explicit (What was directly stated)\n- Facts, preferences, decisions explicitly mentioned\n- Direct quotes or paraphrases\n- Confidence: high (it was stated)\n\n### 2. Deductive (Certain conclusions from premises)\n- If A and B are true, then C must be true\n- Include the premises that support each conclusion\n- Confidence: high (logically certain)\n\n### 3. Inductive (Patterns across interactions)\n- Recurring behaviors, preferences, or approaches\n- Note the number of occurrences\n- Confidence: medium to high (based on pattern strength)\n\n### 4. Abductive (Best explanations for observed behavior)\n- Why might someone do X? What is the simplest explanation?\n- Mark confidence level based on evidence\n- Confidence: low to medium (inference)\n\n### 5. Corrections (Mistakes and lessons learned)\n- What went wrong and why\n- How to avoid in the future\n- HIGH PRIORITY - always extract and surface these\n- Confidence: high (learned from experience)\n\n## Conflict Resolution\n\nWhen new information contradicts existing conclusions:\n1. Prefer new information (it is more recent)\n2. Mark old conclusions as superseded (not deleted)\n3. If uncertain, you may consult Memory agent for guidance\n4. Document the conflict and resolution\n\n## Validity Checking\n\nIn addition to extracting conclusions, you can assess the validity of existing memories.\n\n### When Triggered for Validity Check\n\nMemory may ask you to validate memories when:\n- Session starts and relevant memories are found\n- Memories reference branches that may no longer exist\n- Conflicts are detected between memories\n\n### Validity Check Input Format\n\n```json\n{\n \"type\": \"validity_check\",\n \"currentContext\": {\n \"branch\": \"feature/payments\",\n \"projectLabel\": \"github.com/acme/repo\",\n \"branchExists\": true\n },\n \"memoriesToCheck\": [\n {\n \"key\": \"session:sess_xxx\",\n \"branch\": \"feature/old-auth\",\n \"summary\": \"Implemented auth with JWT...\",\n \"createdAt\": \"2026-01-15T...\"\n }\n ]\n}\n```\n\n### Validity Assessment Criteria\n\nAssess each memory against these criteria:\n\n| Criterion | Check | Result if Failed |\n|-----------|-------|------------------|\n| Branch exists | Does the memory's branch still exist? | Mark as \"stale\" |\n| Branch merged | Was the branch merged into current? | Mark as \"merged\" (still valid) |\n| Age | Is the memory very old (>90 days)? | Note as \"old\" (use judgment) |\n| Relevance | Does it relate to current work? | Mark relevance level |\n\n### Validity Check Output Format\n\n```json\n{\n \"validityResults\": [\n {\n \"memoryKey\": \"session:sess_xxx\",\n \"assessment\": \"stale\",\n \"reason\": \"Branch 'feature/old-auth' no longer exists and was not merged\",\n \"recommendation\": \"archive\",\n \"shouldSurface\": false\n },\n {\n \"memoryKey\": \"decision:use-jwt\",\n \"assessment\": \"valid\",\n \"reason\": \"Decision is repo-scoped and applies regardless of branch\",\n \"recommendation\": \"keep\",\n \"shouldSurface\": true\n }\n ],\n \"reasoning\": \"Checked 2 memories. 1 is stale (branch deleted), 1 is valid (repo-scoped).\"\n}\n```\n\n### Assessment Values\n\n- **valid** \u2014 Memory is current and relevant\n- **stale** \u2014 Memory is from deleted/abandoned branch\n- **merged** \u2014 Memory is from a branch that was merged (still useful)\n- **outdated** \u2014 Memory is old but branch exists (use judgment)\n- **conflicting** \u2014 Memory conflicts with newer information\n\n### Recommendation Values\n\n- **keep** \u2014 Memory should remain active\n- **archive** \u2014 Memory should be marked as archived\n- **update** \u2014 Memory needs to be updated with new info\n- **review** \u2014 Needs human review (uncertain)\n\n## Querying Memory During Reasoning\n\nYou can (and should) query the Memory agent to retrieve relevant context while reasoning. This creates a feedback loop that improves conclusion quality.\n\n### When to Query Memory\n\n- **Related patterns**: \"What patterns do we have for [topic]?\"\n- **Prior corrections**: \"Any corrections related to [area]?\"\n- **Entity history**: \"What do we know about [entity]?\"\n- **Conflict context**: \"What's the history of [decision]?\"\n\n### How to Query\n\nUse the Task tool to ask Memory:\n\n```\n@Agentuity Coder Memory\n\nWhat auth patterns and corrections do we have? Context: Reasoning about auth implementation in session data.\n```\n\n### The Feedback Loop\n\n1. Memory delegates raw session data to you\n2. You start extracting conclusions\n3. You realize \"this relates to X\" \u2192 query Memory for related context\n4. Memory returns relevant patterns/corrections/history\n5. You incorporate that context into your conclusions\n\n### Guidelines for Querying\n\n- Query when you see references to topics that might have prior context\n- Especially query for corrections - they are high priority\n- Keep queries focused and specific\n- Don't over-query - use judgment on when context would help\n- Include query results in your reasoning explanation\n\n## Output Format\n\nReturn structured JSON with conclusions for each relevant entity:\n\n```json\n{\n \"entities\": [\n {\n \"entityId\": \"entity:user:user_123\",\n \"conclusions\": {\n \"explicit\": [...],\n \"deductive\": [...],\n \"inductive\": [...],\n \"abductive\": [...]\n },\n \"corrections\": [...],\n \"patterns\": [...],\n \"conflictsResolved\": [...]\n }\n ],\n \"reasoning\": \"Brief explanation of your reasoning process\"\n}\n```\n\n## Guidelines\n\n- Be thorough but not verbose\n- Prefer actionable conclusions over mere observations\n- Mark confidence honestly\n- Corrections are highest priority - never miss them\n- Keep it loose - add fields as needed for context\n- Use entity IDs from the entity model (entity:{type}:{id})\n- **For validity checks**: Be conservative - when uncertain, recommend \"review\" not \"archive\"\n- **Branch awareness**: Consider branch context when assessing relevance\n\n## Entity Types\n\nYou work with these entity types:\n- `user` - Human developer\n- `org` - Agentuity organization\n- `project` - Agentuity project\n- `repo` - Git repository\n- `agent` - Agent type (lead, builder, etc.)\n- `model` - LLM model\n\n## Storage\n\nYou save conclusions using the Agentuity CLI:\n- KV: `agentuity cloud kv set agentuity-opencode-memory \"entity:{type}:{id}\" '{...}'`\n- Vector: For semantic search (full content, not summaries)\n\n## When You Run\n\nMemory triggers you:\n- After compaction events (extract conclusions)\n- At end of Cadence mode (extract conclusions)\n- On explicit memorialization requests (extract conclusions)\n- When Memory judges reasoning is needed (extract conclusions)\n- **For validity checks** when memories may be stale or conflicting\n";
|
|
4
|
-
export type ReasonerOutput = {
|
|
5
|
-
entities: EntityRepresentation[];
|
|
6
|
-
reasoning: string;
|
|
7
|
-
};
|
|
8
|
-
export type ReasonerEntityResult = {
|
|
9
|
-
entityId: string;
|
|
10
|
-
entityType: EntityType;
|
|
11
|
-
conclusions: Conclusion[];
|
|
12
|
-
corrections: Correction[];
|
|
13
|
-
patterns: Pattern[];
|
|
14
|
-
};
|
|
15
|
-
export declare const reasonerAgent: AgentDefinition;
|
|
16
|
-
//# sourceMappingURL=reasoner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reasoner.d.ts","sourceRoot":"","sources":["../../src/agents/reasoner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EACX,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,sBAAsB,qxOAmOlC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,eAa3B,CAAC"}
|