iranti 0.3.32 → 0.3.33
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 +3 -1
- package/dist/scripts/api-key-create.js +7 -0
- package/dist/scripts/api-key-list.js +6 -0
- package/dist/scripts/api-key-revoke.js +6 -0
- package/dist/scripts/claude-code-memory-hook.js +10 -0
- package/dist/scripts/codex-setup.js +7 -0
- package/dist/scripts/iranti-cli.js +20 -0
- package/dist/scripts/iranti-mcp.js +11 -1
- package/dist/scripts/seed-codebase.js +6 -0
- package/dist/scripts/seed.js +7 -0
- package/dist/scripts/setup.js +8 -0
- package/dist/src/api/archivistScheduler.d.ts +18 -0
- package/dist/src/api/archivistScheduler.d.ts.map +1 -1
- package/dist/src/api/archivistScheduler.js +18 -0
- package/dist/src/api/archivistScheduler.js.map +1 -1
- package/dist/src/api/diag.d.ts +11 -0
- package/dist/src/api/diag.d.ts.map +1 -1
- package/dist/src/api/diag.js +14 -2
- package/dist/src/api/diag.js.map +1 -1
- package/dist/src/api/healthChecks.d.ts +19 -0
- package/dist/src/api/healthChecks.d.ts.map +1 -1
- package/dist/src/api/healthChecks.js +19 -0
- package/dist/src/api/healthChecks.js.map +1 -1
- package/dist/src/api/middleware/auth.d.ts +15 -0
- package/dist/src/api/middleware/auth.d.ts.map +1 -1
- package/dist/src/api/middleware/auth.js +15 -0
- package/dist/src/api/middleware/auth.js.map +1 -1
- package/dist/src/api/middleware/authorization.d.ts +18 -0
- package/dist/src/api/middleware/authorization.d.ts.map +1 -1
- package/dist/src/api/middleware/authorization.js +18 -0
- package/dist/src/api/middleware/authorization.js.map +1 -1
- package/dist/src/api/middleware/validation.d.ts +25 -339
- package/dist/src/api/middleware/validation.d.ts.map +1 -1
- package/dist/src/api/middleware/validation.js +19 -8
- package/dist/src/api/middleware/validation.js.map +1 -1
- package/dist/src/api/repro.d.ts +7 -0
- package/dist/src/api/repro.d.ts.map +1 -1
- package/dist/src/api/repro.js +8 -1
- package/dist/src/api/repro.js.map +1 -1
- package/dist/src/api/routes/agents.d.ts +11 -0
- package/dist/src/api/routes/agents.d.ts.map +1 -1
- package/dist/src/api/routes/agents.js +11 -0
- package/dist/src/api/routes/agents.js.map +1 -1
- package/dist/src/api/routes/batch.d.ts +12 -0
- package/dist/src/api/routes/batch.d.ts.map +1 -1
- package/dist/src/api/routes/batch.js +13 -1
- package/dist/src/api/routes/batch.js.map +1 -1
- package/dist/src/api/routes/dev.d.ts +10 -0
- package/dist/src/api/routes/dev.d.ts.map +1 -1
- package/dist/src/api/routes/dev.js +11 -1
- package/dist/src/api/routes/dev.js.map +1 -1
- package/dist/src/api/routes/knowledge.d.ts +26 -0
- package/dist/src/api/routes/knowledge.d.ts.map +1 -1
- package/dist/src/api/routes/knowledge.js +26 -0
- package/dist/src/api/routes/knowledge.js.map +1 -1
- package/dist/src/api/routes/memory.d.ts +13 -0
- package/dist/src/api/routes/memory.d.ts.map +1 -1
- package/dist/src/api/routes/memory.js +13 -0
- package/dist/src/api/routes/memory.js.map +1 -1
- package/dist/src/api/server.d.ts +20 -0
- package/dist/src/api/server.d.ts.map +1 -1
- package/dist/src/api/server.js +21 -1
- package/dist/src/api/server.js.map +1 -1
- package/dist/src/archivist/index.d.ts +21 -0
- package/dist/src/archivist/index.d.ts.map +1 -1
- package/dist/src/archivist/index.js +24 -2
- package/dist/src/archivist/index.js.map +1 -1
- package/dist/src/attendant/AttendantInstance.d.ts +42 -0
- package/dist/src/attendant/AttendantInstance.d.ts.map +1 -1
- package/dist/src/attendant/AttendantInstance.js +71 -6
- package/dist/src/attendant/AttendantInstance.js.map +1 -1
- package/dist/src/attendant/index.d.ts +19 -0
- package/dist/src/attendant/index.d.ts.map +1 -1
- package/dist/src/attendant/index.js +19 -0
- package/dist/src/attendant/index.js.map +1 -1
- package/dist/src/attendant/registry.d.ts +15 -0
- package/dist/src/attendant/registry.d.ts.map +1 -1
- package/dist/src/attendant/registry.js +15 -0
- package/dist/src/attendant/registry.js.map +1 -1
- package/dist/src/lib/assistantCheckpoint.d.ts +16 -0
- package/dist/src/lib/assistantCheckpoint.d.ts.map +1 -1
- package/dist/src/lib/assistantCheckpoint.js +16 -0
- package/dist/src/lib/assistantCheckpoint.js.map +1 -1
- package/dist/src/lib/autoRemember.d.ts +26 -0
- package/dist/src/lib/autoRemember.d.ts.map +1 -1
- package/dist/src/lib/autoRemember.js +26 -0
- package/dist/src/lib/autoRemember.js.map +1 -1
- package/dist/src/lib/check-bootstrap-state.d.ts +9 -0
- package/dist/src/lib/check-bootstrap-state.d.ts.map +1 -1
- package/dist/src/lib/check-bootstrap-state.js +9 -0
- package/dist/src/lib/check-bootstrap-state.js.map +1 -1
- package/dist/src/lib/cliHelpCatalog.d.ts +16 -0
- package/dist/src/lib/cliHelpCatalog.d.ts.map +1 -1
- package/dist/src/lib/cliHelpCatalog.js +16 -0
- package/dist/src/lib/cliHelpCatalog.js.map +1 -1
- package/dist/src/lib/cliHelpRenderer.d.ts +20 -0
- package/dist/src/lib/cliHelpRenderer.d.ts.map +1 -1
- package/dist/src/lib/cliHelpRenderer.js +20 -0
- package/dist/src/lib/cliHelpRenderer.js.map +1 -1
- package/dist/src/lib/commandErrors.d.ts +16 -0
- package/dist/src/lib/commandErrors.d.ts.map +1 -1
- package/dist/src/lib/commandErrors.js +16 -0
- package/dist/src/lib/commandErrors.js.map +1 -1
- package/dist/src/lib/commandInvocation.d.ts +18 -0
- package/dist/src/lib/commandInvocation.d.ts.map +1 -1
- package/dist/src/lib/commandInvocation.js +18 -0
- package/dist/src/lib/commandInvocation.js.map +1 -1
- package/dist/src/lib/createFirstPartyIranti.d.ts +11 -0
- package/dist/src/lib/createFirstPartyIranti.d.ts.map +1 -1
- package/dist/src/lib/createFirstPartyIranti.js +11 -0
- package/dist/src/lib/createFirstPartyIranti.js.map +1 -1
- package/dist/src/lib/dbStaffEventEmitter.d.ts +15 -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/decay.d.ts +14 -0
- package/dist/src/lib/decay.d.ts.map +1 -1
- package/dist/src/lib/decay.js +19 -1
- package/dist/src/lib/decay.js.map +1 -1
- package/dist/src/lib/dockerCliParsing.d.ts +11 -0
- package/dist/src/lib/dockerCliParsing.d.ts.map +1 -1
- package/dist/src/lib/dockerCliParsing.js +11 -0
- package/dist/src/lib/dockerCliParsing.js.map +1 -1
- package/dist/src/lib/escalationPaths.d.ts +15 -0
- package/dist/src/lib/escalationPaths.d.ts.map +1 -1
- package/dist/src/lib/escalationPaths.js +15 -0
- package/dist/src/lib/escalationPaths.js.map +1 -1
- package/dist/src/lib/fileMutation.d.ts +18 -0
- package/dist/src/lib/fileMutation.d.ts.map +1 -1
- package/dist/src/lib/fileMutation.js +18 -0
- package/dist/src/lib/fileMutation.js.map +1 -1
- package/dist/src/lib/hostMemoryFormatting.d.ts +18 -0
- package/dist/src/lib/hostMemoryFormatting.d.ts.map +1 -1
- package/dist/src/lib/hostMemoryFormatting.js +18 -0
- package/dist/src/lib/hostMemoryFormatting.js.map +1 -1
- package/dist/src/lib/issueFacts.d.ts +17 -0
- package/dist/src/lib/issueFacts.d.ts.map +1 -1
- package/dist/src/lib/issueFacts.js +17 -0
- package/dist/src/lib/issueFacts.js.map +1 -1
- package/dist/src/lib/llm.d.ts +26 -0
- package/dist/src/lib/llm.d.ts.map +1 -1
- package/dist/src/lib/llm.js +37 -16
- package/dist/src/lib/llm.js.map +1 -1
- package/dist/src/lib/metrics.d.ts +16 -0
- package/dist/src/lib/metrics.d.ts.map +1 -1
- package/dist/src/lib/metrics.js +16 -0
- package/dist/src/lib/metrics.js.map +1 -1
- package/dist/src/lib/packageRoot.d.ts +10 -0
- package/dist/src/lib/packageRoot.d.ts.map +1 -1
- package/dist/src/lib/packageRoot.js +10 -0
- package/dist/src/lib/packageRoot.js.map +1 -1
- package/dist/src/lib/projectLearning.d.ts +22 -0
- package/dist/src/lib/projectLearning.d.ts.map +1 -1
- package/dist/src/lib/projectLearning.js +22 -0
- package/dist/src/lib/projectLearning.js.map +1 -1
- package/dist/src/lib/protocolEnforcement.d.ts +21 -0
- package/dist/src/lib/protocolEnforcement.d.ts.map +1 -1
- package/dist/src/lib/protocolEnforcement.js +21 -0
- package/dist/src/lib/protocolEnforcement.js.map +1 -1
- package/dist/src/lib/providers/claude.d.ts +12 -0
- package/dist/src/lib/providers/claude.d.ts.map +1 -1
- package/dist/src/lib/providers/claude.js +12 -0
- package/dist/src/lib/providers/claude.js.map +1 -1
- package/dist/src/lib/providers/gemini.d.ts +11 -0
- package/dist/src/lib/providers/gemini.d.ts.map +1 -1
- package/dist/src/lib/providers/gemini.js +11 -0
- package/dist/src/lib/providers/gemini.js.map +1 -1
- package/dist/src/lib/providers/groq.d.ts +11 -0
- package/dist/src/lib/providers/groq.d.ts.map +1 -1
- package/dist/src/lib/providers/groq.js +11 -0
- package/dist/src/lib/providers/groq.js.map +1 -1
- package/dist/src/lib/providers/mistral.d.ts +11 -0
- package/dist/src/lib/providers/mistral.d.ts.map +1 -1
- package/dist/src/lib/providers/mistral.js +11 -0
- package/dist/src/lib/providers/mistral.js.map +1 -1
- package/dist/src/lib/providers/mock.d.ts +25 -0
- package/dist/src/lib/providers/mock.d.ts.map +1 -1
- package/dist/src/lib/providers/mock.js +25 -0
- package/dist/src/lib/providers/mock.js.map +1 -1
- package/dist/src/lib/providers/ollama.d.ts +11 -0
- package/dist/src/lib/providers/ollama.d.ts.map +1 -1
- package/dist/src/lib/providers/ollama.js +11 -0
- package/dist/src/lib/providers/ollama.js.map +1 -1
- package/dist/src/lib/providers/openai.d.ts +12 -0
- package/dist/src/lib/providers/openai.d.ts.map +1 -1
- package/dist/src/lib/providers/openai.js +21 -6
- package/dist/src/lib/providers/openai.js.map +1 -1
- package/dist/src/lib/requestContext.d.ts +12 -0
- package/dist/src/lib/requestContext.d.ts.map +1 -1
- package/dist/src/lib/requestContext.js +12 -0
- package/dist/src/lib/requestContext.js.map +1 -1
- package/dist/src/lib/router.d.ts +19 -0
- package/dist/src/lib/router.d.ts.map +1 -1
- package/dist/src/lib/router.js +19 -0
- package/dist/src/lib/router.js.map +1 -1
- package/dist/src/lib/runtimeDependencies.d.ts +17 -0
- package/dist/src/lib/runtimeDependencies.d.ts.map +1 -1
- package/dist/src/lib/runtimeDependencies.js +17 -0
- package/dist/src/lib/runtimeDependencies.js.map +1 -1
- package/dist/src/lib/runtimeEnv.d.ts +17 -0
- package/dist/src/lib/runtimeEnv.d.ts.map +1 -1
- package/dist/src/lib/runtimeEnv.js +17 -0
- package/dist/src/lib/runtimeEnv.js.map +1 -1
- package/dist/src/lib/runtimeLifecycle.d.ts +27 -0
- package/dist/src/lib/runtimeLifecycle.d.ts.map +1 -1
- package/dist/src/lib/runtimeLifecycle.js +27 -0
- package/dist/src/lib/runtimeLifecycle.js.map +1 -1
- package/dist/src/lib/scaffoldCloseout.d.ts +12 -0
- package/dist/src/lib/scaffoldCloseout.d.ts.map +1 -1
- package/dist/src/lib/scaffoldCloseout.js +19 -24
- package/dist/src/lib/scaffoldCloseout.js.map +1 -1
- package/dist/src/lib/semanticFactTags.d.ts +13 -0
- package/dist/src/lib/semanticFactTags.d.ts.map +1 -1
- package/dist/src/lib/semanticFactTags.js +46 -135
- package/dist/src/lib/semanticFactTags.js.map +1 -1
- package/dist/src/lib/sessionLedger.d.ts +19 -0
- package/dist/src/lib/sessionLedger.d.ts.map +1 -1
- package/dist/src/lib/sessionLedger.js +19 -0
- package/dist/src/lib/sessionLedger.js.map +1 -1
- package/dist/src/lib/sharedStateInvalidation.d.ts +22 -0
- package/dist/src/lib/sharedStateInvalidation.d.ts.map +1 -1
- package/dist/src/lib/sharedStateInvalidation.js +22 -0
- package/dist/src/lib/sharedStateInvalidation.js.map +1 -1
- package/dist/src/lib/staffEventEmitter.d.ts +20 -0
- package/dist/src/lib/staffEventEmitter.d.ts.map +1 -1
- package/dist/src/lib/staffEventEmitter.js +20 -2
- package/dist/src/lib/staffEventEmitter.js.map +1 -1
- package/dist/src/lib/staffEventRegistry.d.ts +14 -0
- package/dist/src/lib/staffEventRegistry.d.ts.map +1 -1
- package/dist/src/lib/staffEventRegistry.js +14 -3
- package/dist/src/lib/staffEventRegistry.js.map +1 -1
- package/dist/src/lib/staffEventsTable.d.ts +13 -0
- package/dist/src/lib/staffEventsTable.d.ts.map +1 -1
- package/dist/src/lib/staffEventsTable.js +13 -0
- package/dist/src/lib/staffEventsTable.js.map +1 -1
- package/dist/src/librarian/chunker.d.ts +19 -0
- package/dist/src/librarian/chunker.d.ts.map +1 -1
- package/dist/src/librarian/chunker.js +19 -0
- package/dist/src/librarian/chunker.js.map +1 -1
- package/dist/src/librarian/contextual-conflicts.d.ts +25 -2
- package/dist/src/librarian/contextual-conflicts.d.ts.map +1 -1
- package/dist/src/librarian/contextual-conflicts.js +22 -0
- package/dist/src/librarian/contextual-conflicts.js.map +1 -1
- package/dist/src/librarian/getPolicy.d.ts +16 -1
- package/dist/src/librarian/getPolicy.d.ts.map +1 -1
- package/dist/src/librarian/getPolicy.js +14 -0
- package/dist/src/librarian/getPolicy.js.map +1 -1
- package/dist/src/librarian/guards.d.ts +21 -0
- package/dist/src/librarian/guards.d.ts.map +1 -1
- package/dist/src/librarian/guards.js +21 -0
- package/dist/src/librarian/guards.js.map +1 -1
- package/dist/src/librarian/index.d.ts +32 -0
- package/dist/src/librarian/index.d.ts.map +1 -1
- package/dist/src/librarian/index.js +32 -0
- package/dist/src/librarian/index.js.map +1 -1
- package/dist/src/librarian/policy.d.ts +19 -0
- package/dist/src/librarian/policy.d.ts.map +1 -1
- package/dist/src/librarian/policy.js +19 -0
- package/dist/src/librarian/policy.js.map +1 -1
- package/dist/src/librarian/scoring.d.ts +10 -0
- package/dist/src/librarian/scoring.d.ts.map +1 -1
- package/dist/src/librarian/scoring.js +10 -0
- package/dist/src/librarian/scoring.js.map +1 -1
- package/dist/src/librarian/source-reliability.d.ts +15 -0
- package/dist/src/librarian/source-reliability.d.ts.map +1 -1
- package/dist/src/librarian/source-reliability.js +15 -0
- package/dist/src/librarian/source-reliability.js.map +1 -1
- package/dist/src/library/agent-registry.d.ts +17 -0
- package/dist/src/library/agent-registry.d.ts.map +1 -1
- package/dist/src/library/agent-registry.js +17 -0
- package/dist/src/library/agent-registry.js.map +1 -1
- package/dist/src/library/backends/chromaBackend.d.ts +17 -0
- package/dist/src/library/backends/chromaBackend.d.ts.map +1 -1
- package/dist/src/library/backends/chromaBackend.js +17 -0
- package/dist/src/library/backends/chromaBackend.js.map +1 -1
- package/dist/src/library/backends/index.d.ts +14 -0
- package/dist/src/library/backends/index.d.ts.map +1 -1
- package/dist/src/library/backends/index.js +14 -0
- package/dist/src/library/backends/index.js.map +1 -1
- package/dist/src/library/backends/pgvectorBackend.d.ts +16 -0
- package/dist/src/library/backends/pgvectorBackend.d.ts.map +1 -1
- package/dist/src/library/backends/pgvectorBackend.js +16 -0
- package/dist/src/library/backends/pgvectorBackend.js.map +1 -1
- package/dist/src/library/backends/qdrantBackend.d.ts +16 -0
- package/dist/src/library/backends/qdrantBackend.d.ts.map +1 -1
- package/dist/src/library/backends/qdrantBackend.js +24 -10
- package/dist/src/library/backends/qdrantBackend.js.map +1 -1
- package/dist/src/library/client.d.ts +22 -0
- package/dist/src/library/client.d.ts.map +1 -1
- package/dist/src/library/client.js +22 -0
- package/dist/src/library/client.js.map +1 -1
- package/dist/src/library/embeddings.d.ts +26 -0
- package/dist/src/library/embeddings.d.ts.map +1 -1
- package/dist/src/library/embeddings.js +26 -0
- package/dist/src/library/embeddings.js.map +1 -1
- package/dist/src/library/entity-resolution.d.ts +29 -0
- package/dist/src/library/entity-resolution.d.ts.map +1 -1
- package/dist/src/library/entity-resolution.js +29 -0
- package/dist/src/library/entity-resolution.js.map +1 -1
- package/dist/src/library/locks.d.ts +20 -0
- package/dist/src/library/locks.d.ts.map +1 -1
- package/dist/src/library/locks.js +20 -0
- package/dist/src/library/locks.js.map +1 -1
- package/dist/src/library/queries.d.ts +26 -1
- package/dist/src/library/queries.d.ts.map +1 -1
- package/dist/src/library/queries.js +25 -0
- package/dist/src/library/queries.js.map +1 -1
- package/dist/src/library/relationships.d.ts +17 -0
- package/dist/src/library/relationships.d.ts.map +1 -1
- package/dist/src/library/relationships.js +17 -0
- package/dist/src/library/relationships.js.map +1 -1
- package/dist/src/library/vectorBackend.d.ts +18 -0
- package/dist/src/library/vectorBackend.d.ts.map +1 -1
- package/dist/src/library/vectorBackend.js +18 -0
- package/dist/src/library/vectorBackend.js.map +1 -1
- package/dist/src/staff/archivistReasoning.d.ts +17 -0
- package/dist/src/staff/archivistReasoning.d.ts.map +1 -1
- package/dist/src/staff/archivistReasoning.js +17 -17
- package/dist/src/staff/archivistReasoning.js.map +1 -1
- package/dist/src/staff/council.d.ts +13 -0
- package/dist/src/staff/council.d.ts.map +1 -1
- package/dist/src/staff/council.js +13 -13
- package/dist/src/staff/council.js.map +1 -1
- package/dist/src/staff/subTurnLoop.d.ts +25 -0
- package/dist/src/staff/subTurnLoop.d.ts.map +1 -1
- package/dist/src/staff/subTurnLoop.js +25 -25
- package/dist/src/staff/subTurnLoop.js.map +1 -1
- package/dist/src/types.d.ts +8 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +8 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -87,15 +87,17 @@ Iranti is built around four internal Staff components that run alongside the hos
|
|
|
87
87
|
The Attendant runs in three phases — `pre-response`, `mid-turn`, and `post-response` — and returns a structured result each time. Beyond raw fact injection, every `attend` response carries:
|
|
88
88
|
|
|
89
89
|
- **`toolCallGuidance`** — when the host passes a pending tool call (`Read`, `Grep`, `Glob`, `Bash`, `WebSearch`, `WebFetch`), the Attendant derives entity hints from the tool args and emits a `shouldSkip` verdict when stored facts already cover the target. Hosts can gate tool execution on the verdict instead of string-matching notes.
|
|
90
|
-
- **`drift`** — detects when the latest message has diverged from the declared task topic. Emits the driving tokens so the host can surface a confirmation prompt.
|
|
90
|
+
- **`drift`** — detects when the latest message has diverged from the declared task topic. Emits the driving tokens so the host can surface a confirmation prompt. Suppressed when `checkpoint.currentStep` starts with `COMPLETE` — so a finished task does not produce spurious drift alarms as the conversation winds down.
|
|
91
91
|
- **`sessionObjective`** — derived from the task description or checkpoint continuation, threaded through every attend call as a stable anchor.
|
|
92
92
|
- **`autoCheckpointSignal`** — fires when pressure has built up (drift, turns-without-write, tool-cost threshold) so the host can checkpoint before the next risky step.
|
|
93
93
|
- **`refinementPass`** — when the first retrieval pass comes back empty, the Attendant runs a bounded widened-hint retry (max 1 extra observe call) and reports the outcome.
|
|
94
94
|
- **`subTurnLoopPlan`** — on `mid-turn` attends, when the host passes a `partialResponse` of the Attendant's own in-progress assistant output, the Attendant re-scores the partial against memory, harvests novel tokens and entity hints from the text, and fires one bounded extra observe call with the widened hints unioned onto the original ones. Net-new facts are deduped against the pre-retry baseline so repeat hits are dropped. Gated by phase, partial length, a once-per-turn budget, and a novelty check on the tokens. This is `refinementPass` re-applied on response progress rather than empty initial retrieval — the "most agentic" sub-turn loop from the M-series memo.
|
|
95
95
|
- **`attendantToolPlan`** — up to three planned follow-up tool calls (search_related, observe_entity, query) derived from brief entities, drift tokens, or the session objective. Deterministic and surfaced, never executed.
|
|
96
96
|
- **`councilConsultationPlan`** — proposes which peer Staff members the Attendant would consult for this turn (e.g. Librarian for source-reliability on a clear topic, Archivist when the injection surface has multiple low-confidence facts). Proposal only.
|
|
97
|
+
- **`usageGuidance`** — carries the MANDATORY protocol reminder block. Gated on compliance health: when all counters (`turnsWithoutWrite`, `consecutiveUnusedMemoryInjections`, etc.) are zero the reminder is suppressed so well-behaved agents do not pay the injection cost every turn.
|
|
97
98
|
- **`writeNudge`** — reminds the host to write a fact after substantial activity without a durable write.
|
|
98
99
|
- **`toolResultExtraction`** — on mid-turn/post-response, the Attendant extracts candidate facts from the tool result so the host can autowrite them.
|
|
100
|
+
- **`responseFileCapture`** — on `post-response`, the Attendant scans the assistant's reply for file paths, infers the action (`edited`/`created`/`read`) from the ±150-character context window around each match, and auto-writes `project/{id}/file/{basename}` facts so file-scoped memory is populated without host involvement. Result carries `autowriteBatchId`, `filesDetected`, `factsWritten`, `entities`, `skipped`, and `durationMs`. Only present on post-response attend calls.
|
|
99
101
|
|
|
100
102
|
### Archivist reasoning budget
|
|
101
103
|
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* CLI utility to create or rotate an iranti API key.
|
|
5
|
+
*
|
|
6
|
+
* Args: --key-id <id>, --owner <owner>, --scopes <csv>, --description <text>.
|
|
7
|
+
* Run: `npm run api-key:create -- --key-id <id> --owner <owner>`.
|
|
8
|
+
* Requires DATABASE_URL.
|
|
9
|
+
*/
|
|
3
10
|
require("dotenv/config");
|
|
4
11
|
const client_1 = require("../src/library/client");
|
|
5
12
|
const apiKeys_1 = require("../src/security/apiKeys");
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* CLI utility to list all registered iranti API keys.
|
|
5
|
+
*
|
|
6
|
+
* Prints keyId, owner, active status, scopes, and createdAt for each key.
|
|
7
|
+
* Run: `npm run api-key:list`. Requires DATABASE_URL.
|
|
8
|
+
*/
|
|
3
9
|
require("dotenv/config");
|
|
4
10
|
const client_1 = require("../src/library/client");
|
|
5
11
|
const apiKeys_1 = require("../src/security/apiKeys");
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* CLI utility to revoke an iranti API key by keyId.
|
|
5
|
+
*
|
|
6
|
+
* Args: --key-id <id> (alias: -k). Exits non-zero if the key is not found.
|
|
7
|
+
* Run: `npm run api-key:revoke -- --key-id <id>`. Requires DATABASE_URL.
|
|
8
|
+
*/
|
|
3
9
|
require("dotenv/config");
|
|
4
10
|
const client_1 = require("../src/library/client");
|
|
5
11
|
const apiKeys_1 = require("../src/security/apiKeys");
|
|
@@ -4,6 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.buildHookAdditionalContext = buildHookAdditionalContext;
|
|
7
|
+
/**
|
|
8
|
+
* Claude Code session lifecycle hook for iranti auto-memory.
|
|
9
|
+
*
|
|
10
|
+
* Called by the Claude Code harness on SessionStart, UserPromptSubmit,
|
|
11
|
+
* Stop, and PreCompact events via settings.json hooks configuration.
|
|
12
|
+
* Reads the event JSON from stdin, injects memory into context, and
|
|
13
|
+
* persists durable facts extracted from assistant responses.
|
|
14
|
+
*
|
|
15
|
+
* Requires DATABASE_URL or IRANTI_PROJECT_ENV / IRANTI_INSTANCE_ENV binding.
|
|
16
|
+
*/
|
|
7
17
|
require("dotenv/config");
|
|
8
18
|
const path_1 = __importDefault(require("path"));
|
|
9
19
|
const createFirstPartyIranti_1 = require("../src/lib/createFirstPartyIranti");
|
|
@@ -3,6 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/**
|
|
7
|
+
* Configures a project directory for Codex (OpenAI agent) integration with iranti.
|
|
8
|
+
*
|
|
9
|
+
* Writes AGENTS.md, .vscode/mcp.json, and hooks configuration so the Codex CLI
|
|
10
|
+
* automatically connects to this project's iranti instance.
|
|
11
|
+
* Run: `iranti codex-setup [project-dir]`.
|
|
12
|
+
*/
|
|
6
13
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
7
14
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
15
|
const commandInvocation_1 = require("../src/lib/commandInvocation");
|
|
@@ -4,6 +4,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
/**
|
|
8
|
+
* Main CLI entry point for the iranti binary.
|
|
9
|
+
*
|
|
10
|
+
* Provides commands: install, setup, configure, auth, doctor, run, attend,
|
|
11
|
+
* handshake, resolve, integrate, project-init, instance, status, upgrade,
|
|
12
|
+
* uninstall, issues, list-rules, delete-rule, and more.
|
|
13
|
+
*
|
|
14
|
+
* Run via `npx iranti <command>` or `iranti <command>` after global install.
|
|
15
|
+
* Requires DATABASE_URL or a project/instance binding for most commands.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Main CLI entry point for the iranti binary.
|
|
19
|
+
*
|
|
20
|
+
* Provides commands: install, setup, configure, auth, doctor, run, attend,
|
|
21
|
+
* handshake, resolve, integrate, project-init, instance, status, upgrade,
|
|
22
|
+
* uninstall, issues, list-rules, delete-rule, and more.
|
|
23
|
+
*
|
|
24
|
+
* Run via `npx iranti <command>` or `iranti <command>` after global install.
|
|
25
|
+
* Requires DATABASE_URL or a project/instance binding for most commands.
|
|
26
|
+
*/
|
|
7
27
|
const fs_1 = __importDefault(require("fs"));
|
|
8
28
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
29
|
const os_1 = __importDefault(require("os"));
|
|
@@ -36,6 +36,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
/**
|
|
40
|
+
* MCP (Model Context Protocol) server for iranti.
|
|
41
|
+
*
|
|
42
|
+
* Exposes iranti tools (iranti_handshake, iranti_attend, iranti_write, etc.)
|
|
43
|
+
* over stdio transport. Loaded by Claude Code, Codex, Copilot, and other
|
|
44
|
+
* MCP-aware agents via their MCP server configuration.
|
|
45
|
+
*
|
|
46
|
+
* Env: DATABASE_URL required. Optional: IRANTI_MCP_DEFAULT_AGENT,
|
|
47
|
+
* IRANTI_PROJECT_ENV, IRANTI_INSTANCE_ENV, IRANTI_MCP_AGENT_NAME.
|
|
48
|
+
*/
|
|
39
49
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
40
50
|
const node_path_1 = __importDefault(require("node:path"));
|
|
41
51
|
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
@@ -450,7 +460,7 @@ async function main() {
|
|
|
450
460
|
}
|
|
451
461
|
const server = new mcp_js_1.McpServer({
|
|
452
462
|
name: 'iranti-mcp',
|
|
453
|
-
version: '0.3.
|
|
463
|
+
version: '0.3.33',
|
|
454
464
|
});
|
|
455
465
|
server.registerTool('iranti_handshake', {
|
|
456
466
|
description: `Initialize or refresh an agent's working-memory brief for the current task.
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Seeds iranti with static codebase metadata facts (packages, database schema,
|
|
5
|
+
* architecture overview) to pre-populate a fresh instance with project context.
|
|
6
|
+
*
|
|
7
|
+
* Requires DATABASE_URL.
|
|
8
|
+
*/
|
|
3
9
|
require("dotenv/config");
|
|
4
10
|
const sdk_1 = require("../src/sdk");
|
|
5
11
|
async function seedCodebase() {
|
package/dist/scripts/seed.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Seeds initial operating rules for librarian, attendant, and archivist
|
|
5
|
+
* staff roles into the iranti knowledge base.
|
|
6
|
+
*
|
|
7
|
+
* Safe to re-run -- the Librarian pipeline deduplicates on (entityType, entityId, key).
|
|
8
|
+
* Must be run after setup.ts on a fresh database. Requires DATABASE_URL.
|
|
9
|
+
*/
|
|
3
10
|
require("dotenv/config");
|
|
4
11
|
const client_1 = require("../src/library/client");
|
|
5
12
|
const queries_1 = require("../src/library/queries");
|
package/dist/scripts/setup.js
CHANGED
|
@@ -3,6 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/**
|
|
7
|
+
* Database setup and migration runner for iranti.
|
|
8
|
+
*
|
|
9
|
+
* Creates the Prisma DB schema, runs pending migrations, seeds initial
|
|
10
|
+
* operating-rule data, and ensures escalation folders exist on disk.
|
|
11
|
+
*
|
|
12
|
+
* Run: `npm run setup` or `iranti setup`. Requires DATABASE_URL.
|
|
13
|
+
*/
|
|
6
14
|
require("dotenv/config");
|
|
7
15
|
const child_process_1 = require("child_process");
|
|
8
16
|
const fs_1 = __importDefault(require("fs"));
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archivist scheduler — drives periodic and file-watch-triggered maintenance.
|
|
3
|
+
*
|
|
4
|
+
* Wraps `iranti.runMaintenance()` in two trigger modes, both optional and
|
|
5
|
+
* independently enabled via env vars:
|
|
6
|
+
* - **Interval** (`IRANTI_ARCHIVIST_INTERVAL_MS`) — runs maintenance on a
|
|
7
|
+
* fixed timer. Set to 0 or omit to disable.
|
|
8
|
+
* - **Escalation watch** (`IRANTI_ARCHIVIST_WATCH`, default true) — uses
|
|
9
|
+
* `fs.watch` on the active escalation folder; fires a debounced maintenance
|
|
10
|
+
* run whenever a `.md` file changes (debounce: `IRANTI_ARCHIVIST_DEBOUNCE_MS`,
|
|
11
|
+
* default 60 s). Prevents redundant runs when multiple files are written rapidly.
|
|
12
|
+
*
|
|
13
|
+
* Maintenance runs are serialised — a `running` flag drops overlapping triggers
|
|
14
|
+
* into a single `pendingRun` that fires immediately after the current run ends.
|
|
15
|
+
*
|
|
16
|
+
* Returns a `SchedulerHandle` with `{ started, stop() }` so the server can
|
|
17
|
+
* cleanly shut down timers and the file watcher on exit.
|
|
18
|
+
*/
|
|
1
19
|
import { Iranti } from '../sdk';
|
|
2
20
|
type SchedulerHandle = {
|
|
3
21
|
stop: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archivistScheduler.d.ts","sourceRoot":"","sources":["../../../src/api/archivistScheduler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archivistScheduler.d.ts","sourceRoot":"","sources":["../../../src/api/archivistScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAgBF,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA4EtF"}
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Archivist scheduler — drives periodic and file-watch-triggered maintenance.
|
|
4
|
+
*
|
|
5
|
+
* Wraps `iranti.runMaintenance()` in two trigger modes, both optional and
|
|
6
|
+
* independently enabled via env vars:
|
|
7
|
+
* - **Interval** (`IRANTI_ARCHIVIST_INTERVAL_MS`) — runs maintenance on a
|
|
8
|
+
* fixed timer. Set to 0 or omit to disable.
|
|
9
|
+
* - **Escalation watch** (`IRANTI_ARCHIVIST_WATCH`, default true) — uses
|
|
10
|
+
* `fs.watch` on the active escalation folder; fires a debounced maintenance
|
|
11
|
+
* run whenever a `.md` file changes (debounce: `IRANTI_ARCHIVIST_DEBOUNCE_MS`,
|
|
12
|
+
* default 60 s). Prevents redundant runs when multiple files are written rapidly.
|
|
13
|
+
*
|
|
14
|
+
* Maintenance runs are serialised — a `running` flag drops overlapping triggers
|
|
15
|
+
* into a single `pendingRun` that fires immediately after the current run ends.
|
|
16
|
+
*
|
|
17
|
+
* Returns a `SchedulerHandle` with `{ started, stop() }` so the server can
|
|
18
|
+
* cleanly shut down timers and the file watcher on exit.
|
|
19
|
+
*/
|
|
2
20
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
21
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archivistScheduler.js","sourceRoot":"","sources":["../../../src/api/archivistScheduler.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"archivistScheduler.js","sourceRoot":"","sources":["../../../src/api/archivistScheduler.ts"],"names":[],"mappings":"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"}
|
package/dist/src/api/diag.d.ts
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-only: active-handle / active-request diagnostics for the iranti Express server.
|
|
3
|
+
*
|
|
4
|
+
* Starts a minimal Express server and a raw http.createServer on ports 3001/3002,
|
|
5
|
+
* then calls the Node.js internal `_getActiveHandles` / `_getActiveRequests` APIs
|
|
6
|
+
* to inspect what is keeping the event loop alive at each lifecycle stage.
|
|
7
|
+
*
|
|
8
|
+
* NOT shipped — run directly with ts-node for debugging graceful-shutdown hang issues.
|
|
9
|
+
* The `(process as NodeProcessInternal)` casts are intentional: these are private
|
|
10
|
+
* Node.js inspection APIs with no public TypeScript declarations.
|
|
11
|
+
*/
|
|
1
12
|
export {};
|
|
2
13
|
//# sourceMappingURL=diag.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diag.d.ts","sourceRoot":"","sources":["../../../src/api/diag.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"diag.d.ts","sourceRoot":"","sources":["../../../src/api/diag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
package/dist/src/api/diag.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dev-only: active-handle / active-request diagnostics for the iranti Express server.
|
|
4
|
+
*
|
|
5
|
+
* Starts a minimal Express server and a raw http.createServer on ports 3001/3002,
|
|
6
|
+
* then calls the Node.js internal `_getActiveHandles` / `_getActiveRequests` APIs
|
|
7
|
+
* to inspect what is keeping the event loop alive at each lifecycle stage.
|
|
8
|
+
*
|
|
9
|
+
* NOT shipped — run directly with ts-node for debugging graceful-shutdown hang issues.
|
|
10
|
+
* The `(process as NodeProcessInternal)` casts are intentional: these are private
|
|
11
|
+
* Node.js inspection APIs with no public TypeScript declarations.
|
|
12
|
+
*/
|
|
2
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
15
|
};
|
|
@@ -23,8 +34,9 @@ async function testExpress() {
|
|
|
23
34
|
console.log('Express listening on 3001');
|
|
24
35
|
logHandles('After Express listen');
|
|
25
36
|
// Check if server handle is ref'd
|
|
26
|
-
|
|
27
|
-
|
|
37
|
+
const serverWithHandle = server;
|
|
38
|
+
if (serverWithHandle._handle && typeof serverWithHandle._handle.hasRef === 'function') {
|
|
39
|
+
console.log(`Server handle hasRef: ${serverWithHandle._handle.hasRef()}`);
|
|
28
40
|
}
|
|
29
41
|
// Wait a bit and check again
|
|
30
42
|
setTimeout(() => {
|
package/dist/src/api/diag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diag.js","sourceRoot":"","sources":["../../../src/api/diag.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"diag.js","sourceRoot":"","sources":["../../../src/api/diag.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;AAEH,sDAA8B;AAC9B,gDAAwB;AAaxB,SAAS,UAAU,CAAC,KAAa;IAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;IAChC,MAAM,OAAO,GAAI,OAA+B,CAAC,iBAAiB,EAAE,CAAC;IACrE,MAAM,QAAQ,GAAI,OAA+B,CAAC,kBAAkB,EAAE,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,WAAW;IACtB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;IACtB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAEnC,kCAAkC;QAClC,MAAM,gBAAgB,GAAG,MAA0B,CAAC;QACpD,IAAI,gBAAgB,CAAC,OAAO,IAAI,OAAO,gBAAgB,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,yBAAyB,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,6BAA6B;QAC7B,UAAU,CAAC,GAAG,EAAE;YACZ,UAAU,CAAC,oBAAoB,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;QAClB,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,WAAW;IAChB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,UAAU,CAAC,uBAAuB,CAAC,CAAC;QAEpC,UAAU,CAAC,GAAG,EAAE;YACZ,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACvC,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;AACP,CAAC;AAED,UAAU,CAAC,SAAS,CAAC,CAAC;AACtB,WAAW,EAAE,CAAC"}
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health check state and vector backend monitor for iranti's API server.
|
|
3
|
+
*
|
|
4
|
+
* Provides lightweight, side-effect-free helpers used by `server.ts` to
|
|
5
|
+
* build and maintain the `/health` response:
|
|
6
|
+
*
|
|
7
|
+
* - `createHealthCheckState(initial)` — factory for a mutable `HealthCheckState`
|
|
8
|
+
* object that `server.ts` updates as probes complete
|
|
9
|
+
* - `deriveOperatorStatus(context)` — computes `'ok' | 'degraded'` from the
|
|
10
|
+
* combination of runtime authority source, metadata health, and vector backend
|
|
11
|
+
* health; degraded when any critical check has failed
|
|
12
|
+
* - `createVectorBackendMonitor(options)` — starts an interval-based probe loop
|
|
13
|
+
* against the vector backend's `ping()`. Updates a shared `HealthCheckState`
|
|
14
|
+
* on each probe result and calls `logError` on failure. Returns `{ probe,
|
|
15
|
+
* start, stop }` so the server can control the monitor lifecycle.
|
|
16
|
+
*
|
|
17
|
+
* Designed for testability: `setIntervalImpl` / `clearIntervalImpl` overrides
|
|
18
|
+
* allow tests to inject fake timers without patching globals.
|
|
19
|
+
*/
|
|
1
20
|
export type HealthCheckState = {
|
|
2
21
|
checked: boolean;
|
|
3
22
|
ok: boolean;
|
|
@@ -1 +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"}
|
|
1
|
+
{"version":3,"file":"healthChecks.d.ts","sourceRoot":"","sources":["../../../src/api/healthChecks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,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"}
|
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Health check state and vector backend monitor for iranti's API server.
|
|
4
|
+
*
|
|
5
|
+
* Provides lightweight, side-effect-free helpers used by `server.ts` to
|
|
6
|
+
* build and maintain the `/health` response:
|
|
7
|
+
*
|
|
8
|
+
* - `createHealthCheckState(initial)` — factory for a mutable `HealthCheckState`
|
|
9
|
+
* object that `server.ts` updates as probes complete
|
|
10
|
+
* - `deriveOperatorStatus(context)` — computes `'ok' | 'degraded'` from the
|
|
11
|
+
* combination of runtime authority source, metadata health, and vector backend
|
|
12
|
+
* health; degraded when any critical check has failed
|
|
13
|
+
* - `createVectorBackendMonitor(options)` — starts an interval-based probe loop
|
|
14
|
+
* against the vector backend's `ping()`. Updates a shared `HealthCheckState`
|
|
15
|
+
* on each probe result and calls `logError` on failure. Returns `{ probe,
|
|
16
|
+
* start, stop }` so the server can control the monitor lifecycle.
|
|
17
|
+
*
|
|
18
|
+
* Designed for testability: `setIntervalImpl` / `clearIntervalImpl` overrides
|
|
19
|
+
* allow tests to inject fake timers without patching globals.
|
|
20
|
+
*/
|
|
2
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
22
|
exports.createHealthCheckState = createHealthCheckState;
|
|
4
23
|
exports.deriveOperatorStatus = deriveOperatorStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"healthChecks.js","sourceRoot":"","sources":["../../../src/api/healthChecks.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"healthChecks.js","sourceRoot":"","sources":["../../../src/api/healthChecks.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;AA0BH,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"}
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iranti API authentication middleware.
|
|
3
|
+
*
|
|
4
|
+
* Validates requests against iranti's own API key store (not Auth.js or any
|
|
5
|
+
* third-party auth system). Accepts the key via two header forms:
|
|
6
|
+
* - `X-Iranti-Key: <key>` — preferred
|
|
7
|
+
* - `Authorization: Bearer <key>` — compat with standard tooling
|
|
8
|
+
*
|
|
9
|
+
* On success, attaches `req.irantiAuth` (`IrantiAuthContext`) with the key's
|
|
10
|
+
* `keyId`, `owner`, `mode`, and `scopes` so downstream authorization middleware
|
|
11
|
+
* can gate specific operations without re-querying the key store.
|
|
12
|
+
*
|
|
13
|
+
* On failure (missing or invalid key), responds 401. Uses the `Express.Request`
|
|
14
|
+
* global augmentation so TypeScript sees `req.irantiAuth` without casts.
|
|
15
|
+
*/
|
|
1
16
|
import { Request, Response, NextFunction } from 'express';
|
|
2
17
|
export interface IrantiAuthContext {
|
|
3
18
|
mode: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/api/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,OAAO,CAAC;QACd,UAAU,OAAO;YACb,UAAU,CAAC,EAAE,iBAAiB,CAAC;SAClC;KACJ;CACJ;AAmBD,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjG"}
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/api/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,OAAO,CAAC;QACd,UAAU,OAAO;YACb,UAAU,CAAC,EAAE,iBAAiB,CAAC;SAClC;KACJ;CACJ;AAmBD,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjG"}
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* iranti API authentication middleware.
|
|
4
|
+
*
|
|
5
|
+
* Validates requests against iranti's own API key store (not Auth.js or any
|
|
6
|
+
* third-party auth system). Accepts the key via two header forms:
|
|
7
|
+
* - `X-Iranti-Key: <key>` — preferred
|
|
8
|
+
* - `Authorization: Bearer <key>` — compat with standard tooling
|
|
9
|
+
*
|
|
10
|
+
* On success, attaches `req.irantiAuth` (`IrantiAuthContext`) with the key's
|
|
11
|
+
* `keyId`, `owner`, `mode`, and `scopes` so downstream authorization middleware
|
|
12
|
+
* can gate specific operations without re-querying the key store.
|
|
13
|
+
*
|
|
14
|
+
* On failure (missing or invalid key), responds 401. Uses the `Express.Request`
|
|
15
|
+
* global augmentation so TypeScript sees `req.irantiAuth` without casts.
|
|
16
|
+
*/
|
|
2
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
18
|
exports.authenticate = authenticate;
|
|
4
19
|
const apiKeys_1 = require("../../security/apiKeys");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/api/middleware/auth.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/api/middleware/auth.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAqCH,oCAiBC;AAnDD,oDAAwD;AAiBxD,SAAS,aAAa,CAAC,GAAY;IAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACzE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACpE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC9E,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAc,EAAC,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,oDAAoD,EAAE,CAAC,CAAC;QACvH,OAAO;IACX,CAAC;IAED,GAAG,CAAC,UAAU,GAAG;QACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,UAAU;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC;KACjC,CAAC;IAEF,IAAI,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iranti API authorization middleware — scope-based access control.
|
|
3
|
+
*
|
|
4
|
+
* Enforces which operations an API key is allowed to perform based on the
|
|
5
|
+
* `scopes` array populated by the auth middleware. Scope formats follow the
|
|
6
|
+
* `family:action` pattern (e.g. `knowledge:read`, `memory:write`).
|
|
7
|
+
*
|
|
8
|
+
* Exported middleware factories:
|
|
9
|
+
* - `requireAnyScope(scopes)` — passes if the key holds at least one of the
|
|
10
|
+
* listed scopes (global or family match)
|
|
11
|
+
* - `requireScopeByMethod(readScope, writeScope)` — infers required scope
|
|
12
|
+
* from HTTP method (GET/HEAD/OPTIONS → read, else → write)
|
|
13
|
+
* - `requireScopeFamilyByMethod(readFamily, writeFamily)` — same but family
|
|
14
|
+
* prefix matching (e.g. `knowledge` matches `knowledge:read`)
|
|
15
|
+
* - `requireEntityScopeByMethod(extractor, readScope, writeScope)` — combines
|
|
16
|
+
* method-based scope inference with entity-level access checks via
|
|
17
|
+
* `evaluateEntityScopeAccess` (supports entity-scoped API keys)
|
|
18
|
+
*/
|
|
1
19
|
import { NextFunction, Request, Response } from 'express';
|
|
2
20
|
export interface EntityTarget {
|
|
3
21
|
entityType: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../../../src/api/middleware/authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG1D,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,YAAY,GAAG,YAAY,EAAE,CAAC;AA6BvE,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,IAG5C,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAkBjE;AAED,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,IAGlD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAkBjE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAC9D,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAIjE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IACpE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAIjE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,IACtG,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAkCjE"}
|
|
1
|
+
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../../../src/api/middleware/authorization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG1D,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,YAAY,GAAG,YAAY,EAAE,CAAC;AA6BvE,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,IAG5C,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAkBjE;AAED,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,IAGlD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAkBjE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAC9D,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAIjE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IACpE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAIjE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,IACtG,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAkCjE"}
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* iranti API authorization middleware — scope-based access control.
|
|
4
|
+
*
|
|
5
|
+
* Enforces which operations an API key is allowed to perform based on the
|
|
6
|
+
* `scopes` array populated by the auth middleware. Scope formats follow the
|
|
7
|
+
* `family:action` pattern (e.g. `knowledge:read`, `memory:write`).
|
|
8
|
+
*
|
|
9
|
+
* Exported middleware factories:
|
|
10
|
+
* - `requireAnyScope(scopes)` — passes if the key holds at least one of the
|
|
11
|
+
* listed scopes (global or family match)
|
|
12
|
+
* - `requireScopeByMethod(readScope, writeScope)` — infers required scope
|
|
13
|
+
* from HTTP method (GET/HEAD/OPTIONS → read, else → write)
|
|
14
|
+
* - `requireScopeFamilyByMethod(readFamily, writeFamily)` — same but family
|
|
15
|
+
* prefix matching (e.g. `knowledge` matches `knowledge:read`)
|
|
16
|
+
* - `requireEntityScopeByMethod(extractor, readScope, writeScope)` — combines
|
|
17
|
+
* method-based scope inference with entity-level access checks via
|
|
18
|
+
* `evaluateEntityScopeAccess` (supports entity-scoped API keys)
|
|
19
|
+
*/
|
|
2
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
21
|
exports.requireAnyScope = requireAnyScope;
|
|
4
22
|
exports.requireAnyScopeFamily = requireAnyScopeFamily;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.js","sourceRoot":"","sources":["../../../../src/api/middleware/authorization.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"authorization.js","sourceRoot":"","sources":["../../../../src/api/middleware/authorization.ts"],"names":[],"mappings":"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"}
|