iranti 0.3.18 → 0.3.20
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/scripts/iranti-mcp.js +62 -3
- package/dist/src/api/server.js +1 -1
- package/dist/src/attendant/AttendantInstance.d.ts +33 -1
- package/dist/src/attendant/AttendantInstance.d.ts.map +1 -1
- package/dist/src/attendant/AttendantInstance.js +203 -19
- package/dist/src/attendant/AttendantInstance.js.map +1 -1
- package/dist/src/lib/semanticFactTags.d.ts +7 -0
- package/dist/src/lib/semanticFactTags.d.ts.map +1 -1
- package/dist/src/lib/semanticFactTags.js +32 -0
- package/dist/src/lib/semanticFactTags.js.map +1 -1
- package/dist/src/library/queries.d.ts +1 -0
- package/dist/src/library/queries.d.ts.map +1 -1
- package/dist/src/library/queries.js +8 -0
- package/dist/src/library/queries.js.map +1 -1
- package/package.json +4 -2
|
@@ -51,6 +51,7 @@ const client_1 = require("../src/library/client");
|
|
|
51
51
|
const attendant_1 = require("../src/attendant");
|
|
52
52
|
const assistantCheckpoint_1 = require("../src/lib/assistantCheckpoint");
|
|
53
53
|
const hostMemoryFormatting_1 = require("../src/lib/hostMemoryFormatting");
|
|
54
|
+
const AttendantInstance_1 = require("../src/attendant/AttendantInstance");
|
|
54
55
|
(0, runtimeEnv_1.loadRuntimeEnv)();
|
|
55
56
|
let runtimeHostOverride = null;
|
|
56
57
|
let shutdownPromise = null;
|
|
@@ -449,7 +450,7 @@ async function main() {
|
|
|
449
450
|
}
|
|
450
451
|
const server = new mcp_js_1.McpServer({
|
|
451
452
|
name: 'iranti-mcp',
|
|
452
|
-
version: '0.3.
|
|
453
|
+
version: '0.3.20',
|
|
453
454
|
});
|
|
454
455
|
server.registerTool('iranti_handshake', {
|
|
455
456
|
description: `Initialize or refresh an agent's working-memory brief for the current task.
|
|
@@ -516,8 +517,9 @@ checkpoint state before closing the turn.`,
|
|
|
516
517
|
syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
|
|
517
518
|
const resolvedLatestMessage = resolveAttendLatestMessage({ latestMessage, message });
|
|
518
519
|
try {
|
|
520
|
+
let postResponseCapture;
|
|
519
521
|
if (phase === 'post-response') {
|
|
520
|
-
await (0, autoRemember_1.rememberAssistantResponseFacts)({
|
|
522
|
+
const rememberResult = await (0, autoRemember_1.rememberAssistantResponseFacts)({
|
|
521
523
|
iranti,
|
|
522
524
|
response: resolvedLatestMessage,
|
|
523
525
|
agent: resolvedAgent,
|
|
@@ -540,6 +542,12 @@ checkpoint state before closing the turn.`,
|
|
|
540
542
|
},
|
|
541
543
|
});
|
|
542
544
|
}
|
|
545
|
+
postResponseCapture = {
|
|
546
|
+
factsExtracted: rememberResult.extracted,
|
|
547
|
+
factsWritten: rememberResult.written,
|
|
548
|
+
checkpointExtracted: checkpoint !== null && checkpoint !== undefined,
|
|
549
|
+
skipped: rememberResult.skipped,
|
|
550
|
+
};
|
|
543
551
|
}
|
|
544
552
|
else if ((0, autoRemember_1.isAutoRememberEnabled)()) {
|
|
545
553
|
await (0, autoRemember_1.autoRememberPromptFacts)({
|
|
@@ -558,16 +566,23 @@ checkpoint state before closing the turn.`,
|
|
|
558
566
|
forceInject,
|
|
559
567
|
phase,
|
|
560
568
|
});
|
|
561
|
-
const
|
|
569
|
+
const factsBlock = result.facts.length > 0
|
|
562
570
|
? (0, hostMemoryFormatting_1.formatStructuredFactBlock)(result.facts, {
|
|
563
571
|
title: 'Iranti Retrieved Memory',
|
|
564
572
|
includeValues: false,
|
|
565
573
|
})
|
|
566
574
|
: '';
|
|
575
|
+
const rulesBlock = result.matchedUserRules?.length
|
|
576
|
+
? `\n[User Operating Rules]\nThese rules were triggered by keywords in your current context. Follow them for this task.\n${(0, AttendantInstance_1.formatMatchedUserRules)(result.matchedUserRules)}`
|
|
577
|
+
: '';
|
|
578
|
+
const injectionBlock = factsBlock || rulesBlock
|
|
579
|
+
? `${factsBlock}${rulesBlock}`
|
|
580
|
+
: '';
|
|
567
581
|
return textResult({
|
|
568
582
|
...result,
|
|
569
583
|
facts: sanitizeFacts(result.facts),
|
|
570
584
|
injectionBlock,
|
|
585
|
+
...(postResponseCapture ? { postResponseCapture } : {}),
|
|
571
586
|
});
|
|
572
587
|
}
|
|
573
588
|
catch (error) {
|
|
@@ -841,6 +856,50 @@ such as issueStatus=open|resolved, severity, or resolution notes.`,
|
|
|
841
856
|
} : {}),
|
|
842
857
|
});
|
|
843
858
|
});
|
|
859
|
+
server.registerTool('iranti_write_rule', {
|
|
860
|
+
description: `Write a task-scoped user operating rule with trigger keywords.
|
|
861
|
+
Rules surface during iranti_attend only when the current context matches
|
|
862
|
+
one or more trigger keywords. Use this for recurring guidelines that should
|
|
863
|
+
be applied to specific task types (e.g. "always use GitHub Releases, not
|
|
864
|
+
npm publish" triggered by "release", "publish", "npm"). Rules are stored
|
|
865
|
+
as rule/<rule_id> entities and persist across sessions.`,
|
|
866
|
+
inputSchema: {
|
|
867
|
+
ruleId: z.string().min(1).describe('Stable rule identifier (becomes entityId under rule/ type).'),
|
|
868
|
+
rule: z.string().min(1).describe('The rule text — what the agent should do or avoid.'),
|
|
869
|
+
triggers: z.array(z.string().min(1)).min(1).describe('Keyword triggers. The rule surfaces when any trigger matches the attend context.'),
|
|
870
|
+
scope: z.enum(['project', 'user', 'global']).optional().describe('Scope of the rule. Defaults to project.'),
|
|
871
|
+
enforcement: z.enum(['soft', 'hard']).optional().describe('Enforcement level. soft=reminder, hard=required. Defaults to soft.'),
|
|
872
|
+
source: z.string().optional().describe('Source label for provenance.'),
|
|
873
|
+
agent: z.string().optional().describe('Override the default agent id.'),
|
|
874
|
+
agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
|
|
875
|
+
},
|
|
876
|
+
}, async ({ ruleId, rule, triggers, scope, enforcement, source, agent, agentId }) => {
|
|
877
|
+
const resolvedAgent = resolveToolAgent(agent, agentId);
|
|
878
|
+
syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
|
|
879
|
+
const normalizedId = ruleId.trim().toLowerCase().replace(/[^a-z0-9_-]/g, '_');
|
|
880
|
+
const result = await iranti.write({
|
|
881
|
+
entity: `rule/${normalizedId}`,
|
|
882
|
+
key: 'definition',
|
|
883
|
+
value: { rule, triggers, scope: scope ?? 'project', enforcement: enforcement ?? 'soft' },
|
|
884
|
+
summary: rule,
|
|
885
|
+
confidence: 100,
|
|
886
|
+
source: source?.trim() || defaultWriteSource(),
|
|
887
|
+
agent: resolvedAgent,
|
|
888
|
+
properties: {
|
|
889
|
+
triggers,
|
|
890
|
+
scope: scope ?? 'project',
|
|
891
|
+
enforcement: enforcement ?? 'soft',
|
|
892
|
+
durableClass: 'operating_rule',
|
|
893
|
+
},
|
|
894
|
+
});
|
|
895
|
+
return textResult({
|
|
896
|
+
...toStructuredContent(result),
|
|
897
|
+
ruleId: normalizedId,
|
|
898
|
+
triggers,
|
|
899
|
+
scope: scope ?? 'project',
|
|
900
|
+
enforcement: enforcement ?? 'soft',
|
|
901
|
+
});
|
|
902
|
+
});
|
|
844
903
|
server.registerTool('iranti_write_issue', {
|
|
845
904
|
description: `Write a canonical open or resolved issue fact on a stable key.
|
|
846
905
|
Use this when you want defects, bugs, or chores to remain first-class shared
|
package/dist/src/api/server.js
CHANGED
|
@@ -50,7 +50,7 @@ const RUNTIME_AUTHORITY = (0, runtimeLifecycle_1.resolveRuntimeAuthorityFromEnv)
|
|
|
50
50
|
const INSTANCE_DIR = RUNTIME_AUTHORITY.instanceDir;
|
|
51
51
|
const INSTANCE_RUNTIME_FILE = RUNTIME_AUTHORITY.runtimeFile;
|
|
52
52
|
const INSTANCE_NAME = process.env.IRANTI_INSTANCE_NAME?.trim() || (INSTANCE_DIR ? path_1.default.basename(INSTANCE_DIR) : 'adhoc');
|
|
53
|
-
const VERSION = '0.3.
|
|
53
|
+
const VERSION = '0.3.20';
|
|
54
54
|
const PORT_RAW = (process.env.IRANTI_PORT ?? '3001').trim();
|
|
55
55
|
const PORT = Number.parseInt(PORT_RAW, 10);
|
|
56
56
|
const runtimeMetadataHealth = (0, healthChecks_1.createHealthCheckState)({
|
|
@@ -66,6 +66,7 @@ export interface SessionComplianceState {
|
|
|
66
66
|
counters: {
|
|
67
67
|
attendsWithoutPersist: number;
|
|
68
68
|
turnsWithoutWrite: number;
|
|
69
|
+
midTurnAttendsThisTurn: number;
|
|
69
70
|
consecutivePreResponseWithoutPost: number;
|
|
70
71
|
consecutiveUnusedMemoryInjections: number;
|
|
71
72
|
pendingPostResponse: boolean;
|
|
@@ -172,6 +173,7 @@ export interface ObserveInput {
|
|
|
172
173
|
priorityKeys?: string[];
|
|
173
174
|
skipContextFilter?: boolean;
|
|
174
175
|
recoveryKeys?: string[];
|
|
176
|
+
semanticFilter?: import('../lib/semanticFactTags').SemanticFilter;
|
|
175
177
|
ledgerContext?: AgentContext['ledgerContext'];
|
|
176
178
|
}
|
|
177
179
|
export interface FactInjection {
|
|
@@ -244,13 +246,26 @@ export interface AttendSearchSuggestion {
|
|
|
244
246
|
}
|
|
245
247
|
export interface AttendResult extends ObserveResult {
|
|
246
248
|
shouldInject: boolean;
|
|
247
|
-
reason: 'forced' | 'memory_not_needed' | 'memory_needed_no_facts' | 'memory_needed_but_in_context' | 'memory_needed_injected';
|
|
249
|
+
reason: 'forced' | 'memory_not_needed' | 'memory_needed_no_facts' | 'memory_checked_no_match' | 'memory_needed_but_in_context' | 'memory_needed_injected';
|
|
248
250
|
decision: AttendDecision;
|
|
249
251
|
bootstrap?: AttendBootstrapInfo | null;
|
|
250
252
|
searchSuggestion?: AttendSearchSuggestion;
|
|
251
253
|
complianceWarning?: string;
|
|
252
254
|
compliance: SessionComplianceState;
|
|
253
255
|
memoryAttributions?: MemoryAttributionResult[];
|
|
256
|
+
memorySearchPerformed?: boolean;
|
|
257
|
+
memoryResultsConsidered?: number;
|
|
258
|
+
postResponseCapture?: PostResponseCaptureInfo;
|
|
259
|
+
matchedUserRules?: MatchedUserRule[];
|
|
260
|
+
}
|
|
261
|
+
export interface PostResponseCaptureInfo {
|
|
262
|
+
factsExtracted: number;
|
|
263
|
+
factsWritten: number;
|
|
264
|
+
checkpointExtracted: boolean;
|
|
265
|
+
skipped: Array<{
|
|
266
|
+
key: string;
|
|
267
|
+
reason: string;
|
|
268
|
+
}>;
|
|
254
269
|
}
|
|
255
270
|
export type MemoryAttributionEvidenceKind = 'write' | 'checkpoint' | 'rediscovery' | 'response_reference' | 'response_recovery';
|
|
256
271
|
export interface MemoryAttributionResult {
|
|
@@ -277,6 +292,20 @@ export interface AttendBootstrapInfo {
|
|
|
277
292
|
}
|
|
278
293
|
export declare function normalizeExplicitTask(task: string | null | undefined): string | null;
|
|
279
294
|
export declare function formatOperatingRulesText(rawValue: unknown, summary?: string | null, fallbackRules?: string[]): string;
|
|
295
|
+
export interface MatchedUserRule {
|
|
296
|
+
entityKey: string;
|
|
297
|
+
key: string;
|
|
298
|
+
rule: string;
|
|
299
|
+
triggers: string[];
|
|
300
|
+
scope: string;
|
|
301
|
+
enforcement: 'soft' | 'hard';
|
|
302
|
+
source: string;
|
|
303
|
+
lastUpdated: string;
|
|
304
|
+
}
|
|
305
|
+
export declare function extractRuleTriggers(properties: Record<string, unknown> | null | undefined): string[];
|
|
306
|
+
export declare function matchesRuleTriggers(triggers: string[], contextTokens: Set<string>, contextLower: string): boolean;
|
|
307
|
+
export declare function formatMatchedUserRules(rules: MatchedUserRule[]): string;
|
|
308
|
+
export declare function extractFilePathEntityHints(text: string, projectEntity: string | null): string[];
|
|
280
309
|
export declare function readPersistedSessionState(agentId: string): Promise<PersistedSessionState | null>;
|
|
281
310
|
export declare function summarizeSessionState(agentId: string, checkpoint: SessionCheckpointRecord | null, persistedBriefGeneratedAt?: string, compliance?: SessionComplianceState | null): SessionSummary;
|
|
282
311
|
export declare class AttendantInstance {
|
|
@@ -286,6 +315,8 @@ export declare class AttendantInstance {
|
|
|
286
315
|
private contextCallCount;
|
|
287
316
|
private attendsWithoutPersist;
|
|
288
317
|
private turnsWithoutWrite;
|
|
318
|
+
private midTurnAttendsThisTurn;
|
|
319
|
+
private writeOccurredThisTurn;
|
|
289
320
|
private consecutivePreResponseWithoutPost;
|
|
290
321
|
private consecutiveUnusedMemoryInjections;
|
|
291
322
|
private lastAttendPhase;
|
|
@@ -327,6 +358,7 @@ export declare class AttendantInstance {
|
|
|
327
358
|
getAgentId(): string;
|
|
328
359
|
attend(input: AttendInput): Promise<AttendResult>;
|
|
329
360
|
observe(input: ObserveInput): Promise<ObserveResult>;
|
|
361
|
+
private loadMatchingUserRules;
|
|
330
362
|
private buildRecovery;
|
|
331
363
|
private ensureSessionLoaded;
|
|
332
364
|
private decideMemoryNeed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttendantInstance.d.ts","sourceRoot":"","sources":["../../../src/attendant/AttendantInstance.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AttendantInstance.d.ts","sourceRoot":"","sources":["../../../src/attendant/AttendantInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AttendantInstance = exports.DEFAULT_ATTENDANT_OPERATING_RULES = void 0;
|
|
4
4
|
exports.normalizeExplicitTask = normalizeExplicitTask;
|
|
5
5
|
exports.formatOperatingRulesText = formatOperatingRulesText;
|
|
6
|
+
exports.extractRuleTriggers = extractRuleTriggers;
|
|
7
|
+
exports.matchesRuleTriggers = matchesRuleTriggers;
|
|
8
|
+
exports.formatMatchedUserRules = formatMatchedUserRules;
|
|
9
|
+
exports.extractFilePathEntityHints = extractFilePathEntityHints;
|
|
6
10
|
exports.readPersistedSessionState = readPersistedSessionState;
|
|
7
11
|
exports.summarizeSessionState = summarizeSessionState;
|
|
8
12
|
const crypto_1 = require("crypto");
|
|
@@ -126,6 +130,26 @@ const MEMORY_NEED_NEGATIVE_PATTERNS = [
|
|
|
126
130
|
/^\s*(hi|hello|hey|yo|sup|good (?:morning|afternoon|evening))\b[!.?\s]*$/i,
|
|
127
131
|
/^\s*(thanks|thank you|cool|great|nice)\b[!.?\s]*$/i,
|
|
128
132
|
];
|
|
133
|
+
const SEARCH_SUGGESTION_STOPWORDS = new Set([
|
|
134
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
|
|
135
|
+
'have', 'has', 'had', 'having', 'do', 'does', 'did', 'doing',
|
|
136
|
+
'will', 'would', 'could', 'should', 'may', 'might', 'shall', 'can',
|
|
137
|
+
'you', 'your', 'yours', 'me', 'my', 'mine', 'we', 'our', 'ours',
|
|
138
|
+
'they', 'them', 'their', 'theirs', 'he', 'she', 'his', 'her', 'its',
|
|
139
|
+
'this', 'that', 'these', 'those', 'it',
|
|
140
|
+
'and', 'but', 'or', 'nor', 'not', 'so', 'yet', 'for', 'with',
|
|
141
|
+
'from', 'into', 'about', 'after', 'before', 'between', 'under', 'over',
|
|
142
|
+
'some', 'any', 'all', 'each', 'every', 'other', 'more', 'most',
|
|
143
|
+
'very', 'much', 'just', 'also', 'too', 'still', 'own',
|
|
144
|
+
'what', 'how', 'when', 'where', 'which', 'who', 'why',
|
|
145
|
+
'get', 'got', 'let', 'put', 'say', 'tell', 'ask', 'use', 'try',
|
|
146
|
+
'give', 'take', 'make', 'come', 'see', 'look', 'think', 'know',
|
|
147
|
+
'want', 'need', 'keep', 'turn', 'run',
|
|
148
|
+
'way', 'now', 'here', 'there', 'then', 'than',
|
|
149
|
+
'yes', 'no', 'nice', 'okay', 'sure', 'like',
|
|
150
|
+
'new', 'old', 'possible', 'ideas', 'idea',
|
|
151
|
+
'hey', 'per',
|
|
152
|
+
]);
|
|
129
153
|
const MEMORY_PARSE_FAILURE_PROJECT_CUE_PATTERNS = [
|
|
130
154
|
/\b(?:status|progress|summary|summar(?:y|ize)|recap|overview|state)\b/i,
|
|
131
155
|
/\b(?:decision|decisions|findings?|artifacts?|changes?|work|implementation|architecture|code(?:base)?|repo|repository)\b/i,
|
|
@@ -336,6 +360,84 @@ function applyAdvisoryOperatingRules(operatingRules, profile) {
|
|
|
336
360
|
}
|
|
337
361
|
return nextRules;
|
|
338
362
|
}
|
|
363
|
+
function extractRuleTriggers(properties) {
|
|
364
|
+
if (!properties)
|
|
365
|
+
return [];
|
|
366
|
+
const triggers = properties.triggers;
|
|
367
|
+
if (Array.isArray(triggers)) {
|
|
368
|
+
return triggers
|
|
369
|
+
.filter((t) => typeof t === 'string' && t.trim().length > 0)
|
|
370
|
+
.map((t) => t.trim().toLowerCase());
|
|
371
|
+
}
|
|
372
|
+
return [];
|
|
373
|
+
}
|
|
374
|
+
function matchesRuleTriggers(triggers, contextTokens, contextLower) {
|
|
375
|
+
if (triggers.length === 0)
|
|
376
|
+
return false;
|
|
377
|
+
return triggers.some((trigger) => {
|
|
378
|
+
// Multi-word triggers: check phrase match
|
|
379
|
+
if (trigger.includes(' '))
|
|
380
|
+
return contextLower.includes(trigger);
|
|
381
|
+
// Single-word triggers: check token membership
|
|
382
|
+
return contextTokens.has(trigger);
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
function parseUserOperatingRule(entry) {
|
|
386
|
+
const triggers = extractRuleTriggers(entry.properties);
|
|
387
|
+
if (triggers.length === 0)
|
|
388
|
+
return null;
|
|
389
|
+
const raw = entry.valueRaw;
|
|
390
|
+
const ruleText = entry.valueSummary?.trim()
|
|
391
|
+
|| (typeof raw?.rule === 'string' ? raw.rule.trim() : '');
|
|
392
|
+
if (!ruleText)
|
|
393
|
+
return null;
|
|
394
|
+
const enforcement = entry.properties?.enforcement === 'hard' ? 'hard' : 'soft';
|
|
395
|
+
const scope = typeof entry.properties?.scope === 'string' ? entry.properties.scope : 'project';
|
|
396
|
+
return {
|
|
397
|
+
entityKey: `${entry.entityType}/${entry.entityId}`,
|
|
398
|
+
key: entry.key,
|
|
399
|
+
rule: ruleText,
|
|
400
|
+
triggers,
|
|
401
|
+
scope: String(scope),
|
|
402
|
+
enforcement,
|
|
403
|
+
source: entry.source,
|
|
404
|
+
lastUpdated: entry.updatedAt.toISOString(),
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
function formatMatchedUserRules(rules) {
|
|
408
|
+
if (rules.length === 0)
|
|
409
|
+
return '';
|
|
410
|
+
return rules.map((r) => {
|
|
411
|
+
const prefix = r.enforcement === 'hard' ? 'REQUIRED RULE' : 'USER RULE';
|
|
412
|
+
return `- ${prefix} (${r.key}): ${r.rule}`;
|
|
413
|
+
}).join('\n');
|
|
414
|
+
}
|
|
415
|
+
// ─── File-Path Entity Hints ─────────────────────────────────────────────────
|
|
416
|
+
const FILE_PATH_PATTERN = /(?:^|[\s"'`(])([a-zA-Z]:\\(?:[^\s"'`<>|*?]+\\)*[^\s"'`<>|*?]+\.\w+|(?:\.\/|\.\.\/|\/)?(?:[a-zA-Z0-9_.-]+\/)+[a-zA-Z0-9_.-]+\.\w+)/g;
|
|
417
|
+
function extractFilePathEntityHints(text, projectEntity) {
|
|
418
|
+
if (!text || !projectEntity)
|
|
419
|
+
return [];
|
|
420
|
+
const parsed = (0, entity_resolution_1.parseEntityString)(projectEntity);
|
|
421
|
+
const projectId = parsed.entityId;
|
|
422
|
+
const seen = new Set();
|
|
423
|
+
const hints = [];
|
|
424
|
+
let match;
|
|
425
|
+
FILE_PATH_PATTERN.lastIndex = 0;
|
|
426
|
+
while ((match = FILE_PATH_PATTERN.exec(text)) !== null) {
|
|
427
|
+
const filePath = match[1].trim();
|
|
428
|
+
// Extract just the filename without extension
|
|
429
|
+
const basename = filePath.replace(/\\/g, '/').split('/').pop() ?? '';
|
|
430
|
+
const nameWithoutExt = basename.replace(/\.\w+$/, '').replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();
|
|
431
|
+
if (!nameWithoutExt || nameWithoutExt.length < 2)
|
|
432
|
+
continue;
|
|
433
|
+
const entityHint = `project/${projectId}/file/${nameWithoutExt}`;
|
|
434
|
+
if (!seen.has(entityHint)) {
|
|
435
|
+
seen.add(entityHint);
|
|
436
|
+
hints.push(entityHint);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return hints;
|
|
440
|
+
}
|
|
339
441
|
function advisoryTaskTokens(taskType) {
|
|
340
442
|
if (!taskType)
|
|
341
443
|
return [];
|
|
@@ -602,7 +704,7 @@ function buildSessionComplianceState(input) {
|
|
|
602
704
|
code: 'missing_writes_across_turns',
|
|
603
705
|
severity,
|
|
604
706
|
count: input.turnsWithoutWrite,
|
|
605
|
-
message: `${input.turnsWithoutWrite}
|
|
707
|
+
message: `${input.turnsWithoutWrite} active turns with tool use completed without iranti_write or iranti_checkpoint calls. Findings from these turns are not being persisted.`,
|
|
606
708
|
requiredAction: 'Call iranti_write for each durable finding — file edits, confirmed facts, environment state, subagent results. Every turn that discovers something should write it.',
|
|
607
709
|
});
|
|
608
710
|
}
|
|
@@ -646,6 +748,7 @@ function buildSessionComplianceState(input) {
|
|
|
646
748
|
counters: {
|
|
647
749
|
attendsWithoutPersist: input.attendsWithoutPersist,
|
|
648
750
|
turnsWithoutWrite: input.turnsWithoutWrite,
|
|
751
|
+
midTurnAttendsThisTurn: input.midTurnAttendsThisTurn,
|
|
649
752
|
consecutivePreResponseWithoutPost: input.consecutivePreResponseWithoutPost,
|
|
650
753
|
consecutiveUnusedMemoryInjections: input.consecutiveUnusedMemoryInjections,
|
|
651
754
|
pendingPostResponse,
|
|
@@ -820,6 +923,9 @@ function tokenize(text) {
|
|
|
820
923
|
.map((part) => part.trim())
|
|
821
924
|
.filter((part) => part.length > 2);
|
|
822
925
|
}
|
|
926
|
+
function tokenizeForSearch(text) {
|
|
927
|
+
return tokenize(text).filter((token) => !SEARCH_SUGGESTION_STOPWORDS.has(token));
|
|
928
|
+
}
|
|
823
929
|
function fingerprintTask(task, recentMessages = []) {
|
|
824
930
|
const messageSeed = recentMessages
|
|
825
931
|
.slice(-3)
|
|
@@ -1337,6 +1443,8 @@ class AttendantInstance {
|
|
|
1337
1443
|
this.contextCallCount = 0;
|
|
1338
1444
|
this.attendsWithoutPersist = 0;
|
|
1339
1445
|
this.turnsWithoutWrite = 0;
|
|
1446
|
+
this.midTurnAttendsThisTurn = 0;
|
|
1447
|
+
this.writeOccurredThisTurn = false;
|
|
1340
1448
|
this.consecutivePreResponseWithoutPost = 0;
|
|
1341
1449
|
this.consecutiveUnusedMemoryInjections = 0;
|
|
1342
1450
|
this.lastAttendPhase = undefined;
|
|
@@ -1834,6 +1942,7 @@ class AttendantInstance {
|
|
|
1834
1942
|
return buildSessionComplianceState({
|
|
1835
1943
|
attendsWithoutPersist: this.attendsWithoutPersist,
|
|
1836
1944
|
turnsWithoutWrite: this.turnsWithoutWrite,
|
|
1945
|
+
midTurnAttendsThisTurn: this.midTurnAttendsThisTurn,
|
|
1837
1946
|
consecutivePreResponseWithoutPost: this.consecutivePreResponseWithoutPost,
|
|
1838
1947
|
consecutiveUnusedMemoryInjections: this.consecutiveUnusedMemoryInjections,
|
|
1839
1948
|
lastAttendPhase: this.lastAttendPhase,
|
|
@@ -1843,6 +1952,7 @@ class AttendantInstance {
|
|
|
1843
1952
|
async notifyWriteOccurred() {
|
|
1844
1953
|
this.attendsWithoutPersist = 0;
|
|
1845
1954
|
this.turnsWithoutWrite = 0;
|
|
1955
|
+
this.writeOccurredThisTurn = true;
|
|
1846
1956
|
this.lastAttendPhase = undefined;
|
|
1847
1957
|
this.consecutivePreResponseWithoutPost = 0;
|
|
1848
1958
|
this.complianceUpdatedAt = new Date().toISOString();
|
|
@@ -2101,8 +2211,15 @@ class AttendantInstance {
|
|
|
2101
2211
|
if (phase === 'post-response') {
|
|
2102
2212
|
// Correct post-response call — reset attend counters but NOT turnsWithoutWrite
|
|
2103
2213
|
// turnsWithoutWrite only resets on actual writes/checkpoints
|
|
2214
|
+
// Only count active turns (with mid-turn attends) toward turnsWithoutWrite.
|
|
2215
|
+
// Chatter-only turns (pre-response → post-response with nothing in between) are exempt.
|
|
2216
|
+
// Turns where a write already occurred are also exempt.
|
|
2104
2217
|
this.attendsWithoutPersist = 0;
|
|
2105
|
-
this.
|
|
2218
|
+
if (this.midTurnAttendsThisTurn > 0 && !this.writeOccurredThisTurn) {
|
|
2219
|
+
this.turnsWithoutWrite++;
|
|
2220
|
+
}
|
|
2221
|
+
this.midTurnAttendsThisTurn = 0;
|
|
2222
|
+
this.writeOccurredThisTurn = false;
|
|
2106
2223
|
this.lastAttendPhase = 'post-response';
|
|
2107
2224
|
this.consecutivePreResponseWithoutPost = 0;
|
|
2108
2225
|
}
|
|
@@ -2114,10 +2231,17 @@ class AttendantInstance {
|
|
|
2114
2231
|
else {
|
|
2115
2232
|
this.consecutivePreResponseWithoutPost = 0;
|
|
2116
2233
|
}
|
|
2234
|
+
this.midTurnAttendsThisTurn = 0;
|
|
2235
|
+
this.writeOccurredThisTurn = false;
|
|
2117
2236
|
this.lastAttendPhase = 'pre-response';
|
|
2118
2237
|
}
|
|
2238
|
+
else if (phase === 'mid-turn') {
|
|
2239
|
+
this.midTurnAttendsThisTurn++;
|
|
2240
|
+
this.lastAttendPhase = 'mid-turn';
|
|
2241
|
+
}
|
|
2119
2242
|
else {
|
|
2120
|
-
// No phase provided —
|
|
2243
|
+
// No phase provided — count as mid-turn activity
|
|
2244
|
+
this.midTurnAttendsThisTurn++;
|
|
2121
2245
|
if (this.attendsWithoutPersist >= 3) {
|
|
2122
2246
|
complianceWarning = `COMPLIANCE: iranti_attend has been called ${this.attendsWithoutPersist} times since the last iranti_write or iranti_checkpoint. You are likely missing post-response attend calls and durable writes. Call iranti_attend(phase='post-response') after every response, then persist durable findings with iranti_write or iranti_checkpoint before the next turn.`;
|
|
2123
2247
|
}
|
|
@@ -2142,7 +2266,16 @@ class AttendantInstance {
|
|
|
2142
2266
|
note: 'A handshake was auto-performed because no session brief existed. Read operatingRules now and follow any instructions there — including ACKNOWLEDGE — before replying to the user.',
|
|
2143
2267
|
};
|
|
2144
2268
|
}
|
|
2145
|
-
const
|
|
2269
|
+
const baseEntityHints = this.resolveAttendEntityHints(input.entityHints, latestMessage);
|
|
2270
|
+
// File-change demand-driven recall: extract file path mentions and add as entity hints
|
|
2271
|
+
const filePathHints = extractFilePathEntityHints(`${latestMessage}\n${currentContext}`, (0, autoRemember_1.getProjectMemoryEntity)() ?? null);
|
|
2272
|
+
const effectiveEntityHints = filePathHints.length > 0
|
|
2273
|
+
? [...new Set([...baseEntityHints, ...filePathHints])]
|
|
2274
|
+
: baseEntityHints;
|
|
2275
|
+
// User operating rules: load rules whose triggers match the current context
|
|
2276
|
+
const matchedUserRules = phase !== 'post-response'
|
|
2277
|
+
? await this.loadMatchingUserRules(`${latestMessage}\n${currentContext}`)
|
|
2278
|
+
: [];
|
|
2146
2279
|
let watchedEntitiesChanged = this.updateWatchedEntities(effectiveEntityHints);
|
|
2147
2280
|
const freshState = await this.detectRelevantFreshState(effectiveEntityHints, latestMessage);
|
|
2148
2281
|
const observationContext = currentContext.trim().length > 0 ? currentContext : latestMessage;
|
|
@@ -2261,13 +2394,14 @@ class AttendantInstance {
|
|
|
2261
2394
|
}
|
|
2262
2395
|
(0, metrics_1.timeEnd)('attendant.attend_ms', t0);
|
|
2263
2396
|
return {
|
|
2264
|
-
shouldInject:
|
|
2397
|
+
shouldInject: matchedUserRules.length > 0,
|
|
2265
2398
|
reason: 'memory_not_needed',
|
|
2266
2399
|
decision,
|
|
2267
2400
|
bootstrap,
|
|
2268
2401
|
complianceWarning,
|
|
2269
2402
|
compliance,
|
|
2270
2403
|
memoryAttributions: [],
|
|
2404
|
+
matchedUserRules: matchedUserRules.length > 0 ? matchedUserRules : undefined,
|
|
2271
2405
|
usageGuidance: buildUsageGuidance('attend', this.turnsWithoutWrite),
|
|
2272
2406
|
facts: [],
|
|
2273
2407
|
entitiesDetected: [],
|
|
@@ -2340,22 +2474,24 @@ class AttendantInstance {
|
|
|
2340
2474
|
this.markSharedStateObserved(observeEntityHints.length > 0 ? observeEntityHints : freshState.entities);
|
|
2341
2475
|
let reason = 'memory_needed_injected';
|
|
2342
2476
|
const shouldInject = structuredFacts.length > 0;
|
|
2477
|
+
const memorySearchPerformed = true;
|
|
2478
|
+
const memoryResultsConsidered = observed.totalFound;
|
|
2343
2479
|
let searchSuggestion;
|
|
2344
2480
|
if (!shouldInject) {
|
|
2345
2481
|
const allAlreadyInContext = observed.totalFound > 0 && observed.alreadyPresent >= observed.totalFound;
|
|
2346
|
-
reason = allAlreadyInContext ? 'memory_needed_but_in_context' : '
|
|
2347
|
-
if (reason === '
|
|
2348
|
-
const terms =
|
|
2482
|
+
reason = allAlreadyInContext ? 'memory_needed_but_in_context' : 'memory_checked_no_match';
|
|
2483
|
+
if (reason === 'memory_checked_no_match') {
|
|
2484
|
+
const terms = tokenizeForSearch(latestMessage).slice(0, 6);
|
|
2349
2485
|
const alternativeEntities = (observed.entitiesResolved ?? [])
|
|
2350
2486
|
.map((e) => e.canonicalEntity)
|
|
2351
2487
|
.filter(Boolean);
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
:
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
}
|
|
2488
|
+
if (terms.length > 0) {
|
|
2489
|
+
searchSuggestion = {
|
|
2490
|
+
hint: `Iranti searched memory but found no matching facts for this turn. Call iranti_search(query='${terms.join(' ')}') BEFORE reading the codebase — empty attend facts do NOT mean data is absent; Iranti is the cross-session source of truth.`,
|
|
2491
|
+
suggestedTerms: terms,
|
|
2492
|
+
alternativeEntities,
|
|
2493
|
+
};
|
|
2494
|
+
}
|
|
2359
2495
|
}
|
|
2360
2496
|
}
|
|
2361
2497
|
else if (forceInject) {
|
|
@@ -2376,7 +2512,7 @@ class AttendantInstance {
|
|
|
2376
2512
|
const attendResult = {
|
|
2377
2513
|
...observed,
|
|
2378
2514
|
facts: structuredFacts,
|
|
2379
|
-
shouldInject: structuredFacts.length > 0,
|
|
2515
|
+
shouldInject: structuredFacts.length > 0 || matchedUserRules.length > 0,
|
|
2380
2516
|
reason,
|
|
2381
2517
|
decision,
|
|
2382
2518
|
bootstrap,
|
|
@@ -2384,6 +2520,9 @@ class AttendantInstance {
|
|
|
2384
2520
|
complianceWarning,
|
|
2385
2521
|
compliance,
|
|
2386
2522
|
memoryAttributions,
|
|
2523
|
+
memorySearchPerformed,
|
|
2524
|
+
memoryResultsConsidered,
|
|
2525
|
+
matchedUserRules: matchedUserRules.length > 0 ? matchedUserRules : undefined,
|
|
2387
2526
|
usageGuidance: buildUsageGuidance('attend', this.turnsWithoutWrite),
|
|
2388
2527
|
};
|
|
2389
2528
|
if (input.suppressEvents !== true) {
|
|
@@ -2640,6 +2779,7 @@ ${detectionWindow}`,
|
|
|
2640
2779
|
const maxEntities = policy.maxEntitiesPerObserve ?? 5;
|
|
2641
2780
|
const maxKeysPerEntity = policy.maxKeysPerEntity ?? 5;
|
|
2642
2781
|
const allFacts = [];
|
|
2782
|
+
const entryPropertiesMap = new Map();
|
|
2643
2783
|
const entitiesResolved = [];
|
|
2644
2784
|
const entitiesDetected = new Set();
|
|
2645
2785
|
const resolvedEntities = new Map();
|
|
@@ -2745,6 +2885,9 @@ ${detectionWindow}`,
|
|
|
2745
2885
|
lastUpdated: entry.updatedAt.toISOString(),
|
|
2746
2886
|
entryId: entry.id,
|
|
2747
2887
|
});
|
|
2888
|
+
if (entry.properties && typeof entry.properties === 'object' && !Array.isArray(entry.properties)) {
|
|
2889
|
+
entryPropertiesMap.set(entry.id, entry.properties);
|
|
2890
|
+
}
|
|
2748
2891
|
}
|
|
2749
2892
|
}
|
|
2750
2893
|
// Step 3 — filter out facts already present in context (skipped when forceInject)
|
|
@@ -2773,7 +2916,9 @@ ${detectionWindow}`,
|
|
|
2773
2916
|
// Step 4 — relevance-weighted fact ranking
|
|
2774
2917
|
// Profile facts (favorite_city, country_of_origin, etc.) on personal entities
|
|
2775
2918
|
// are deprioritized unless the context/message shows token overlap with them.
|
|
2919
|
+
// When a semanticFilter is provided, facts matching the filter are boosted.
|
|
2776
2920
|
const contextTokens = new Set(tokenizePresenceText(currentContext));
|
|
2921
|
+
const activeSemanticFilter = input.semanticFilter;
|
|
2777
2922
|
const topFacts = newFacts
|
|
2778
2923
|
.map((fact) => {
|
|
2779
2924
|
const parts = fact.entityKey.split('/');
|
|
@@ -2784,12 +2929,16 @@ ${detectionWindow}`,
|
|
|
2784
2929
|
const factTokens = tokenizePresenceText(fact.summary);
|
|
2785
2930
|
const overlap = factTokens.filter((t) => contextTokens.has(t)).length;
|
|
2786
2931
|
const relevance = factTokens.length > 0 ? overlap / factTokens.length : 0;
|
|
2932
|
+
// Semantic boost: if a filter is active, boost matching facts
|
|
2933
|
+
const properties = entryPropertiesMap.get(fact.entryId);
|
|
2934
|
+
const semanticScore = activeSemanticFilter ? (0, semanticFactTags_1.semanticMatchScore)(properties, activeSemanticFilter) : 0;
|
|
2935
|
+
const semanticBoost = semanticScore > 0 ? semanticScore * 30 : 0;
|
|
2787
2936
|
// Profile facts with no relevance to the current context get deprioritized
|
|
2788
2937
|
const profilePenalty = isProfile && relevance === 0 ? 50 : 0;
|
|
2789
|
-
const effectiveConfidence = fact.confidence - profilePenalty;
|
|
2790
|
-
return { fact, effectiveConfidence, relevance };
|
|
2938
|
+
const effectiveConfidence = fact.confidence - profilePenalty + semanticBoost;
|
|
2939
|
+
return { fact, effectiveConfidence, relevance, semanticScore };
|
|
2791
2940
|
})
|
|
2792
|
-
.sort((a, b) => b.effectiveConfidence - a.effectiveConfidence || b.relevance - a.relevance)
|
|
2941
|
+
.sort((a, b) => b.effectiveConfidence - a.effectiveConfidence || b.semanticScore - a.semanticScore || b.relevance - a.relevance)
|
|
2793
2942
|
.slice(0, maxFacts)
|
|
2794
2943
|
.map(({ fact }) => fact);
|
|
2795
2944
|
await (0, queries_1.recordKnowledgeEntryAccess)(topFacts.map((fact) => fact.entryId));
|
|
@@ -2832,6 +2981,40 @@ ${detectionWindow}`,
|
|
|
2832
2981
|
},
|
|
2833
2982
|
};
|
|
2834
2983
|
}
|
|
2984
|
+
// ── User Operating Rules ────────────────────────────────────────────────
|
|
2985
|
+
async loadMatchingUserRules(context) {
|
|
2986
|
+
try {
|
|
2987
|
+
const entries = await (0, queries_1.findEntriesByEntityType)('rule');
|
|
2988
|
+
if (entries.length === 0)
|
|
2989
|
+
return [];
|
|
2990
|
+
const contextLower = context.toLowerCase();
|
|
2991
|
+
const contextTokens = new Set(tokenizePresenceText(context));
|
|
2992
|
+
const matched = [];
|
|
2993
|
+
for (const entry of entries) {
|
|
2994
|
+
const props = entry.properties && typeof entry.properties === 'object' && !Array.isArray(entry.properties)
|
|
2995
|
+
? entry.properties
|
|
2996
|
+
: null;
|
|
2997
|
+
const rule = parseUserOperatingRule({
|
|
2998
|
+
entityType: entry.entityType,
|
|
2999
|
+
entityId: entry.entityId,
|
|
3000
|
+
key: entry.key,
|
|
3001
|
+
valueSummary: entry.valueSummary,
|
|
3002
|
+
valueRaw: entry.valueRaw,
|
|
3003
|
+
source: entry.source,
|
|
3004
|
+
properties: props,
|
|
3005
|
+
updatedAt: entry.updatedAt,
|
|
3006
|
+
});
|
|
3007
|
+
if (rule && matchesRuleTriggers(rule.triggers, contextTokens, contextLower)) {
|
|
3008
|
+
matched.push(rule);
|
|
3009
|
+
}
|
|
3010
|
+
}
|
|
3011
|
+
return matched;
|
|
3012
|
+
}
|
|
3013
|
+
catch (err) {
|
|
3014
|
+
console.error('[attendant] failed to load user operating rules:', err);
|
|
3015
|
+
return [];
|
|
3016
|
+
}
|
|
3017
|
+
}
|
|
2835
3018
|
// ── Private ──────────────────────────────────────────────────────────────
|
|
2836
3019
|
buildRecovery(context, record) {
|
|
2837
3020
|
return evaluateSessionRecovery(record, context);
|
|
@@ -3369,6 +3552,7 @@ If nothing is relevant, return: none`,
|
|
|
3369
3552
|
this.sharedStateObservedAt = state.briefGeneratedAt;
|
|
3370
3553
|
this.attendsWithoutPersist = state.compliance?.counters.attendsWithoutPersist ?? 0;
|
|
3371
3554
|
this.turnsWithoutWrite = state.compliance?.counters.turnsWithoutWrite ?? 0;
|
|
3555
|
+
this.midTurnAttendsThisTurn = state.compliance?.counters.midTurnAttendsThisTurn ?? 0;
|
|
3372
3556
|
this.consecutivePreResponseWithoutPost = state.compliance?.counters.consecutivePreResponseWithoutPost ?? 0;
|
|
3373
3557
|
this.consecutiveUnusedMemoryInjections = state.compliance?.counters.consecutiveUnusedMemoryInjections ?? 0;
|
|
3374
3558
|
this.lastAttendPhase = state.compliance?.counters.lastAttendPhase ?? undefined;
|