iranti 0.2.51 → 0.3.2
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/README.md +30 -17
- package/dist/scripts/api-key-create.js +1 -1
- package/dist/scripts/api-key-list.js +1 -1
- package/dist/scripts/api-key-revoke.js +1 -1
- package/dist/scripts/claude-code-memory-hook.js +116 -30
- package/dist/scripts/codex-setup.js +86 -4
- package/dist/scripts/iranti-cli.js +1359 -57
- package/dist/scripts/iranti-mcp.js +578 -75
- package/dist/scripts/seed.js +11 -6
- package/dist/scripts/setup.js +1 -1
- package/dist/src/api/healthChecks.d.ts +29 -0
- package/dist/src/api/healthChecks.d.ts.map +1 -0
- package/dist/src/api/healthChecks.js +72 -0
- package/dist/src/api/healthChecks.js.map +1 -0
- package/dist/src/api/middleware/validation.d.ts +22 -0
- package/dist/src/api/middleware/validation.d.ts.map +1 -1
- package/dist/src/api/middleware/validation.js +93 -3
- package/dist/src/api/middleware/validation.js.map +1 -1
- package/dist/src/api/routes/knowledge.d.ts.map +1 -1
- package/dist/src/api/routes/knowledge.js +53 -0
- package/dist/src/api/routes/knowledge.js.map +1 -1
- package/dist/src/api/routes/memory.d.ts.map +1 -1
- package/dist/src/api/routes/memory.js +73 -9
- package/dist/src/api/routes/memory.js.map +1 -1
- package/dist/src/api/server.js +38 -43
- package/dist/src/api/server.js.map +1 -1
- package/dist/src/attendant/AttendantInstance.d.ts +135 -2
- package/dist/src/attendant/AttendantInstance.d.ts.map +1 -1
- package/dist/src/attendant/AttendantInstance.js +1836 -93
- package/dist/src/attendant/AttendantInstance.js.map +1 -1
- package/dist/src/attendant/index.d.ts +1 -1
- package/dist/src/attendant/index.d.ts.map +1 -1
- package/dist/src/attendant/index.js +1 -1
- package/dist/src/attendant/index.js.map +1 -1
- package/dist/src/attendant/registry.d.ts.map +1 -1
- package/dist/src/attendant/registry.js +2 -0
- package/dist/src/attendant/registry.js.map +1 -1
- package/dist/src/chat/index.d.ts +23 -0
- package/dist/src/chat/index.d.ts.map +1 -1
- package/dist/src/chat/index.js +111 -22
- package/dist/src/chat/index.js.map +1 -1
- package/dist/src/generated/prisma/browser.d.ts +5 -0
- package/dist/src/generated/prisma/browser.d.ts.map +1 -1
- package/dist/src/generated/prisma/client.d.ts +5 -0
- package/dist/src/generated/prisma/client.d.ts.map +1 -1
- package/dist/src/generated/prisma/commonInputTypes.d.ts +48 -0
- package/dist/src/generated/prisma/commonInputTypes.d.ts.map +1 -1
- package/dist/src/generated/prisma/internal/class.d.ts +11 -0
- package/dist/src/generated/prisma/internal/class.d.ts.map +1 -1
- package/dist/src/generated/prisma/internal/class.js +4 -4
- package/dist/src/generated/prisma/internal/class.js.map +1 -1
- package/dist/src/generated/prisma/internal/prismaNamespace.d.ts +92 -1
- package/dist/src/generated/prisma/internal/prismaNamespace.d.ts.map +1 -1
- package/dist/src/generated/prisma/internal/prismaNamespace.js +17 -2
- package/dist/src/generated/prisma/internal/prismaNamespace.js.map +1 -1
- package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.d.ts +16 -0
- package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.d.ts.map +1 -1
- package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.js +17 -2
- package/dist/src/generated/prisma/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/src/generated/prisma/models/StaffEvent.d.ts +1184 -0
- package/dist/src/generated/prisma/models/StaffEvent.d.ts.map +1 -0
- package/dist/src/generated/prisma/models/StaffEvent.js +3 -0
- package/dist/src/generated/prisma/models/StaffEvent.js.map +1 -0
- package/dist/src/generated/prisma/models.d.ts +1 -0
- package/dist/src/generated/prisma/models.d.ts.map +1 -1
- package/dist/src/lib/assistantCheckpoint.d.ts +21 -0
- package/dist/src/lib/assistantCheckpoint.d.ts.map +1 -0
- package/dist/src/lib/assistantCheckpoint.js +143 -0
- package/dist/src/lib/assistantCheckpoint.js.map +1 -0
- package/dist/src/lib/autoRemember.d.ts +15 -0
- package/dist/src/lib/autoRemember.d.ts.map +1 -1
- package/dist/src/lib/autoRemember.js +433 -71
- package/dist/src/lib/autoRemember.js.map +1 -1
- package/dist/src/lib/cliHelpCatalog.d.ts.map +1 -1
- package/dist/src/lib/cliHelpCatalog.js +23 -11
- package/dist/src/lib/cliHelpCatalog.js.map +1 -1
- package/dist/src/lib/cliHelpRenderer.d.ts +1 -0
- package/dist/src/lib/cliHelpRenderer.d.ts.map +1 -1
- package/dist/src/lib/cliHelpRenderer.js +4 -0
- package/dist/src/lib/cliHelpRenderer.js.map +1 -1
- package/dist/src/lib/commandErrors.d.ts +5 -1
- package/dist/src/lib/commandErrors.d.ts.map +1 -1
- package/dist/src/lib/commandErrors.js +250 -17
- package/dist/src/lib/commandErrors.js.map +1 -1
- package/dist/src/lib/createFirstPartyIranti.d.ts.map +1 -1
- package/dist/src/lib/createFirstPartyIranti.js +1 -0
- package/dist/src/lib/createFirstPartyIranti.js.map +1 -1
- package/dist/src/lib/dbStaffEventEmitter.d.ts +2 -0
- package/dist/src/lib/dbStaffEventEmitter.d.ts.map +1 -1
- package/dist/src/lib/dbStaffEventEmitter.js +15 -0
- package/dist/src/lib/dbStaffEventEmitter.js.map +1 -1
- package/dist/src/lib/hostMemoryFormatting.d.ts +25 -0
- package/dist/src/lib/hostMemoryFormatting.d.ts.map +1 -0
- package/dist/src/lib/hostMemoryFormatting.js +55 -0
- package/dist/src/lib/hostMemoryFormatting.js.map +1 -0
- package/dist/src/lib/issueFacts.d.ts +37 -0
- package/dist/src/lib/issueFacts.d.ts.map +1 -0
- package/dist/src/lib/issueFacts.js +72 -0
- package/dist/src/lib/issueFacts.js.map +1 -0
- package/dist/src/lib/llm.d.ts +8 -0
- package/dist/src/lib/llm.d.ts.map +1 -1
- package/dist/src/lib/llm.js +33 -0
- package/dist/src/lib/llm.js.map +1 -1
- package/dist/src/lib/packageRoot.d.ts +2 -0
- package/dist/src/lib/packageRoot.d.ts.map +1 -0
- package/dist/src/lib/packageRoot.js +22 -0
- package/dist/src/lib/packageRoot.js.map +1 -0
- package/dist/src/lib/projectLearning.d.ts +21 -0
- package/dist/src/lib/projectLearning.d.ts.map +1 -0
- package/dist/src/lib/projectLearning.js +357 -0
- package/dist/src/lib/projectLearning.js.map +1 -0
- package/dist/src/lib/protocolEnforcement.d.ts +29 -0
- package/dist/src/lib/protocolEnforcement.d.ts.map +1 -0
- package/dist/src/lib/protocolEnforcement.js +124 -0
- package/dist/src/lib/protocolEnforcement.js.map +1 -0
- package/dist/src/lib/providers/claude.js +1 -1
- package/dist/src/lib/providers/claude.js.map +1 -1
- package/dist/src/lib/router.js +1 -1
- package/dist/src/lib/router.js.map +1 -1
- package/dist/src/lib/runtimeEnv.d.ts.map +1 -1
- package/dist/src/lib/runtimeEnv.js +8 -3
- package/dist/src/lib/runtimeEnv.js.map +1 -1
- package/dist/src/lib/scaffoldCloseout.d.ts +27 -0
- package/dist/src/lib/scaffoldCloseout.d.ts.map +1 -0
- package/dist/src/lib/scaffoldCloseout.js +139 -0
- package/dist/src/lib/scaffoldCloseout.js.map +1 -0
- package/dist/src/lib/semanticFactTags.d.ts +10 -0
- package/dist/src/lib/semanticFactTags.d.ts.map +1 -0
- package/dist/src/lib/semanticFactTags.js +166 -0
- package/dist/src/lib/semanticFactTags.js.map +1 -0
- package/dist/src/lib/sessionLedger.d.ts +94 -0
- package/dist/src/lib/sessionLedger.d.ts.map +1 -0
- package/dist/src/lib/sessionLedger.js +997 -0
- package/dist/src/lib/sessionLedger.js.map +1 -0
- package/dist/src/lib/sharedStateInvalidation.d.ts +10 -0
- package/dist/src/lib/sharedStateInvalidation.d.ts.map +1 -0
- package/dist/src/lib/sharedStateInvalidation.js +184 -0
- package/dist/src/lib/sharedStateInvalidation.js.map +1 -0
- package/dist/src/lib/staffEventsTable.d.ts +3 -0
- package/dist/src/lib/staffEventsTable.d.ts.map +1 -0
- package/dist/src/lib/staffEventsTable.js +58 -0
- package/dist/src/lib/staffEventsTable.js.map +1 -0
- package/dist/src/librarian/index.d.ts.map +1 -1
- package/dist/src/librarian/index.js +113 -2
- package/dist/src/librarian/index.js.map +1 -1
- package/dist/src/library/client.d.ts +6 -1
- package/dist/src/library/client.d.ts.map +1 -1
- package/dist/src/library/client.js +21 -7
- package/dist/src/library/client.js.map +1 -1
- package/dist/src/library/embeddings.d.ts +9 -1
- package/dist/src/library/embeddings.d.ts.map +1 -1
- package/dist/src/library/embeddings.js +28 -3
- package/dist/src/library/embeddings.js.map +1 -1
- package/dist/src/library/queries.d.ts.map +1 -1
- package/dist/src/library/queries.js +263 -46
- package/dist/src/library/queries.js.map +1 -1
- package/dist/src/sdk/index.d.ts +52 -1
- package/dist/src/sdk/index.d.ts.map +1 -1
- package/dist/src/sdk/index.js +546 -98
- package/dist/src/sdk/index.js.map +1 -1
- package/package.json +24 -3
- package/prisma/migrations/20260331101500_add_staff_events_ledger/migration.sql +24 -0
- package/prisma/schema.prisma +22 -0
package/dist/scripts/seed.js
CHANGED
|
@@ -7,7 +7,7 @@ const queries_1 = require("../src/library/queries");
|
|
|
7
7
|
if (!process.env.DATABASE_URL) {
|
|
8
8
|
throw new Error('DATABASE_URL environment variable is required');
|
|
9
9
|
}
|
|
10
|
-
(0, client_1.initDb)(process.env.DATABASE_URL);
|
|
10
|
+
(0, client_1.initDb)(process.env.DATABASE_URL, { applicationName: 'iranti:script:seed' });
|
|
11
11
|
// ─── Staff Operating Rules ───────────────────────────────────────────────────
|
|
12
12
|
const STAFF_ENTRIES = [
|
|
13
13
|
{
|
|
@@ -39,20 +39,25 @@ const STAFF_ENTRIES = [
|
|
|
39
39
|
entityId: 'attendant',
|
|
40
40
|
key: 'operating_rules',
|
|
41
41
|
valueRaw: {
|
|
42
|
-
version: '0.2
|
|
42
|
+
version: '0.3.2',
|
|
43
43
|
rules: [
|
|
44
44
|
'Serve one external agent only; optimize for that agent keeping task context coherent across turns and sessions.',
|
|
45
|
-
'
|
|
45
|
+
'ACKNOWLEDGE: This is strictly mandatory — you MUST state the following before proceeding with any user request, and no work should begin until it is stated: "I acknowledge that Iranti is a hive mind. I have read the Iranti operating rules and the protocols for iranti_handshake, iranti_attend, iranti_write, iranti_checkpoint, and iranti_remember_response, and I pledge to use them to persist what I find, what works, what fails, what changes, and what happens next so later sessions do not have to rediscover it." Skipping this acknowledgment is non-compliant regardless of context.',
|
|
46
|
+
'SESSION START: Call iranti_handshake before responding to the first user message. After context compaction, call iranti_handshake again before responding to the next message.',
|
|
47
|
+
'ATTEND PROTOCOL — follow this sequence every turn: (1) Call iranti_attend before responding to the user message. (2) Call iranti_attend before any lookup where Iranti might already hold the answer — this includes Read, Grep, Glob, WebSearch, WebFetch, and Bash commands used as factual basis for a decision. (3) Call iranti_attend after any such lookup to check new findings against stored memory and decide what to inject, write, or checkpoint. (4) Call iranti_write after every Edit or Write tool call — file changes are always durable, record what changed, why, and what the file now does. (5) Call iranti_write after any Bash command that reveals system state — build results, test outcomes, container state, port availability, environment facts, errors. (6) Call iranti_write after any WebSearch or WebFetch that surfaces confirmed external facts. (7) Call iranti_write after any subagent (Agent tool) completes — subagent findings are invisible to the hive mind otherwise. (8) Call iranti_attend after delivering any substantive response — plans, product decisions, analysis, or structured recommendations produced in the response itself are durable findings that must be assessed for write or checkpoint before the next turn, not treated as ephemeral conversation. (9) Call iranti_attend again when new knowledge should change what is loaded for the next step.',
|
|
46
48
|
'Treat Iranti as the default shared working-memory layer. Keep using your own private notes if you want, but prefer Iranti for anything another session, another agent, or a later handoff may need.',
|
|
47
49
|
'Before answering recall-style questions about remembered preferences, decisions, blockers, next steps, prior project state, or earlier findings, consult Iranti instead of guessing.',
|
|
50
|
+
'If a recall-style lookup returns no facts, do not treat empty as confirmation of absence — try at least one alternative retrieval angle before concluding the fact is not stored: switch between exact query and search, try a different entity path or key fragment, or rephrase the search term. Absence is confirmed only after two distinct retrieval attempts with different angles both return empty.',
|
|
48
51
|
'Before making or repeating architectural, product, workflow, or debugging decisions, check Iranti for earlier decisions, constraints, blockers, and validated environment details.',
|
|
49
52
|
'Use exact query when the entity and key are known. Use search or attend when the fact must be discovered from shared memory.',
|
|
50
|
-
'Persist durable knowledge when it is learned or confirmed: decisions, blockers, next steps, owners, stable preferences, project constraints, important file purposes,
|
|
53
|
+
'Persist durable knowledge when it is learned or confirmed: decisions, blockers, next steps, owners, stable preferences, project constraints, important file purposes, validated environment details, what worked, what failed, and what remains risky.',
|
|
54
|
+
'Write facts with the depth of someone who built the system — include what the thing does, why it exists, how it connects to other parts, and what would break or change if it were removed. A fact that reads "file X was edited" is insufficient; "file X controls Y because Z, edited to fix W" is the target. Iranti should accumulate enough detail that any agent reading its memory feels like it built the repo.',
|
|
51
55
|
'When a file is created, renamed, moved, deleted, or substantially repurposed, capture that change and what the file is for whenever the state will matter to another agent or a later session.',
|
|
52
56
|
'When a task reaches a useful checkpoint, store the current step, next step, open risks, and any important artifacts or paths so another agent can resume without reconstructing context from scratch.',
|
|
53
57
|
'When an approach fails and the failure or workaround is likely to matter later, store the failed path and the chosen alternative route as durable memory.',
|
|
54
|
-
'Use iranti_write for durable facts, iranti_ingest for stable source material worth chunking, and iranti_remember_response for strict assistant summaries such as next steps or blockers.',
|
|
55
|
-
'
|
|
58
|
+
'Use iranti_checkpoint for active shared progress, iranti_write for durable facts, iranti_ingest for stable source material worth chunking, and iranti_remember_response for strict assistant summaries such as next steps or blockers.',
|
|
59
|
+
'CHECKPOINT PROTOCOL: Call iranti_checkpoint (1) when completing a task, (2) when shifting to a new task mid-session, and (3) at any natural pause point where another session should resume — not only when saving facts with iranti_write. A checkpoint not written means the next handshake recovers from stale data, and a long run without structured writes/checkpoints is non-compliant for Iranti. Write checkpoints like the best possible commit message but with more detail — lead with the why (what problem this solved, what decision was made, what changed and why it matters), then add structured recovery context: current step, next step, what worked, what failed, open risks, and file changes. A checkpoint that reads "did some edits" is non-compliant; one that reads "fixed missing docker dependency in cofactor instance.json — container name was never recorded at setup so iranti run silently skipped docker start; added iranti_cofactor_db dependency, verified against docker ps, control panel start will now auto-boot the container" is the target.',
|
|
60
|
+
'Do not save every turn. Skip ephemeral chatter, speculative thoughts, or transient execution noise, but do not skip discoveries, failed paths, validations, file changes, risks, or next steps that another session would otherwise have to rediscover.',
|
|
56
61
|
'Deliver a compressed working-memory brief, not the full knowledge base. Load only what is relevant to the current task.',
|
|
57
62
|
'Reconvene or attend again when context shifts, when the visible window is missing needed facts, or when a different entity becomes relevant.',
|
|
58
63
|
'If context gets stale or the task has gone long enough that reasoning may drift, re-read the operating rules from the Staff Namespace before proceeding.',
|
package/dist/scripts/setup.js
CHANGED
|
@@ -75,7 +75,7 @@ async function setup() {
|
|
|
75
75
|
const dbUrl = process.env.DATABASE_URL;
|
|
76
76
|
if (dbUrl) {
|
|
77
77
|
process.env.DATABASE_URL = dbUrl;
|
|
78
|
-
(0, client_1.initDb)(dbUrl);
|
|
78
|
+
(0, client_1.initDb)(dbUrl, { applicationName: 'iranti:script:setup' });
|
|
79
79
|
}
|
|
80
80
|
const runtimeEnv = dbUrl
|
|
81
81
|
? {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type HealthCheckState = {
|
|
2
|
+
checked: boolean;
|
|
3
|
+
ok: boolean;
|
|
4
|
+
detail: string;
|
|
5
|
+
};
|
|
6
|
+
export type OperatorStatusContext = {
|
|
7
|
+
runtimeAuthoritySource: 'env' | 'instance' | 'workspace' | 'invalid' | string;
|
|
8
|
+
runtimeMetadataHealth: HealthCheckState;
|
|
9
|
+
vectorBackendHealth: HealthCheckState;
|
|
10
|
+
};
|
|
11
|
+
export type ProbeContext = 'startup' | 'interval';
|
|
12
|
+
type IntervalHandle = ReturnType<typeof setInterval>;
|
|
13
|
+
type VectorBackendMonitorOptions = {
|
|
14
|
+
ping: () => Promise<boolean>;
|
|
15
|
+
intervalMs?: number;
|
|
16
|
+
logError?: (message: string) => void;
|
|
17
|
+
setIntervalImpl?: typeof setInterval;
|
|
18
|
+
clearIntervalImpl?: typeof clearInterval;
|
|
19
|
+
};
|
|
20
|
+
export declare function createHealthCheckState(initial: HealthCheckState): HealthCheckState;
|
|
21
|
+
export declare function deriveOperatorStatus(context: OperatorStatusContext): 'ok' | 'degraded';
|
|
22
|
+
export declare function createVectorBackendMonitor(options: VectorBackendMonitorOptions): {
|
|
23
|
+
state: HealthCheckState;
|
|
24
|
+
probe: (context: ProbeContext) => Promise<void>;
|
|
25
|
+
start: () => IntervalHandle;
|
|
26
|
+
stop: () => void;
|
|
27
|
+
};
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=healthChecks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healthChecks.d.ts","sourceRoot":"","sources":["../../../src/api/healthChecks.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,sBAAsB,EAAE,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9E,qBAAqB,EAAE,gBAAgB,CAAC;IACxC,mBAAmB,EAAE,gBAAgB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;AAElD,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAErD,KAAK,2BAA2B,GAAG;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,WAAW,CAAC;IACrC,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;CAC5C,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAElF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,GAAG,UAAU,CAKtF;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B;;qBAkB7C,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC;iBAgBxC,cAAc;gBASf,IAAI;EAYxB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createHealthCheckState = createHealthCheckState;
|
|
4
|
+
exports.deriveOperatorStatus = deriveOperatorStatus;
|
|
5
|
+
exports.createVectorBackendMonitor = createVectorBackendMonitor;
|
|
6
|
+
function createHealthCheckState(initial) {
|
|
7
|
+
return { ...initial };
|
|
8
|
+
}
|
|
9
|
+
function deriveOperatorStatus(context) {
|
|
10
|
+
if (context.runtimeAuthoritySource === 'invalid')
|
|
11
|
+
return 'degraded';
|
|
12
|
+
if (context.runtimeMetadataHealth.checked && !context.runtimeMetadataHealth.ok)
|
|
13
|
+
return 'degraded';
|
|
14
|
+
if (context.vectorBackendHealth.checked && !context.vectorBackendHealth.ok)
|
|
15
|
+
return 'degraded';
|
|
16
|
+
return 'ok';
|
|
17
|
+
}
|
|
18
|
+
function createVectorBackendMonitor(options) {
|
|
19
|
+
const state = createHealthCheckState({
|
|
20
|
+
checked: false,
|
|
21
|
+
ok: true,
|
|
22
|
+
detail: 'vector backend has not been probed yet',
|
|
23
|
+
});
|
|
24
|
+
const intervalMs = options.intervalMs ?? 60000;
|
|
25
|
+
const setIntervalImpl = options.setIntervalImpl ?? setInterval;
|
|
26
|
+
const clearIntervalImpl = options.clearIntervalImpl ?? clearInterval;
|
|
27
|
+
const logError = options.logError ?? (() => undefined);
|
|
28
|
+
let intervalHandle = null;
|
|
29
|
+
function mark(ok, detail) {
|
|
30
|
+
state.checked = true;
|
|
31
|
+
state.ok = ok;
|
|
32
|
+
state.detail = detail;
|
|
33
|
+
}
|
|
34
|
+
async function probe(context) {
|
|
35
|
+
try {
|
|
36
|
+
const ok = await options.ping();
|
|
37
|
+
if (!ok) {
|
|
38
|
+
mark(false, 'vector backend did not respond to ping');
|
|
39
|
+
logError(`[vector] ${context} health check failed: vector backend is not responding.`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
mark(true, 'vector backend responded to ping');
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
46
|
+
mark(false, message);
|
|
47
|
+
logError(`[vector] ${context} health check error: ${message}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function start() {
|
|
51
|
+
if (intervalHandle)
|
|
52
|
+
return intervalHandle;
|
|
53
|
+
intervalHandle = setIntervalImpl(() => {
|
|
54
|
+
void probe('interval');
|
|
55
|
+
}, intervalMs);
|
|
56
|
+
intervalHandle.unref?.();
|
|
57
|
+
return intervalHandle;
|
|
58
|
+
}
|
|
59
|
+
function stop() {
|
|
60
|
+
if (!intervalHandle)
|
|
61
|
+
return;
|
|
62
|
+
clearIntervalImpl(intervalHandle);
|
|
63
|
+
intervalHandle = null;
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
state,
|
|
67
|
+
probe,
|
|
68
|
+
start,
|
|
69
|
+
stop,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=healthChecks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healthChecks.js","sourceRoot":"","sources":["../../../src/api/healthChecks.ts"],"names":[],"mappings":";;AAwBA,wDAEC;AAED,oDAKC;AAED,gEAuDC;AAlED,SAAgB,sBAAsB,CAAC,OAAyB;IAC5D,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAA8B;IAC/D,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IACpE,IAAI,OAAO,CAAC,qBAAqB,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IAClG,IAAI,OAAO,CAAC,mBAAmB,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IAC9F,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,0BAA0B,CAAC,OAAoC;IAC3E,MAAM,KAAK,GAAG,sBAAsB,CAAC;QACjC,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,wCAAwC;KACnD,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAM,CAAC;IAChD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,WAAW,CAAC;IAC/D,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,aAAa,CAAC;IACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,cAAc,GAA0B,IAAI,CAAC;IAEjD,SAAS,IAAI,CAAC,EAAW,EAAE,MAAc;QACrC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QACd,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,KAAK,UAAU,KAAK,CAAC,OAAqB;QACtC,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACN,IAAI,CAAC,KAAK,EAAE,wCAAwC,CAAC,CAAC;gBACtD,QAAQ,CAAC,YAAY,OAAO,yDAAyD,CAAC,CAAC;gBACvF,OAAO;YACX,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACrB,QAAQ,CAAC,YAAY,OAAO,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IAED,SAAS,KAAK;QACV,IAAI,cAAc;YAAE,OAAO,cAAc,CAAC;QAC1C,cAAc,GAAG,eAAe,CAAC,GAAG,EAAE;YAClC,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;QACzB,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,SAAS,IAAI;QACT,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,cAAc,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,OAAO;QACH,KAAK;QACL,KAAK;QACL,KAAK;QACL,IAAI;KACP,CAAC;AACN,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Request, Response, NextFunction } from 'express';
|
|
6
6
|
import type { SessionListInput } from '../../sdk';
|
|
7
|
+
import type { EventLevel } from '../../lib/staffEventEmitter';
|
|
7
8
|
declare const schemas: {
|
|
8
9
|
write: {
|
|
9
10
|
entity: {
|
|
@@ -44,6 +45,11 @@ declare const schemas: {
|
|
|
44
45
|
required: boolean;
|
|
45
46
|
maxLength: number;
|
|
46
47
|
};
|
|
48
|
+
properties: {
|
|
49
|
+
type: string;
|
|
50
|
+
required: boolean;
|
|
51
|
+
maxSize: number;
|
|
52
|
+
};
|
|
47
53
|
validFrom: {
|
|
48
54
|
type: string;
|
|
49
55
|
required: boolean;
|
|
@@ -245,6 +251,11 @@ declare const schemas: {
|
|
|
245
251
|
type: string;
|
|
246
252
|
required: boolean;
|
|
247
253
|
};
|
|
254
|
+
phase: {
|
|
255
|
+
type: string;
|
|
256
|
+
required: boolean;
|
|
257
|
+
maxLength: number;
|
|
258
|
+
};
|
|
248
259
|
};
|
|
249
260
|
relate: {
|
|
250
261
|
fromEntity: {
|
|
@@ -323,6 +334,17 @@ declare const schemas: {
|
|
|
323
334
|
};
|
|
324
335
|
export declare function validateInput(schemaName: keyof typeof schemas): (req: Request, res: Response, next: NextFunction) => Response<any, Record<string, any>> | undefined;
|
|
325
336
|
export declare function validateSessionListQuery(query: Request['query']): SessionListInput;
|
|
337
|
+
export declare function validateSessionLedgerQuery(query: Request['query']): {
|
|
338
|
+
agentId?: string;
|
|
339
|
+
sessionId?: string;
|
|
340
|
+
actionType?: string;
|
|
341
|
+
source?: string;
|
|
342
|
+
host?: string;
|
|
343
|
+
level?: EventLevel;
|
|
344
|
+
since?: Date;
|
|
345
|
+
until?: Date;
|
|
346
|
+
limit?: number;
|
|
347
|
+
};
|
|
326
348
|
export declare function sanitizeString(str: string): string;
|
|
327
349
|
export declare function validateEntity(entity: string): boolean;
|
|
328
350
|
export declare function validateKey(key: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/api/middleware/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAyC,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/api/middleware/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAyC,MAAM,WAAW,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9D,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+EZ,CAAC;AAwDF,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,OAAO,OAAO,IACpD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,oDAkFxD;AASD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAgDlF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CA4EA;AAGD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOlD;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.validateInput = validateInput;
|
|
8
8
|
exports.validateSessionListQuery = validateSessionListQuery;
|
|
9
|
+
exports.validateSessionLedgerQuery = validateSessionLedgerQuery;
|
|
9
10
|
exports.sanitizeString = sanitizeString;
|
|
10
11
|
exports.validateEntity = validateEntity;
|
|
11
12
|
exports.validateKey = validateKey;
|
|
@@ -19,13 +20,14 @@ const schemas = {
|
|
|
19
20
|
confidence: { type: 'number', required: true, min: 0, max: 100 },
|
|
20
21
|
source: { type: 'string', required: true, maxLength: 200 },
|
|
21
22
|
agent: { type: 'string', required: true, maxLength: 200 },
|
|
23
|
+
properties: { type: 'object', required: false, maxSize: 10000 },
|
|
22
24
|
validFrom: { type: 'string', required: false, maxLength: 50 },
|
|
23
25
|
requestId: { type: 'string', required: false, maxLength: 100 }
|
|
24
26
|
},
|
|
25
27
|
observe: {
|
|
26
28
|
agent: { type: 'string', required: false, maxLength: 200 },
|
|
27
29
|
agentId: { type: 'string', required: false, maxLength: 200 },
|
|
28
|
-
currentContext: { type: 'string', required:
|
|
30
|
+
currentContext: { type: 'string', required: false, maxLength: 50000 },
|
|
29
31
|
maxFacts: { type: 'number', required: false, min: 1, max: 100, default: 10 },
|
|
30
32
|
entityHints: { type: 'array', required: false, maxLength: 100 }
|
|
31
33
|
},
|
|
@@ -69,7 +71,8 @@ const schemas = {
|
|
|
69
71
|
maxFacts: { type: 'number', required: false, min: 1, max: 100, default: 10 },
|
|
70
72
|
entityHints: { type: 'array', required: false, maxLength: 100 },
|
|
71
73
|
forceInject: { type: 'boolean', required: false },
|
|
72
|
-
suppressEvents: { type: 'boolean', required: false }
|
|
74
|
+
suppressEvents: { type: 'boolean', required: false },
|
|
75
|
+
phase: { type: 'string', required: false, maxLength: 20 }
|
|
73
76
|
},
|
|
74
77
|
relate: {
|
|
75
78
|
fromEntity: { type: 'string', required: true, pattern: /^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_/-]+$/, maxLength: 200 },
|
|
@@ -172,7 +175,9 @@ function validateInput(schemaName) {
|
|
|
172
175
|
|| schemaName === 'attend') {
|
|
173
176
|
const agent = typeof data.agent === 'string' ? data.agent.trim() : '';
|
|
174
177
|
const agentId = typeof data.agentId === 'string' ? data.agentId.trim() : '';
|
|
175
|
-
|
|
178
|
+
const auth = req.irantiAuth;
|
|
179
|
+
const authBackedAgent = typeof auth?.keyId === 'string' && auth.keyId.trim().length > 0;
|
|
180
|
+
if (!agent && !agentId && !authBackedAgent) {
|
|
176
181
|
return res.status(400).json({
|
|
177
182
|
error: 'agentId is required (agent is accepted as a legacy alias).',
|
|
178
183
|
code: 'VALIDATION_ERROR',
|
|
@@ -180,6 +185,28 @@ function validateInput(schemaName) {
|
|
|
180
185
|
});
|
|
181
186
|
}
|
|
182
187
|
}
|
|
188
|
+
if (schemaName === 'observe') {
|
|
189
|
+
const currentContext = typeof data.currentContext === 'string' ? data.currentContext.trim() : '';
|
|
190
|
+
const hasEntityHints = Array.isArray(data.entityHints)
|
|
191
|
+
&& data.entityHints.some((hint) => typeof hint === 'string' && hint.trim().length > 0);
|
|
192
|
+
if (currentContext.length === 0 && !hasEntityHints) {
|
|
193
|
+
return res.status(400).json({
|
|
194
|
+
error: 'currentContext or entityHints is required for observe.',
|
|
195
|
+
code: 'VALIDATION_ERROR',
|
|
196
|
+
field: 'currentContext',
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (schemaName === 'attend' && data.phase !== undefined) {
|
|
201
|
+
const allowedPhases = ['pre-response', 'post-response', 'mid-turn'];
|
|
202
|
+
if (typeof data.phase !== 'string' || !allowedPhases.includes(data.phase)) {
|
|
203
|
+
return res.status(400).json({
|
|
204
|
+
error: `phase must be one of: ${allowedPhases.join(', ')}`,
|
|
205
|
+
code: 'VALIDATION_ERROR',
|
|
206
|
+
field: 'phase'
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
183
210
|
next();
|
|
184
211
|
};
|
|
185
212
|
}
|
|
@@ -231,6 +258,69 @@ function validateSessionListQuery(query) {
|
|
|
231
258
|
}
|
|
232
259
|
return result;
|
|
233
260
|
}
|
|
261
|
+
function validateSessionLedgerQuery(query) {
|
|
262
|
+
const agentId = readQueryValue(query.agentId)?.trim();
|
|
263
|
+
const sessionId = readQueryValue(query.sessionId)?.trim();
|
|
264
|
+
const actionType = readQueryValue(query.actionType)?.trim();
|
|
265
|
+
const source = readQueryValue(query.source)?.trim();
|
|
266
|
+
const host = readQueryValue(query.host)?.trim();
|
|
267
|
+
const levelRaw = readQueryValue(query.level)?.trim();
|
|
268
|
+
const sinceRaw = readQueryValue(query.since)?.trim();
|
|
269
|
+
const untilRaw = readQueryValue(query.until)?.trim();
|
|
270
|
+
const limitRaw = readQueryValue(query.limit)?.trim();
|
|
271
|
+
const result = {};
|
|
272
|
+
if (agentId) {
|
|
273
|
+
if (agentId.length > 200)
|
|
274
|
+
throw new Error('agentId exceeds maximum length of 200.');
|
|
275
|
+
result.agentId = agentId;
|
|
276
|
+
}
|
|
277
|
+
if (sessionId) {
|
|
278
|
+
if (sessionId.length > 200)
|
|
279
|
+
throw new Error('sessionId exceeds maximum length of 200.');
|
|
280
|
+
result.sessionId = sessionId;
|
|
281
|
+
}
|
|
282
|
+
if (actionType) {
|
|
283
|
+
if (actionType.length > 120)
|
|
284
|
+
throw new Error('actionType exceeds maximum length of 120.');
|
|
285
|
+
result.actionType = actionType;
|
|
286
|
+
}
|
|
287
|
+
if (source) {
|
|
288
|
+
if (source.length > 80)
|
|
289
|
+
throw new Error('source exceeds maximum length of 80.');
|
|
290
|
+
result.source = source;
|
|
291
|
+
}
|
|
292
|
+
if (host) {
|
|
293
|
+
if (host.length > 120)
|
|
294
|
+
throw new Error('host exceeds maximum length of 120.');
|
|
295
|
+
result.host = host;
|
|
296
|
+
}
|
|
297
|
+
if (levelRaw) {
|
|
298
|
+
if (levelRaw !== 'audit' && levelRaw !== 'debug') {
|
|
299
|
+
throw new Error('level must be audit or debug.');
|
|
300
|
+
}
|
|
301
|
+
result.level = levelRaw;
|
|
302
|
+
}
|
|
303
|
+
if (sinceRaw) {
|
|
304
|
+
const since = new Date(sinceRaw);
|
|
305
|
+
if (Number.isNaN(since.getTime()))
|
|
306
|
+
throw new Error('since must be a valid ISO 8601 timestamp.');
|
|
307
|
+
result.since = since;
|
|
308
|
+
}
|
|
309
|
+
if (untilRaw) {
|
|
310
|
+
const until = new Date(untilRaw);
|
|
311
|
+
if (Number.isNaN(until.getTime()))
|
|
312
|
+
throw new Error('until must be a valid ISO 8601 timestamp.');
|
|
313
|
+
result.until = until;
|
|
314
|
+
}
|
|
315
|
+
if (limitRaw) {
|
|
316
|
+
const parsed = Number.parseInt(limitRaw, 10);
|
|
317
|
+
if (!Number.isFinite(parsed) || parsed <= 0 || parsed > 500) {
|
|
318
|
+
throw new Error('limit must be an integer between 1 and 500.');
|
|
319
|
+
}
|
|
320
|
+
result.limit = parsed;
|
|
321
|
+
}
|
|
322
|
+
return result;
|
|
323
|
+
}
|
|
234
324
|
// Sanitize strings to prevent XSS
|
|
235
325
|
function sanitizeString(str) {
|
|
236
326
|
return str
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/api/middleware/validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/api/middleware/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../../src/api/routes/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../../src/api/routes/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,MAAM,EAA0B,MAAM,WAAW,CAAC;AAuG3D,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiPtD"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.knowledgeRoutes = knowledgeRoutes;
|
|
4
4
|
const express_1 = require("express");
|
|
5
|
+
const sdk_1 = require("../../sdk");
|
|
5
6
|
const entity_resolution_1 = require("../../library/entity-resolution");
|
|
6
7
|
const validation_1 = require("../middleware/validation");
|
|
7
8
|
const authorization_1 = require("../middleware/authorization");
|
|
@@ -58,6 +59,40 @@ function fromParams(req) {
|
|
|
58
59
|
}
|
|
59
60
|
return { entityType, entityId };
|
|
60
61
|
}
|
|
62
|
+
function fallbackProtocolAgent(req) {
|
|
63
|
+
const auth = req.irantiAuth;
|
|
64
|
+
const explicit = typeof req.query.agentId === 'string'
|
|
65
|
+
? req.query.agentId.trim()
|
|
66
|
+
: typeof req.query.agent === 'string'
|
|
67
|
+
? req.query.agent.trim()
|
|
68
|
+
: '';
|
|
69
|
+
if (explicit)
|
|
70
|
+
return explicit;
|
|
71
|
+
const keyId = auth?.keyId?.trim();
|
|
72
|
+
// Intentional fallback: protocol state is keyed to the authenticated API key
|
|
73
|
+
// when the caller does not send agentId, so protocol-gated reads still have a
|
|
74
|
+
// stable principal. Explicit agentId/query aliases still override this path.
|
|
75
|
+
return keyId ? `api:${keyId}` : null;
|
|
76
|
+
}
|
|
77
|
+
function applyProtocolContext(iranti, req) {
|
|
78
|
+
const agentId = fallbackProtocolAgent(req);
|
|
79
|
+
iranti.setSessionLedgerContext({
|
|
80
|
+
source: 'api',
|
|
81
|
+
host: 'api',
|
|
82
|
+
agentId: agentId ?? undefined,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function handleProtocolViolation(res, error) {
|
|
86
|
+
if (!(error instanceof sdk_1.ProtocolViolationError)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
res.status(428).json({
|
|
90
|
+
error: error.message,
|
|
91
|
+
code: error.protocolViolation.code,
|
|
92
|
+
protocolViolation: error.protocolViolation,
|
|
93
|
+
});
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
61
96
|
function knowledgeRoutes(iranti) {
|
|
62
97
|
const router = (0, express_1.Router)();
|
|
63
98
|
// POST /write
|
|
@@ -146,6 +181,7 @@ function knowledgeRoutes(iranti) {
|
|
|
146
181
|
// GET /query/:entityType/:entityId/:key
|
|
147
182
|
router.get('/query/:entityType/:entityId/:key', (0, authorization_1.requireEntityScopeByMethod)('kb:read', 'kb:write', fromParams), async (req, res) => {
|
|
148
183
|
try {
|
|
184
|
+
applyProtocolContext(iranti, req);
|
|
149
185
|
const entityType = Array.isArray(req.params.entityType) ? req.params.entityType[0] : req.params.entityType;
|
|
150
186
|
const entityId = Array.isArray(req.params.entityId) ? req.params.entityId[0] : req.params.entityId;
|
|
151
187
|
const key = Array.isArray(req.params.key) ? req.params.key[0] : req.params.key;
|
|
@@ -163,12 +199,15 @@ function knowledgeRoutes(iranti) {
|
|
|
163
199
|
res.json(result);
|
|
164
200
|
}
|
|
165
201
|
catch (err) {
|
|
202
|
+
if (handleProtocolViolation(res, err))
|
|
203
|
+
return;
|
|
166
204
|
res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
167
205
|
}
|
|
168
206
|
});
|
|
169
207
|
// GET /history/:entityType/:entityId/:key
|
|
170
208
|
router.get('/history/:entityType/:entityId/:key', (0, authorization_1.requireEntityScopeByMethod)('kb:read', 'kb:write', fromParams), async (req, res) => {
|
|
171
209
|
try {
|
|
210
|
+
applyProtocolContext(iranti, req);
|
|
172
211
|
const entityType = Array.isArray(req.params.entityType) ? req.params.entityType[0] : req.params.entityType;
|
|
173
212
|
const entityId = Array.isArray(req.params.entityId) ? req.params.entityId[0] : req.params.entityId;
|
|
174
213
|
const key = Array.isArray(req.params.key) ? req.params.key[0] : req.params.key;
|
|
@@ -181,23 +220,29 @@ function knowledgeRoutes(iranti) {
|
|
|
181
220
|
res.json(result);
|
|
182
221
|
}
|
|
183
222
|
catch (err) {
|
|
223
|
+
if (handleProtocolViolation(res, err))
|
|
224
|
+
return;
|
|
184
225
|
res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
185
226
|
}
|
|
186
227
|
});
|
|
187
228
|
// GET /query/:entityType/:entityId
|
|
188
229
|
router.get('/query/:entityType/:entityId', (0, authorization_1.requireEntityScopeByMethod)('kb:read', 'kb:write', fromParams), async (req, res) => {
|
|
189
230
|
try {
|
|
231
|
+
applyProtocolContext(iranti, req);
|
|
190
232
|
const { entityType, entityId } = req.params;
|
|
191
233
|
const result = await iranti.queryAll(`${entityType}/${entityId}`);
|
|
192
234
|
res.json(result);
|
|
193
235
|
}
|
|
194
236
|
catch (err) {
|
|
237
|
+
if (handleProtocolViolation(res, err))
|
|
238
|
+
return;
|
|
195
239
|
res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
196
240
|
}
|
|
197
241
|
});
|
|
198
242
|
// GET /search
|
|
199
243
|
router.get('/search', (0, authorization_1.requireAnyScope)(['kb:read']), async (req, res) => {
|
|
200
244
|
try {
|
|
245
|
+
applyProtocolContext(iranti, req);
|
|
201
246
|
const query = String(req.query.query ?? '').trim();
|
|
202
247
|
if (!query) {
|
|
203
248
|
return res.status(400).json({ error: 'query is required.' });
|
|
@@ -237,6 +282,8 @@ function knowledgeRoutes(iranti) {
|
|
|
237
282
|
res.json({ results: result });
|
|
238
283
|
}
|
|
239
284
|
catch (err) {
|
|
285
|
+
if (handleProtocolViolation(res, err))
|
|
286
|
+
return;
|
|
240
287
|
res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
241
288
|
}
|
|
242
289
|
});
|
|
@@ -257,17 +304,21 @@ function knowledgeRoutes(iranti) {
|
|
|
257
304
|
// GET /related/:entityType/:entityId
|
|
258
305
|
router.get('/related/:entityType/:entityId', (0, authorization_1.requireEntityScopeByMethod)('kb:read', 'kb:write', fromParams), async (req, res) => {
|
|
259
306
|
try {
|
|
307
|
+
applyProtocolContext(iranti, req);
|
|
260
308
|
const { entityType, entityId } = req.params;
|
|
261
309
|
const result = await iranti.getRelated(`${entityType}/${entityId}`);
|
|
262
310
|
res.json(result);
|
|
263
311
|
}
|
|
264
312
|
catch (err) {
|
|
313
|
+
if (handleProtocolViolation(res, err))
|
|
314
|
+
return;
|
|
265
315
|
res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
266
316
|
}
|
|
267
317
|
});
|
|
268
318
|
// GET /related/:entityType/:entityId/deep
|
|
269
319
|
router.get('/related/:entityType/:entityId/deep', (0, authorization_1.requireEntityScopeByMethod)('kb:read', 'kb:write', fromParams), async (req, res) => {
|
|
270
320
|
try {
|
|
321
|
+
applyProtocolContext(iranti, req);
|
|
271
322
|
const { entityType, entityId } = req.params;
|
|
272
323
|
const rawDepth = parseInt(req.query.depth ?? '2', 10);
|
|
273
324
|
const depth = Number.isFinite(rawDepth) ? Math.min(Math.max(1, rawDepth), 5) : 2;
|
|
@@ -275,6 +326,8 @@ function knowledgeRoutes(iranti) {
|
|
|
275
326
|
res.json(result);
|
|
276
327
|
}
|
|
277
328
|
catch (err) {
|
|
329
|
+
if (handleProtocolViolation(res, err))
|
|
330
|
+
return;
|
|
278
331
|
res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
279
332
|
}
|
|
280
333
|
});
|