Compare commits

...
1 Commits
Author SHA1 Message Date
ztimson 2d6debad86 Memorization prompt tightening
Publish Library / Build NPM Project (push) Successful in 44s
Publish Library / Tag Version (push) Successful in 13s
2026-09-20 11:27:01 -04:00
2 changed files with 8 additions and 8 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@ztimson/ai-utils", "name": "@ztimson/ai-utils",
"version": "1.7.0", "version": "1.7.1",
"description": "AI Utility library", "description": "AI Utility library",
"author": "Zak Timson", "author": "Zak Timson",
"license": "MIT", "license": "MIT",
+7 -7
View File
@@ -340,22 +340,22 @@ Think of this like an Obsidian vault with a clear division of responsibility:
- A chronological, skimmable log of what actually happened: real discussions, decisions made, progress on projects, problems worked through - A chronological, skimmable log of what actually happened: real discussions, decisions made, progress on projects, problems worked through
- This is NOT a transcript, and it is NOT a step-by-step record, its a compressed log of notable events & developments - This is NOT a transcript, and it is NOT a step-by-step record, its a compressed log of notable events & developments
- One line per development is usually enough: what was worked on and the outcome, not the blow-by-blow of how - One line per development is usually enough: what was worked on and the outcome, not the blow-by-blow of how
- Skip small talk and trivial exchanges entirely. Skip anything that's purely a todo item (goes in Todo Tasks) or a durable fact about a subject (goes in Entity Dossiers) - Skip small talk and trivial exchanges entirely. Skip anything that's a todo item (goes in Todo Tasks) or a durable fact about a subject (goes in Entity Dossiers)
2. Todo Tasks 2. Todo Tasks
- Extract concrete tasks the user says need to be done, should be done, or were completed - Extract concrete tasks the user says need to be done, should be done, or were completed
- Return the task text and whether it is still todo or is done - Return the task text and whether it is still todo or is done
- A completed task should be marked done, not recreated as a new todo - A completed task should be marked done, not recreated as a new todo
- Only extract actionable tasks, not general goals or observations - Only extract actionable tasks, not general goals or observations, if none - omit returning a tasks array
- Assign each task a subject: - Assign each task a subject:
- If the task belongs to a persistent entity (a project, a class, etc.), use that entity's exact node name, or a new entity path if it doesn't exist yet - If the task belongs to a persistent entity (a project, a class, etc.), use that entity's exact node name, or a new entity path if it doesn't exist yet
- If it's a personal/life task with no entity of its own (reach out to someone, reply to an email, pay a bill, etc.), leave subject as an empty string — it belongs in the journal, not a new document - If it's a personal/life task with no entity of its own (reach out to someone, reply to an email, pay a bill, etc.), leave subject as an empty string — it belongs in the journal, not a new document
3. Entity Dossiers 3. Entity Dossiers
- Detailed dossiers with all information regarding a subject - Detailed dossiers with all factual information regarding a subject
- Record the final/end state, not intermediate changes - Record the final/end state, not intermediate changes
- Ignore assistant claims, guesses, greetings, or temporary details - Ignore assistant claims, guesses, greetings, or temporary details
- NEVER create a document for something that's only meaningful as a point in time — a single conversation, a one-off decision, a debugging session, a date. That's a journal entry, not an entity - NEVER create a dossier for something I wouldnt find in a wiki site: temporary information, debugging, guesses, conversations (this is all journal entry stuff!)
- identify its HOME ENTITY: - identify its HOME ENTITY:
- The HOME ENTITY name should always be a [abstract|pro]noun - The HOME ENTITY name should always be a [abstract|pro]noun
- The grammatical subject/owner of the fact is the strongest clue - The grammatical subject/owner of the fact is the strongest clue
@@ -379,9 +379,9 @@ Available nodes:
${this.listNodes(store.list).map(n => `- ${n.name}: ${n.description}`).join('\n') || 'None yet.'} ${this.listNodes(store.list).map(n => `- ${n.name}: ${n.description}`).join('\n') || 'None yet.'}
${ghosts.length ? `${ghosts.map(g => `- ${g}: (Ghost)`).join('\n')}` : ''}`, ${ghosts.length ? `${ghosts.map(g => `- ${g}: (Ghost)`).join('\n')}` : ''}`,
schema: { schema: {
journal: {type: 'string', description: 'Short day-to-day recap; empty if nothing happened.', required: false}, journal: {type: 'string', description: 'Short bullet point recap, omit if nothing notable happened'},
tasks: { tasks: {
type: 'array', description: 'Concrete tasks mentioned or completed in the conversation.', required: false, items: { type: 'array', description: 'Concrete tasks mentioned or completed in the conversation, omit if none', items: {
type: 'object', items: { type: 'object', items: {
subject: {type: 'string', description: 'Exact node name / new persistent entity path this task belongs to, or an empty string if this is a personal task with no entity of its own (those go in the journal)', required: true}, subject: {type: 'string', description: 'Exact node name / new persistent entity path this task belongs to, or an empty string if this is a personal task with no entity of its own (those go in the journal)', required: true},
task: {type: 'string', description: 'Concise actionable task', required: true}, task: {type: 'string', description: 'Concise actionable task', required: true},
@@ -390,7 +390,7 @@ ${ghosts.length ? `${ghosts.map(g => `- ${g}: (Ghost)`).join('\n')}` : ''}`,
} }
}, },
buckets: { buckets: {
type: 'array', description: 'Groups of facts to remember; empty array if nothing worth storing.', items: { type: 'array', description: 'Groups of facts to remember; omit if none', items: {
type: 'object', items: { type: 'object', items: {
subject: {type: 'string', description: 'Exact node name or new persistent entity path', required: true}, subject: {type: 'string', description: 'Exact node name or new persistent entity path', required: true},
facts: {type: 'array', description: 'Facts to store here', items: {type: 'string'}}, facts: {type: 'array', description: 'Facts to store here', items: {type: 'string'}},