@remnic/core 9.7.1 → 9.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-admin-ops-surface.d.ts +6 -6
- package/dist/access-admin-ops-surface.js +7 -7
- package/dist/access-boundary.d.ts +6 -6
- package/dist/access-boundary.js +8 -8
- package/dist/access-cli.js +31 -31
- package/dist/access-http.d.ts +15 -6
- package/dist/access-http.js +12 -12
- package/dist/access-identity-continuity-surface.d.ts +5 -5
- package/dist/access-identity-continuity-surface.js +7 -7
- package/dist/access-lcm-surface.d.ts +6 -6
- package/dist/access-lcm-surface.js +7 -7
- package/dist/access-mcp.d.ts +6 -6
- package/dist/access-mcp.js +11 -11
- package/dist/access-observe-write-surface.d.ts +6 -6
- package/dist/access-observe-write-surface.js +7 -7
- package/dist/access-operations-batch.js +9 -9
- package/dist/access-operations.d.ts +6 -6
- package/dist/access-operations.js +10 -10
- package/dist/access-recall-surface.d.ts +6 -6
- package/dist/access-recall-surface.js +7 -7
- package/dist/{access-service-CJ5hrLqR.d.ts → access-service-CxDZXTKt.d.ts} +4 -4
- package/dist/access-service.d.ts +6 -6
- package/dist/access-service.js +7 -7
- package/dist/access-surface-catalog.d.ts +6 -6
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +5 -5
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +3 -3
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-XCOyxXKw.d.ts → catalog-DzU9HowE.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +4 -4
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-DDHT5J5M.js → chunk-64ZYEO3L.js} +6 -6
- package/dist/{chunk-QFOLNA2C.js → chunk-6C35R7P4.js} +2 -2
- package/dist/{chunk-PUPQ2PMC.js → chunk-74MJH7I3.js} +2 -2
- package/dist/{chunk-AWHOZTF6.js → chunk-AD2KK5MT.js} +2 -2
- package/dist/{chunk-RZEJDF3S.js → chunk-AH3M6F4X.js} +2 -2
- package/dist/{chunk-NS4GEMLR.js → chunk-AJWAIX2V.js} +3 -3
- package/dist/{chunk-RQTCDICG.js → chunk-CRFTLUWT.js} +2 -2
- package/dist/{chunk-BLXNPBJI.js → chunk-DQPPRXFO.js} +2 -2
- package/dist/{chunk-DSWYYEIK.js → chunk-EJCVMPIM.js} +12 -2
- package/dist/chunk-EJCVMPIM.js.map +1 -0
- package/dist/{chunk-CBOHQNTJ.js → chunk-FBE5UNB4.js} +2 -2
- package/dist/{chunk-KWJP22WP.js → chunk-FZO5U3OX.js} +7 -7
- package/dist/{chunk-ARD5NE4M.js → chunk-HQQLX2TR.js} +3 -3
- package/dist/{chunk-4YUPLX7U.js → chunk-HXDKC3BI.js} +2 -2
- package/dist/{chunk-QMUERLZK.js → chunk-JO5AT6QT.js} +1 -1
- package/dist/chunk-JO5AT6QT.js.map +1 -0
- package/dist/{chunk-NGJT7IW5.js → chunk-KKYNAODQ.js} +15 -15
- package/dist/{chunk-QRYNEVHP.js → chunk-KTOH7EJE.js} +2 -2
- package/dist/{chunk-GWMTFDHF.js → chunk-LKIVJNJU.js} +2 -2
- package/dist/{chunk-Y4EMHIQ5.js → chunk-LKVNBJDN.js} +11 -7
- package/dist/chunk-LKVNBJDN.js.map +1 -0
- package/dist/{chunk-VD56CJRR.js → chunk-O3BZ6PFY.js} +2 -2
- package/dist/{chunk-ZXUG3AFP.js → chunk-PKGWJFNR.js} +2 -2
- package/dist/{chunk-UKA7GNI2.js → chunk-QDCJNRKK.js} +3 -3
- package/dist/{chunk-FMECZFUT.js → chunk-R2SJDIPO.js} +2 -2
- package/dist/{chunk-WGE3OYC3.js → chunk-TGX2TY5S.js} +4 -4
- package/dist/{chunk-53Y3TETS.js → chunk-TVRPRFUB.js} +2 -2
- package/dist/{chunk-O24E5CFS.js → chunk-TZJVTH3F.js} +3 -3
- package/dist/{chunk-X6FSCBJZ.js → chunk-UTPNIGMA.js} +21 -17
- package/dist/chunk-UTPNIGMA.js.map +1 -0
- package/dist/{chunk-Z3HJ5L3Z.js → chunk-UVIQHSS7.js} +2 -2
- package/dist/{chunk-HT2DQ27U.js → chunk-UYZUJ4EB.js} +2 -2
- package/dist/{chunk-E47TABDR.js → chunk-WKE4VXSZ.js} +2 -2
- package/dist/{chunk-D6KNJRGX.js → chunk-ZUFJ7ZTR.js} +2 -2
- package/dist/{chunk-PML3GU4Q.js → chunk-ZW6OKHVX.js} +2 -2
- package/dist/{cli-CtECZr1q.d.ts → cli-BqyGVyOe.d.ts} +9 -5
- package/dist/cli.d.ts +8 -8
- package/dist/cli.js +25 -25
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +3 -3
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +3 -3
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +3 -3
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +2 -2
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +3 -3
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +5 -5
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/index.js +31 -31
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +3 -3
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
- package/dist/maintenance/rebuild-memory-projection.js +4 -4
- package/dist/mcp-memory-inspector-app.d.ts +6 -6
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +4 -4
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +3 -3
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +2 -2
- package/dist/operator-toolkit.js +8 -8
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +2 -2
- package/dist/orchestration/maintenance.js +5 -5
- package/dist/{orchestrator-CKctWsw9.d.ts → orchestrator-37Cx7yyw.d.ts} +4 -4
- package/dist/orchestrator.d.ts +5 -5
- package/dist/orchestrator.js +31 -31
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-BWwGIys5.d.ts → pipeline-C6onljHc.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/{qmd-DFuUrBWW.d.ts → qmd-J08G7MEm.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +2 -2
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/index.d.ts +1 -1
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-1Wlr7NWL.d.ts → semantic-consolidation-BFtoVosl.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +4 -4
- package/dist/semantic-rule-promotion.js +3 -3
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +3 -3
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/{storage-BQwP90sb.d.ts → storage-CXjwBr69.d.ts} +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +2 -2
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-DgIkyAsK.d.ts → types-DpxqC8dI.d.ts} +4 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +3 -3
- package/package.json +2 -2
- package/src/access-http.ts +27 -2
- package/src/cli.ts +8 -0
- package/src/config.ts +10 -0
- package/src/types.ts +4 -0
- package/dist/chunk-DSWYYEIK.js.map +0 -1
- package/dist/chunk-QMUERLZK.js.map +0 -1
- package/dist/chunk-X6FSCBJZ.js.map +0 -1
- package/dist/chunk-Y4EMHIQ5.js.map +0 -1
- /package/dist/{chunk-DDHT5J5M.js.map → chunk-64ZYEO3L.js.map} +0 -0
- /package/dist/{chunk-QFOLNA2C.js.map → chunk-6C35R7P4.js.map} +0 -0
- /package/dist/{chunk-PUPQ2PMC.js.map → chunk-74MJH7I3.js.map} +0 -0
- /package/dist/{chunk-AWHOZTF6.js.map → chunk-AD2KK5MT.js.map} +0 -0
- /package/dist/{chunk-RZEJDF3S.js.map → chunk-AH3M6F4X.js.map} +0 -0
- /package/dist/{chunk-NS4GEMLR.js.map → chunk-AJWAIX2V.js.map} +0 -0
- /package/dist/{chunk-RQTCDICG.js.map → chunk-CRFTLUWT.js.map} +0 -0
- /package/dist/{chunk-BLXNPBJI.js.map → chunk-DQPPRXFO.js.map} +0 -0
- /package/dist/{chunk-CBOHQNTJ.js.map → chunk-FBE5UNB4.js.map} +0 -0
- /package/dist/{chunk-KWJP22WP.js.map → chunk-FZO5U3OX.js.map} +0 -0
- /package/dist/{chunk-ARD5NE4M.js.map → chunk-HQQLX2TR.js.map} +0 -0
- /package/dist/{chunk-4YUPLX7U.js.map → chunk-HXDKC3BI.js.map} +0 -0
- /package/dist/{chunk-NGJT7IW5.js.map → chunk-KKYNAODQ.js.map} +0 -0
- /package/dist/{chunk-QRYNEVHP.js.map → chunk-KTOH7EJE.js.map} +0 -0
- /package/dist/{chunk-GWMTFDHF.js.map → chunk-LKIVJNJU.js.map} +0 -0
- /package/dist/{chunk-VD56CJRR.js.map → chunk-O3BZ6PFY.js.map} +0 -0
- /package/dist/{chunk-ZXUG3AFP.js.map → chunk-PKGWJFNR.js.map} +0 -0
- /package/dist/{chunk-UKA7GNI2.js.map → chunk-QDCJNRKK.js.map} +0 -0
- /package/dist/{chunk-FMECZFUT.js.map → chunk-R2SJDIPO.js.map} +0 -0
- /package/dist/{chunk-WGE3OYC3.js.map → chunk-TGX2TY5S.js.map} +0 -0
- /package/dist/{chunk-53Y3TETS.js.map → chunk-TVRPRFUB.js.map} +0 -0
- /package/dist/{chunk-O24E5CFS.js.map → chunk-TZJVTH3F.js.map} +0 -0
- /package/dist/{chunk-Z3HJ5L3Z.js.map → chunk-UVIQHSS7.js.map} +0 -0
- /package/dist/{chunk-HT2DQ27U.js.map → chunk-UYZUJ4EB.js.map} +0 -0
- /package/dist/{chunk-E47TABDR.js.map → chunk-WKE4VXSZ.js.map} +0 -0
- /package/dist/{chunk-D6KNJRGX.js.map → chunk-ZUFJ7ZTR.js.map} +0 -0
- /package/dist/{chunk-PML3GU4Q.js.map → chunk-ZW6OKHVX.js.map} +0 -0
package/dist/verified-recall.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
compareVerifiedEpisodeResults,
|
|
3
3
|
searchVerifiedEpisodes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-R2SJDIPO.js";
|
|
5
5
|
import "./chunk-2A3OXAP2.js";
|
|
6
6
|
import "./chunk-ZBJMUXZH.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-KTOH7EJE.js";
|
|
8
8
|
import "./chunk-B3ABVQ36.js";
|
|
9
9
|
import "./chunk-L2B3EE7B.js";
|
|
10
10
|
import "./chunk-5UZXUTVO.js";
|
|
@@ -15,7 +15,7 @@ import "./chunk-J6A3CX5N.js";
|
|
|
15
15
|
import "./chunk-4KJLYTLS.js";
|
|
16
16
|
import "./chunk-SVOZFLIQ.js";
|
|
17
17
|
import "./chunk-LTJAMRGI.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-JO5AT6QT.js";
|
|
19
19
|
import "./chunk-RHOZ5LLO.js";
|
|
20
20
|
import "./chunk-RL6NEVXT.js";
|
|
21
21
|
import "./chunk-AWJ2FHCF.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/core",
|
|
3
|
-
"version": "9.7.
|
|
3
|
+
"version": "9.7.3",
|
|
4
4
|
"description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -3000,7 +3000,7 @@
|
|
|
3000
3000
|
"core"
|
|
3001
3001
|
],
|
|
3002
3002
|
"peerDependencies": {
|
|
3003
|
-
"@remnic/coding-graph": "^9.7.
|
|
3003
|
+
"@remnic/coding-graph": "^9.7.3"
|
|
3004
3004
|
},
|
|
3005
3005
|
"peerDependenciesMeta": {
|
|
3006
3006
|
"@remnic/coding-graph": {
|
package/src/access-http.ts
CHANGED
|
@@ -86,6 +86,13 @@ export interface EngramAccessHttpServerOptions {
|
|
|
86
86
|
tokenPathPolicy?: (connector: string, pathname: string | undefined) => boolean;
|
|
87
87
|
principal?: string;
|
|
88
88
|
maxBodyBytes?: number;
|
|
89
|
+
/**
|
|
90
|
+
* Max non-replayed write requests per rolling window before 429
|
|
91
|
+
* `write_rate_limited` (issue #1937). Positive integer; defaults to 30.
|
|
92
|
+
*/
|
|
93
|
+
writeRateLimitMaxRequests?: number;
|
|
94
|
+
/** Rolling window for the write rate limit, in ms. Positive integer; defaults to 60000. */
|
|
95
|
+
writeRateLimitWindowMs?: number;
|
|
89
96
|
adminConsoleEnabled?: boolean;
|
|
90
97
|
adminConsolePublicDir?: string;
|
|
91
98
|
/** Inject the primary auth token into the admin console shell for trusted launch surfaces. */
|
|
@@ -206,6 +213,8 @@ function resolveDefaultAdminConsolePublicDir(): string {
|
|
|
206
213
|
const defaultAdminConsolePublicDir = resolveDefaultAdminConsolePublicDir();
|
|
207
214
|
const correlationIdStore = new AsyncLocalStorage<string>();
|
|
208
215
|
|
|
216
|
+
// Defaults for the write rate limit; overridable per instance via
|
|
217
|
+
// `writeRateLimitWindowMs` / `writeRateLimitMaxRequests` (issue #1937).
|
|
209
218
|
const WRITE_RATE_LIMIT_WINDOW_MS = 60_000;
|
|
210
219
|
const WRITE_RATE_LIMIT_MAX_REQUESTS = 30;
|
|
211
220
|
const TRUST_ZONE_RECORD_KINDS = ["memory", "artifact", "state", "trajectory", "external"] as const;
|
|
@@ -370,6 +379,8 @@ export class EngramAccessHttpServer {
|
|
|
370
379
|
ctx: { authorized: boolean },
|
|
371
380
|
) => Promise<boolean>;
|
|
372
381
|
private readonly writeRequestTimestamps: number[] = [];
|
|
382
|
+
private readonly writeRateLimitMaxRequests: number;
|
|
383
|
+
private readonly writeRateLimitWindowMs: number;
|
|
373
384
|
private readonly mcpServer: EngramMcpServer;
|
|
374
385
|
private server: Server | null = null;
|
|
375
386
|
private boundPort = 0;
|
|
@@ -406,6 +417,20 @@ export class EngramAccessHttpServer {
|
|
|
406
417
|
this.maxBodyBytes = Number.isFinite(options.maxBodyBytes)
|
|
407
418
|
? Math.max(1, Math.floor(options.maxBodyBytes ?? 131072))
|
|
408
419
|
: 131072;
|
|
420
|
+
// Defensive inline validation (config parsers reject invalid values
|
|
421
|
+
// loudly upstream; this only guards direct programmatic constructions).
|
|
422
|
+
this.writeRateLimitMaxRequests =
|
|
423
|
+
typeof options.writeRateLimitMaxRequests === "number" &&
|
|
424
|
+
Number.isInteger(options.writeRateLimitMaxRequests) &&
|
|
425
|
+
options.writeRateLimitMaxRequests >= 1
|
|
426
|
+
? options.writeRateLimitMaxRequests
|
|
427
|
+
: WRITE_RATE_LIMIT_MAX_REQUESTS;
|
|
428
|
+
this.writeRateLimitWindowMs =
|
|
429
|
+
typeof options.writeRateLimitWindowMs === "number" &&
|
|
430
|
+
Number.isInteger(options.writeRateLimitWindowMs) &&
|
|
431
|
+
options.writeRateLimitWindowMs >= 1
|
|
432
|
+
? options.writeRateLimitWindowMs
|
|
433
|
+
: WRITE_RATE_LIMIT_WINDOW_MS;
|
|
409
434
|
this.adminConsoleEnabled = options.adminConsoleEnabled !== false;
|
|
410
435
|
this.adminConsolePublicDir = options.adminConsolePublicDir ?? defaultAdminConsolePublicDir;
|
|
411
436
|
this.adminConsolePrefillToken = options.adminConsolePrefillToken === true ? this.authToken : undefined;
|
|
@@ -3674,11 +3699,11 @@ export class EngramAccessHttpServer {
|
|
|
3674
3699
|
const now = Date.now();
|
|
3675
3700
|
while (
|
|
3676
3701
|
this.writeRequestTimestamps.length > 0 &&
|
|
3677
|
-
now - (this.writeRequestTimestamps[0] ?? 0) >
|
|
3702
|
+
now - (this.writeRequestTimestamps[0] ?? 0) > this.writeRateLimitWindowMs
|
|
3678
3703
|
) {
|
|
3679
3704
|
this.writeRequestTimestamps.shift();
|
|
3680
3705
|
}
|
|
3681
|
-
if (this.writeRequestTimestamps.length >=
|
|
3706
|
+
if (this.writeRequestTimestamps.length >= this.writeRateLimitMaxRequests) {
|
|
3682
3707
|
throw new HttpError(429, "write_rate_limited", "write_rate_limited");
|
|
3683
3708
|
}
|
|
3684
3709
|
}
|
package/src/cli.ts
CHANGED
|
@@ -747,6 +747,8 @@ export interface AccessHttpServeCliCommandOptions {
|
|
|
747
747
|
authToken?: string;
|
|
748
748
|
principal?: string;
|
|
749
749
|
maxBodyBytes?: number;
|
|
750
|
+
writeRateLimitMaxRequests?: number;
|
|
751
|
+
writeRateLimitWindowMs?: number;
|
|
750
752
|
trustPrincipalHeader?: boolean;
|
|
751
753
|
citationsEnabled?: boolean;
|
|
752
754
|
citationsAutoDetect?: boolean;
|
|
@@ -758,6 +760,8 @@ export interface AccessHttpServeCliCommandOptions {
|
|
|
758
760
|
authToken?: string;
|
|
759
761
|
principal?: string;
|
|
760
762
|
maxBodyBytes?: number;
|
|
763
|
+
writeRateLimitMaxRequests?: number;
|
|
764
|
+
writeRateLimitWindowMs?: number;
|
|
761
765
|
trustPrincipalHeader?: boolean;
|
|
762
766
|
citationsEnabled?: boolean;
|
|
763
767
|
citationsAutoDetect?: boolean;
|
|
@@ -2749,6 +2753,8 @@ export async function runAccessHttpServeCliCommand(
|
|
|
2749
2753
|
authToken: input.authToken,
|
|
2750
2754
|
principal: input.principal,
|
|
2751
2755
|
maxBodyBytes: input.maxBodyBytes,
|
|
2756
|
+
writeRateLimitMaxRequests: input.writeRateLimitMaxRequests,
|
|
2757
|
+
writeRateLimitWindowMs: input.writeRateLimitWindowMs,
|
|
2752
2758
|
trustPrincipalHeader: input.trustPrincipalHeader,
|
|
2753
2759
|
citationsEnabled: input.citationsEnabled,
|
|
2754
2760
|
citationsAutoDetect: input.citationsAutoDetect,
|
|
@@ -6821,6 +6827,8 @@ export function registerCli(
|
|
|
6821
6827
|
authToken: cliTokenOverride ?? resolvedConfigAuthToken,
|
|
6822
6828
|
principal: resolveAccessPrincipalOverride(options.principal, orchestrator.config.agentAccessHttp.principal),
|
|
6823
6829
|
maxBodyBytes: Number.isFinite(maxBodyBytesRaw) ? maxBodyBytesRaw : 131072,
|
|
6830
|
+
writeRateLimitMaxRequests: orchestrator.config.agentAccessHttp.writeRateLimitMaxRequests,
|
|
6831
|
+
writeRateLimitWindowMs: orchestrator.config.agentAccessHttp.writeRateLimitWindowMs,
|
|
6824
6832
|
trustPrincipalHeader: options.trustPrincipalHeader === true,
|
|
6825
6833
|
citationsEnabled: resolveConversationContextCapabilities(orchestrator.config).citations,
|
|
6826
6834
|
citationsAutoDetect: orchestrator.config.citationsAutoDetect,
|
package/src/config.ts
CHANGED
|
@@ -1515,6 +1515,16 @@ export function parseConfig(
|
|
|
1515
1515
|
typeof rawAgentAccessHttp?.maxBodyBytes === "number"
|
|
1516
1516
|
? Math.max(1, Math.floor(rawAgentAccessHttp.maxBodyBytes))
|
|
1517
1517
|
: 131072,
|
|
1518
|
+
writeRateLimitMaxRequests: resolvePositiveIntegerConfig(
|
|
1519
|
+
rawAgentAccessHttp?.writeRateLimitMaxRequests,
|
|
1520
|
+
30,
|
|
1521
|
+
"agentAccessHttp.writeRateLimitMaxRequests",
|
|
1522
|
+
),
|
|
1523
|
+
writeRateLimitWindowMs: resolvePositiveIntegerConfig(
|
|
1524
|
+
rawAgentAccessHttp?.writeRateLimitWindowMs,
|
|
1525
|
+
60_000,
|
|
1526
|
+
"agentAccessHttp.writeRateLimitWindowMs",
|
|
1527
|
+
),
|
|
1518
1528
|
};
|
|
1519
1529
|
|
|
1520
1530
|
let baseUrl: string | undefined;
|
package/src/types.ts
CHANGED
|
@@ -255,6 +255,10 @@ export interface AgentAccessHttpConfig {
|
|
|
255
255
|
authToken?: AgentAccessAuthToken;
|
|
256
256
|
principal?: string;
|
|
257
257
|
maxBodyBytes: number;
|
|
258
|
+
/** Max write requests per rolling window before 429 write_rate_limited (issue #1937). */
|
|
259
|
+
writeRateLimitMaxRequests: number;
|
|
260
|
+
/** Rolling window for the write rate limit, in ms (issue #1937). */
|
|
261
|
+
writeRateLimitWindowMs: number;
|
|
258
262
|
}
|
|
259
263
|
|
|
260
264
|
export interface DreamingConfig {
|