@nacre.work/core 0.0.0

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.
Files changed (90) hide show
  1. package/README.md +3 -0
  2. package/dist/authz/cache.d.ts +54 -0
  3. package/dist/authz/cache.d.ts.map +1 -0
  4. package/dist/authz/cache.js +63 -0
  5. package/dist/authz/cache.js.map +1 -0
  6. package/dist/authz/filter.d.ts +60 -0
  7. package/dist/authz/filter.d.ts.map +1 -0
  8. package/dist/authz/filter.js +54 -0
  9. package/dist/authz/filter.js.map +1 -0
  10. package/dist/authz/index.d.ts +15 -0
  11. package/dist/authz/index.d.ts.map +1 -0
  12. package/dist/authz/index.js +9 -0
  13. package/dist/authz/index.js.map +1 -0
  14. package/dist/authz/permissions.d.ts +20 -0
  15. package/dist/authz/permissions.d.ts.map +1 -0
  16. package/dist/authz/permissions.js +43 -0
  17. package/dist/authz/permissions.js.map +1 -0
  18. package/dist/authz/principals.d.ts +34 -0
  19. package/dist/authz/principals.d.ts.map +1 -0
  20. package/dist/authz/principals.js +42 -0
  21. package/dist/authz/principals.js.map +1 -0
  22. package/dist/authz/reference.d.ts +25 -0
  23. package/dist/authz/reference.d.ts.map +1 -0
  24. package/dist/authz/reference.js +34 -0
  25. package/dist/authz/reference.js.map +1 -0
  26. package/dist/authz/resolve.d.ts +45 -0
  27. package/dist/authz/resolve.d.ts.map +1 -0
  28. package/dist/authz/resolve.js +98 -0
  29. package/dist/authz/resolve.js.map +1 -0
  30. package/dist/authz/scope-tree.d.ts +52 -0
  31. package/dist/authz/scope-tree.d.ts.map +1 -0
  32. package/dist/authz/scope-tree.js +56 -0
  33. package/dist/authz/scope-tree.js.map +1 -0
  34. package/dist/authz/store.d.ts +50 -0
  35. package/dist/authz/store.d.ts.map +1 -0
  36. package/dist/authz/store.js +115 -0
  37. package/dist/authz/store.js.map +1 -0
  38. package/dist/authz/tags.d.ts +40 -0
  39. package/dist/authz/tags.d.ts.map +1 -0
  40. package/dist/authz/tags.js +48 -0
  41. package/dist/authz/tags.js.map +1 -0
  42. package/dist/config.d.ts +73 -0
  43. package/dist/config.d.ts.map +1 -0
  44. package/dist/config.js +157 -0
  45. package/dist/config.js.map +1 -0
  46. package/dist/db/client.d.ts +38 -0
  47. package/dist/db/client.d.ts.map +1 -0
  48. package/dist/db/client.js +34 -0
  49. package/dist/db/client.js.map +1 -0
  50. package/dist/db/migrate.d.ts +32 -0
  51. package/dist/db/migrate.d.ts.map +1 -0
  52. package/dist/db/migrate.js +103 -0
  53. package/dist/db/migrate.js.map +1 -0
  54. package/dist/index.d.ts +16 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +11 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/metrics.d.ts +77 -0
  59. package/dist/metrics.d.ts.map +1 -0
  60. package/dist/metrics.js +179 -0
  61. package/dist/metrics.js.map +1 -0
  62. package/dist/migrate-main.d.ts +2 -0
  63. package/dist/migrate-main.d.ts.map +1 -0
  64. package/dist/migrate-main.js +34 -0
  65. package/dist/migrate-main.js.map +1 -0
  66. package/dist/migrations/0001_init.sql +226 -0
  67. package/dist/migrations/0002_rls_coverage.sql +128 -0
  68. package/dist/migrations/0003_groups_version.sql +48 -0
  69. package/dist/migrations/0004_acl_version.sql +26 -0
  70. package/dist/migrations/0005_grants_bump_version.sql +38 -0
  71. package/dist/migrations/0006_layer_slug_unique.sql +47 -0
  72. package/dist/migrations/0007_index_lease.sql +42 -0
  73. package/dist/observability.d.ts +11 -0
  74. package/dist/observability.d.ts.map +1 -0
  75. package/dist/observability.js +55 -0
  76. package/dist/observability.js.map +1 -0
  77. package/dist/tsconfig.tsbuildinfo +1 -0
  78. package/dist/types.d.ts +54 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +15 -0
  81. package/dist/types.js.map +1 -0
  82. package/dist/vector/query.d.ts +140 -0
  83. package/dist/vector/query.d.ts.map +1 -0
  84. package/dist/vector/query.js +94 -0
  85. package/dist/vector/query.js.map +1 -0
  86. package/dist/vector/search.d.ts +62 -0
  87. package/dist/vector/search.d.ts.map +1 -0
  88. package/dist/vector/search.js +98 -0
  89. package/dist/vector/search.js.map +1 -0
  90. package/package.json +39 -0
@@ -0,0 +1,26 @@
1
+ -- 0004 — record which groups_version a document's ACL tags were built from.
2
+ --
3
+ -- The tags in the vector payload are a cache of the grants table, and
4
+ -- invariant I4 promises a revoked grant stops appearing within
5
+ -- ACL_PROPAGATION_SLA. Without knowing when each document was last tagged,
6
+ -- that promise is unmeasurable: the metric docs/config.md marks as the alerting
7
+ -- one, nacre_acl_propagation_lag_seconds, had nothing to compute itself from.
8
+ --
9
+ -- It is the only external evidence I4 still holds. A promise about time with
10
+ -- no measurement is a promise nobody can catch breaking.
11
+
12
+ ALTER TABLE documents ADD COLUMN acl_version bigint NOT NULL DEFAULT 0;
13
+ ALTER TABLE documents ADD COLUMN acl_tagged_at timestamptz;
14
+
15
+ COMMENT ON COLUMN documents.acl_version IS
16
+ 'organizations.groups_version at the moment the vector payload was tagged. Behind the current value means the recomputation has not caught up.';
17
+
18
+ -- The lag query wants the oldest stale document, so the index leads with the
19
+ -- comparison that decides staleness rather than with the organization.
20
+ CREATE INDEX documents_acl_version_idx
21
+ ON documents (org_id, acl_version, acl_tagged_at)
22
+ WHERE deleted_at IS NULL;
23
+
24
+ -- Existing rows predate tagging entirely. Leaving them at 0 is honest: they
25
+ -- have never been tagged, and the metric should say so rather than report a
26
+ -- comfortable zero on its first scrape.
@@ -0,0 +1,38 @@
1
+ -- 0005 — a grant change moves the permission version too.
2
+ --
3
+ -- 0003 made groups_version move on membership and group changes. It did not
4
+ -- cover the `grants` table, and that leaves a hole precisely where it matters
5
+ -- most: `nacre_acl_propagation_lag_seconds` measures documents whose
6
+ -- acl_version has fallen behind their organization's groups_version, and it is
7
+ -- the evidence offered for invariant I4 — "a revoked grant stops appearing
8
+ -- within ACL_PROPAGATION_SLA".
9
+ --
10
+ -- Revoking a grant is a write to `grants`. Nothing bumped the version, so the
11
+ -- lag stayed at zero through the one event the metric is named for. The metric
12
+ -- was blind to revocation while reporting on revocation.
13
+ --
14
+ -- 0001 calls this column "permission cache invalidation", not "group
15
+ -- membership counter", so this is within what it was for. The name is now
16
+ -- narrower than the meaning; renaming it touches the resolver, the cache key
17
+ -- and three documents, and is worth doing separately rather than inside a
18
+ -- correctness fix.
19
+ --
20
+ -- The cost is over-invalidation: the effective-principals cache is keyed on
21
+ -- this value and a grant change does not alter the group closure, so those
22
+ -- entries are recomputed without needing to be. That is a read the database
23
+ -- was already able to serve, and it errs toward denying a stale answer.
24
+
25
+ CREATE TRIGGER grants_bump_version
26
+ AFTER INSERT OR UPDATE OR DELETE ON grants
27
+ FOR EACH ROW EXECUTE FUNCTION bump_groups_version();
28
+
29
+ -- 0003 called its triggers statement-level in a comment and then wrote FOR EACH
30
+ -- ROW. The code was right and the comment was wrong, so this records the truth
31
+ -- rather than quietly changing behaviour: a sync replacing a hundred grants
32
+ -- bumps the version a hundred times inside one transaction. Readers only care
33
+ -- that it moved, so this is correct but wasteful — a hundred row versions on
34
+ -- one organizations row. Converting to statement-level needs transition tables
35
+ -- and a trigger per operation, which is a change to make on its own.
36
+
37
+ COMMENT ON COLUMN organizations.groups_version IS
38
+ 'Permission epoch. Bumped by triggers on groups, group_members and grants. Read as the effective-principals cache key and as the target the ACL propagation lag is measured against.';
@@ -0,0 +1,47 @@
1
+ -- 0006 — a layer slug is unique within an organization, not within a workspace.
2
+ --
3
+ -- 0001 made layers unique on (workspace_id, slug). The REST and MCP surfaces
4
+ -- address a layer by slug alone — `{"layer": "handbook"}` — and resolve it with
5
+ -- `SELECT id FROM layers WHERE org_id = $1 AND slug = $2`. Those two facts
6
+ -- disagree: two workspaces in one organization could each hold a `handbook`,
7
+ -- and that query would return whichever row the planner reached first.
8
+ --
9
+ -- The permission check is applied to the id that query returns, so this is not
10
+ -- a way to write into a layer you may not write to. It is worse in a quieter
11
+ -- way: a caller with write access to their own `handbook` gets a 404 when the
12
+ -- lookup lands on the other one, and a caller with access to both writes into
13
+ -- whichever the planner picked that day. Neither reports anything wrong.
14
+ --
15
+ -- Making the slug organization-unique matches how the API already treats it.
16
+ -- Addressing layers by workspace-qualified path instead would be the other
17
+ -- resolution, and it is a breaking change to every surface that names a layer.
18
+
19
+ -- Fail loudly rather than let a CREATE UNIQUE INDEX report a duplicate key with
20
+ -- no indication of which rows or why it matters.
21
+ DO $$
22
+ DECLARE
23
+ dup text;
24
+ BEGIN
25
+ SELECT string_agg(format('%s (%s)', slug, n), ', ')
26
+ INTO dup
27
+ FROM (
28
+ SELECT slug, count(*) AS n
29
+ FROM layers
30
+ WHERE deleted_at IS NULL
31
+ GROUP BY org_id, slug
32
+ HAVING count(*) > 1
33
+ ) d;
34
+
35
+ IF dup IS NOT NULL THEN
36
+ RAISE EXCEPTION
37
+ 'layer slugs are not unique per organization: %. Rename them before applying this migration; the API addresses layers by slug alone and cannot tell these apart.', dup;
38
+ END IF;
39
+ END
40
+ $$;
41
+
42
+ -- Partial on deleted_at: a deleted layer keeps its slug, and refusing to reuse
43
+ -- the name of something nobody can see would be a puzzle with no visible cause.
44
+ CREATE UNIQUE INDEX layers_org_slug_key ON layers (org_id, slug) WHERE deleted_at IS NULL;
45
+
46
+ -- The workspace-scoped constraint stays. It is implied by the new one for live
47
+ -- rows, and it still covers deleted ones, which the partial index does not.
@@ -0,0 +1,42 @@
1
+ -- 0007 — a document being indexed carries a lease and an attempt count.
2
+ --
3
+ -- The worker claims a document by committing `status = 'parsing'` and then does
4
+ -- the work outside that transaction. Committing first is deliberate: holding a
5
+ -- row lock across a parse, an embedding call, and a vector upsert would tie a
6
+ -- database connection to the slowest thing in the pipeline. But it means the
7
+ -- claim outlives the process. A worker killed between the commit and the
8
+ -- finish — an OOM on a large PDF, a node drained, a rollout — leaves the row in
9
+ -- `parsing`, and nothing claims `parsing`. The document never indexes, the
10
+ -- ingest endpoint already answered 202, and the only symptom is a job that
11
+ -- stays queued forever.
12
+ --
13
+ -- Two columns, because a reaper alone turns a document that kills the worker
14
+ -- into one that kills it repeatedly:
15
+ --
16
+ -- claimed_at when the current attempt started. The lease clock. Not
17
+ -- `updated_at`, which other writers touch and which would extend
18
+ -- a lease for reasons unrelated to the work.
19
+ -- attempts how many times this document has been claimed. A reaper that
20
+ -- resets forever is a poison pill on a loop: the same document
21
+ -- takes the worker down, comes back, and takes down its
22
+ -- replacement. Past a ceiling the row is failed rather than
23
+ -- requeued, and an operator sees it.
24
+
25
+ ALTER TABLE documents
26
+ ADD COLUMN claimed_at timestamptz,
27
+ ADD COLUMN attempts int NOT NULL DEFAULT 0;
28
+
29
+ -- Existing rows mid-flight at the moment of this migration: give them a lease
30
+ -- that starts now rather than one that is already expired. Requeueing every
31
+ -- in-progress document on deploy is exactly the stampede this guards against.
32
+ UPDATE documents SET claimed_at = now() WHERE status IN ('parsing', 'indexing');
33
+
34
+ -- The reaper's query, and the only one that reads claimed_at. Partial, because
35
+ -- the rows it looks for are a vanishing fraction of the table — normally none.
36
+ CREATE INDEX documents_expired_claims ON documents (claimed_at)
37
+ WHERE status IN ('parsing', 'indexing');
38
+
39
+ COMMENT ON COLUMN documents.claimed_at IS
40
+ 'When the current indexing attempt was claimed. Cleared on success or failure; a value older than the lease means the worker holding it is gone.';
41
+ COMMENT ON COLUMN documents.attempts IS
42
+ 'Claims so far. Bounded so a document that crashes the worker is failed rather than retried forever.';
@@ -0,0 +1,11 @@
1
+ import type { Pool } from 'pg';
2
+ import type { Metrics } from './metrics.js';
3
+ /**
4
+ * The gauges that are queries rather than counters.
5
+ *
6
+ * Registered as a collector so they are computed on scrape, not on a timer:
7
+ * a timer that stops leaves the last value in place, and a stale gauge reads
8
+ * as a healthy one.
9
+ */
10
+ export declare function collectDatabaseGauges(pool: Pool, metrics: Metrics, role?: string): () => Promise<void>;
11
+ //# sourceMappingURL=observability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../observability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAG9B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAoFtG"}
@@ -0,0 +1,55 @@
1
+ import { withOrg } from './db/client.js';
2
+ /**
3
+ * The gauges that are queries rather than counters.
4
+ *
5
+ * Registered as a collector so they are computed on scrape, not on a timer:
6
+ * a timer that stops leaves the last value in place, and a stale gauge reads
7
+ * as a healthy one.
8
+ */
9
+ export function collectDatabaseGauges(pool, metrics, role) {
10
+ const scope = role === undefined ? {} : { role };
11
+ return async () => {
12
+ const client = await pool.connect();
13
+ try {
14
+ // Across organizations, so it runs outside withOrg under the role that
15
+ // may see them all. Every query below names org_id in its output rather
16
+ // than filtering to one.
17
+ const { rows: orgs } = await client.query('SELECT id, slug, groups_version FROM organizations WHERE deleted_at IS NULL');
18
+ metrics.documents.reset();
19
+ metrics.tombstonesPending.reset();
20
+ metrics.aclPropagationLag.reset();
21
+ for (const org of orgs) {
22
+ const counts = await withOrg(pool, org.id, async (c) => (await c.query(`SELECT status, count(*)::text AS n FROM documents
23
+ WHERE org_id = $1 AND deleted_at IS NULL GROUP BY status`, [org.id])).rows, scope);
24
+ for (const row of counts) {
25
+ metrics.documents.set(Number(row.n), { org: org.slug, status: row.status });
26
+ }
27
+ const pending = await withOrg(pool, org.id, async (c) => (await c.query(`SELECT count(*)::text AS n FROM documents
28
+ WHERE org_id = $1 AND deleted_at IS NOT NULL AND vectors_purged_at IS NULL`, [org.id])).rows[0]?.n ?? '0', scope);
29
+ metrics.tombstonesPending.set(Number(pending), { org: org.slug });
30
+ // The oldest document whose tags predate the current groups_version.
31
+ // Zero when everything is caught up; the age of the laggard otherwise.
32
+ const lag = await withOrg(pool, org.id, async (c) => (await c.query(`SELECT COALESCE(EXTRACT(EPOCH FROM (now() - min(COALESCE(acl_tagged_at, created_at)))), 0)::text AS lag
33
+ FROM documents
34
+ WHERE org_id = $1 AND deleted_at IS NULL AND acl_version < $2`, [org.id, Number(org.groups_version)])).rows[0]?.lag ?? '0', scope);
35
+ // Per organization, and set even when it is zero.
36
+ //
37
+ // A single worst-across-tenants number was the first shape of this and
38
+ // it was wrong twice over: one neglected tenant pins the gauge and hides
39
+ // every other tenant behind it, and when the alert does fire it does not
40
+ // say who. `max(nacre_acl_propagation_lag_seconds) > 60` is the same
41
+ // alert and is still independent of how many tenants exist, so the
42
+ // aggregate cost nothing and bought nothing.
43
+ //
44
+ // Zero is written rather than omitted: an absent series and a zero one
45
+ // mean "caught up" and "not being measured", and those must not look
46
+ // alike on the one metric that evidences I4.
47
+ metrics.aclPropagationLag.set(Number(lag), { org: org.slug });
48
+ }
49
+ }
50
+ finally {
51
+ client.release();
52
+ }
53
+ };
54
+ }
55
+ //# sourceMappingURL=observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.js","sourceRoot":"","sources":["../observability.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAGxC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAU,EAAE,OAAgB,EAAE,IAAa;IAC/E,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;IAEhD,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACnC,IAAI,CAAC;YACH,uEAAuE;YACvE,wEAAwE;YACxE,yBAAyB;YACzB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACvC,6EAA6E,CAC9E,CAAA;YAED,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YACzB,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;YACjC,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;YAEjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,IAAI,EACJ,GAAG,CAAC,EAAE,EACN,KAAK,EAAE,CAAC,EAAE,EAAE,CACV,CACE,MAAM,CAAC,CAAC,KAAK,CACX;2EAC2D,EAC3D,CAAC,GAAG,CAAC,EAAE,CAAC,CACT,CACF,CAAC,IAAI,EACR,KAAK,CACN,CAAA;gBACD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;oBACzB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC7E,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3B,IAAI,EACJ,GAAG,CAAC,EAAE,EACN,KAAK,EAAE,CAAC,EAAE,EAAE,CACV,CACE,MAAM,CAAC,CAAC,KAAK,CACX;6FAC6E,EAC7E,CAAC,GAAG,CAAC,EAAE,CAAC,CACT,CACF,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EACrB,KAAK,CACN,CAAA;gBACD,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;gBAEjE,qEAAqE;gBACrE,uEAAuE;gBACvE,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,IAAI,EACJ,GAAG,CAAC,EAAE,EACN,KAAK,EAAE,CAAC,EAAE,EAAE,CACV,CACE,MAAM,CAAC,CAAC,KAAK,CACX;;gFAEgE,EAChE,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CACrC,CACF,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,EACvB,KAAK,CACN,CAAA;gBACD,kDAAkD;gBAClD,EAAE;gBACF,uEAAuE;gBACvE,yEAAyE;gBACzE,yEAAyE;gBACzE,qEAAqE;gBACrE,mEAAmE;gBACnE,6CAA6C;gBAC7C,EAAE;gBACF,uEAAuE;gBACvE,qEAAqE;gBACrE,6CAA6C;gBAC7C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YAC/D,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../config.ts","../types.ts","../authz/permissions.ts","../authz/principals.ts","../authz/scope-tree.ts","../authz/resolve.ts","../authz/reference.ts","../authz/filter.ts","../authz/tags.ts","../authz/cache.ts","../authz/index.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/dispatcher1-wrapper.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@8.3.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/ffi.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/stream/iter.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/.pnpm/@types+node@26.1.2/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/pg-types@2.2.0/node_modules/pg-types/index.d.ts","../../../node_modules/.pnpm/pg-protocol@1.15.0/node_modules/pg-protocol/dist/messages.d.ts","../../../node_modules/.pnpm/pg-protocol@1.15.0/node_modules/pg-protocol/dist/serializer.d.ts","../../../node_modules/.pnpm/pg-protocol@1.15.0/node_modules/pg-protocol/dist/parser.d.ts","../../../node_modules/.pnpm/pg-protocol@1.15.0/node_modules/pg-protocol/dist/index.d.ts","../../../node_modules/.pnpm/@types+pg@8.20.3/node_modules/@types/pg/lib/type-overrides.d.ts","../../../node_modules/.pnpm/@types+pg@8.20.3/node_modules/@types/pg/index.d.ts","../../../node_modules/.pnpm/@types+pg@8.20.3/node_modules/@types/pg/index.d.mts","../db/client.ts","../db/migrate.ts","../authz/store.ts","../../../node_modules/.pnpm/@qdrant+js-client-rest@1.18.0_typescript@6.0.3/node_modules/@qdrant/js-client-rest/dist/types/openapi/generated_schema.d.ts","../../../node_modules/.pnpm/@qdrant+js-client-rest@1.18.0_typescript@6.0.3/node_modules/@qdrant/js-client-rest/dist/types/types.d.ts","../../../node_modules/.pnpm/@qdrant+openapi-typescript-fetch@1.2.6/node_modules/@qdrant/openapi-typescript-fetch/dist/types.d.ts","../../../node_modules/.pnpm/@qdrant+openapi-typescript-fetch@1.2.6/node_modules/@qdrant/openapi-typescript-fetch/dist/fetcher.d.ts","../../../node_modules/.pnpm/@qdrant+openapi-typescript-fetch@1.2.6/node_modules/@qdrant/openapi-typescript-fetch/dist/utils.d.ts","../../../node_modules/.pnpm/@qdrant+openapi-typescript-fetch@1.2.6/node_modules/@qdrant/openapi-typescript-fetch/dist/index.d.ts","../../../node_modules/.pnpm/@qdrant+js-client-rest@1.18.0_typescript@6.0.3/node_modules/@qdrant/js-client-rest/dist/types/openapi/generated_client_type.d.ts","../../../node_modules/.pnpm/@qdrant+js-client-rest@1.18.0_typescript@6.0.3/node_modules/@qdrant/js-client-rest/dist/types/qdrant-client.d.ts","../../../node_modules/.pnpm/@qdrant+js-client-rest@1.18.0_typescript@6.0.3/node_modules/@qdrant/js-client-rest/dist/types/context-headers.d.ts","../../../node_modules/.pnpm/@qdrant+js-client-rest@1.18.0_typescript@6.0.3/node_modules/@qdrant/js-client-rest/dist/types/errors.d.ts","../../../node_modules/.pnpm/@qdrant+js-client-rest@1.18.0_typescript@6.0.3/node_modules/@qdrant/js-client-rest/dist/types/index.d.ts","../vector/query.ts","../vector/search.ts","../metrics.ts","../observability.ts","../index.ts","../migrate-main.ts"],"fileIdsList":[[76,141,149,154,157,159,160,161,173],[76,141,149,154,157,159,160,161,173,217],[76,141,149,154,157,159,160,161,173,213,219,220,221],[76,141,149,154,157,159,160,161,173,212,217],[76,141,149,154,157,159,160,161,173,213,218],[76,141,149,154,157,159,160,161,173,212],[76,141,149,154,157,159,160,161,173,214],[76,141,149,154,157,159,160,161,173,214,215,216],[76,138,139,141,149,154,157,159,160,161,173],[76,140,141,149,154,157,159,160,161,173],[141,149,154,157,159,160,161,173],[76,141,149,154,157,159,160,161,173,182],[76,141,142,147,149,152,154,157,159,160,161,163,173,178,191],[76,141,142,143,149,152,154,157,159,160,161,173],[76,141,144,149,154,157,159,160,161,173,192],[76,141,145,146,149,154,157,159,160,161,164,173],[76,141,146,149,154,157,159,160,161,173,178,188],[76,141,147,149,152,154,157,159,160,161,163,173],[76,140,141,148,149,154,157,159,160,161,173],[76,141,149,150,154,157,159,160,161,173],[76,141,149,151,152,154,157,159,160,161,173],[76,140,141,149,152,154,157,159,160,161,173],[76,141,149,152,154,155,157,159,160,161,173,178,191],[76,141,149,152,154,155,157,159,160,161,173,178,180,182],[76,128,141,149,152,154,156,157,159,160,161,163,173,178,191],[76,141,149,152,154,156,157,159,160,161,163,173,178,188,191],[76,141,149,154,156,157,158,159,160,161,173,178,188,191],[75,76,77,78,79,80,81,82,83,84,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199],[76,141,149,152,154,157,159,160,161,173],[76,141,149,154,157,159,161,173],[76,141,149,154,157,159,160,161,162,173,191],[76,141,149,152,154,157,159,160,161,163,173,178],[76,141,149,154,157,159,160,161,164,173],[76,141,149,154,157,159,160,161,165,173],[76,141,149,152,154,157,159,160,161,168,173],[76,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198],[76,141,149,154,157,159,160,161,170,173],[76,141,149,154,157,159,160,161,171,173],[76,141,146,149,154,157,159,160,161,163,173,182],[76,141,149,152,154,157,159,160,161,173,174],[76,141,149,154,157,159,160,161,173,175,192,195],[76,141,149,152,154,157,159,160,161,173,178,180,181,182],[76,141,149,154,157,159,160,161,173,179,182],[76,141,149,152,154,157,159,160,161,173,178,180],[76,141,149,152,154,157,159,160,161,173,178,181,182],[76,141,149,154,157,159,160,161,173,182,192],[76,141,149,154,157,159,160,161,173,183],[76,138,141,149,154,157,159,160,161,173,178,185,191],[76,141,149,154,157,159,160,161,173,178,184],[76,141,149,152,154,157,159,160,161,173,186,187],[76,141,149,154,157,159,160,161,173,186,187],[76,141,146,149,154,157,159,160,161,163,173,178,188],[76,141,149,154,157,159,160,161,173,189],[76,141,149,154,157,159,160,161,163,173,190],[76,141,149,154,156,157,159,160,161,171,173,191],[76,141,149,154,157,159,160,161,173,192,193],[76,141,146,149,154,157,159,160,161,173,193],[76,141,149,154,157,159,160,161,173,178,194],[76,141,149,154,157,159,160,161,162,173,195],[76,141,149,154,157,159,160,161,173,196],[76,141,144,149,154,157,159,160,161,173],[76,141,146,149,154,157,159,160,161,173],[76,141,149,154,157,159,160,161,173,192],[76,128,141,149,154,157,159,160,161,173],[76,141,149,154,157,159,160,161,173,191],[76,141,149,154,157,159,160,161,173,197],[76,141,149,154,157,159,160,161,168,173],[76,141,149,154,157,159,160,161,173,187],[76,128,141,149,152,154,155,157,159,160,161,168,173,178,182,191,194,195,197],[76,141,149,154,157,159,160,161,173,178,198],[76,141,149,154,157,159,160,161,173,180,199],[76,141,149,154,157,159,160,161,173,207],[76,141,149,152,154,157,159,160,161,173,178,188,200,201,202,205,206,207],[76,141,149,154,157,159,160,161,173,202,203,204],[76,141,149,154,157,159,160,161,173,178,202],[76,91,94,97,98,141,149,154,157,159,160,161,173,191],[76,94,141,149,154,157,159,160,161,173,178,191],[76,94,98,141,149,154,157,159,160,161,173,191],[76,141,149,154,157,159,160,161,173,178],[76,88,141,149,154,157,159,160,161,173],[76,92,141,149,154,157,159,160,161,173],[76,90,91,94,141,149,154,157,159,160,161,173,191],[76,141,149,154,157,159,160,161,163,173,188],[76,141,149,154,157,159,160,161,173,200],[76,88,141,149,154,157,159,160,161,173,200],[76,90,94,141,149,154,157,159,160,161,163,173,191],[76,85,86,87,89,93,141,149,152,154,157,159,160,161,173,178,191],[76,94,141,149,154,157,159,160,161,173],[76,94,103,112,141,149,154,157,159,160,161,173],[76,86,92,141,149,154,157,159,160,161,173],[76,94,122,123,141,149,154,157,159,160,161,173],[76,86,89,94,141,149,154,157,159,160,161,173,182,191,200],[76,90,94,141,149,154,157,159,160,161,173,191],[76,85,141,149,154,157,159,160,161,173],[76,88,89,90,92,93,94,95,96,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,141,149,154,157,159,160,161,173],[76,94,115,118,141,149,154,157,159,160,161,173],[76,94,103,105,106,141,149,154,157,159,160,161,173],[76,92,94,105,107,141,149,154,157,159,160,161,173],[76,93,141,149,154,157,159,160,161,173],[76,86,88,94,141,149,154,157,159,160,161,173],[76,94,98,105,107,141,149,154,157,159,160,161,173],[76,98,141,149,154,157,159,160,161,173],[76,92,94,97,141,149,154,157,159,160,161,173,191],[76,86,90,94,103,141,149,154,157,159,160,161,173],[76,94,115,141,149,154,157,159,160,161,173],[76,107,141,149,154,157,159,160,161,173],[76,86,90,94,98,141,149,154,157,159,160,161,173],[76,88,94,122,141,149,154,157,159,160,161,173,182,197,200],[65,67,76,141,149,154,157,159,160,161,173],[69,76,141,149,154,157,159,160,161,173],[66,67,68,69,70,71,72,73,76,141,149,154,157,159,160,161,173],[65,76,141,149,154,157,159,160,161,173],[65,66,68,76,141,149,154,157,159,160,161,173],[65,67,68,76,141,149,154,157,159,160,161,173,208],[65,76,141,146,149,154,157,159,160,161,173],[76,141,149,154,157,159,160,161,173,208],[76,141,149,154,157,159,160,161,165,173,191,208],[64,65,74,76,141,149,154,157,159,160,161,173,209,210,211,223,224,225,226],[76,141,149,154,157,159,160,161,173,210],[76,141,149,154,157,159,160,161,173,208,209,225],[71,76,141,149,154,157,159,160,161,173],[71,76,141,149,154,157,159,160,161,173,222,223]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"40d6658bcab220d2191e16f2c9d4f6b8625e647eb5d331217c19dca07aed2ccd","signature":"b7ad0409e81f23f1580873296fb914a45fc70f1be6e19c0ce53ef3f597079c6b","impliedFormat":99},{"version":"f58d4129d236372ad07358e5311cf43d217df2f7d7eddc7032538ab8e0dff200","signature":"e288ba12ac074dd11b2a31f353cc4ad7aca15bd3d4085a3efffc9053f7b001ee","impliedFormat":99},{"version":"fb9a5c344b0e953afd8ea07690a7167b053b0b921e7a3581e46868b8a4960fe9","signature":"769abb2094610041183c4523de9ecfbf0e6727e41bacca50661cce2cd0b888b3","impliedFormat":99},{"version":"1a133432dc7f67fe20258cd62b9ee89ed3fa90e38116d1da480c2d259959b390","signature":"4bc5b83160a8453704ff8e380f28781379aedd826eaa04c6ea49347ddd60d7ae","impliedFormat":99},{"version":"2ef3302854df77c01455a19ae33e0e0ebdf581251ef954f769aad18a2c6abb81","signature":"5f5faaac225ef80e0433d40b033eba2e8ecc618880043502c920cee9c15ac6c4","impliedFormat":99},{"version":"6bda3a65a286777f91e097c1ddf52dd3a1273d2ae7acc293eadf5a3c0dec5097","signature":"9c0e1d7f951f5c7b8bc1fbd5cd0f6fc07668c73e0c93fe47f10df24da6190f59","impliedFormat":99},{"version":"09975b92f0831ea8f12d01f04785fc41be522a50f377fca17bd510e1744d2d66","signature":"8b3a0fd48541c9eb6d1847b9ad4209a0fa21ba007c94169866b52f30db9fdca7","impliedFormat":99},{"version":"222d5c8b3ce9b2b7efb94fb83c00c1424051ea6877e8347b5a60fdded4f1f503","signature":"b4f9c0071920944d8ae99782b3926f7d1003deda8779674d2eb1d8f0292dbd17","impliedFormat":99},{"version":"293b78f1e96ad57a2c231a839d7c645452f4506f078bf05f9831b6aa5709ae22","signature":"eb18d4d48912a3c10a55866b524fc220d4bf423d7f34630fb2189b9362226cb4","impliedFormat":99},{"version":"c297e036118fbc41a9307ac78279f0ff2f59e273c550db099e3742be6d6a00a7","signature":"ce8839e965263a87b2fb2220d0ec9ac6bf700971234b6bb3cb61474750881d8b","impliedFormat":99},{"version":"6875cd7ce858c993d7707e4386ff302421c8066c5bb9428597ef5f5ed7b21e00","signature":"42f3e3cafcf8354ded6b24193d202403524d36ffdbdcc19c0f7a95c5602131e4","impliedFormat":99},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"f53a7652392cf26ebbe4e29fd0672aa87c93bd6d0241289c13fab87b9ac35c8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"b00a630557d1622ad312633bdbfbdb9c6b7220d948dca9f899db30679f160074","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"88809d6c1b9c78d04a133646a6feb926def05a8774c308c7c93bc32ee163d271","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"3ac40516c33b87f751f7507346933081a26cdb8a3e11a6b3aa07d23f803c85db","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"829bc57ee8f287b490ab5bbc5a962fca57e432c1e38ec680ecd3ecaf12800613","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"3a3ff14da53d5013f3e6d8c4ad55225e3649c08786c4421ce639c00d8d589b7d","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"38004e6801340cb890afb8cb5a9fc8972297e7f88ab94026e4b0b3c61fb32f8a","impliedFormat":1},{"version":"d243db6b25788f439e7e2f03c05688e92f46764351673bb0e7b2f3631232e186","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"149f9a9e7f04e67afa0e2a49fc0ff421035c01d6b793cfcae7d2e9f6819431e2","impliedFormat":1},{"version":"e8a9dfa4c75ef6d25df8b40eaa9c31e0a69452aaf2ced4a3f4215dbdbaa876f4","impliedFormat":1},{"version":"a70af845a2eb9dd6e2723e319e14ea7fb28b129ec1361c21509b49305448c323","impliedFormat":1},{"version":"b53dc572d4f187904207ae1166652de47aab8eeb00c254d009cb226863076b56","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"f501234c5aeeeb5d7659412335227466aaacf30b952372d60afeb21c02c96348","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"9ac977503f15bf13ca7c82ad9a32a782f42d43e474824e8b3bffe228fd5f2639","impliedFormat":1},{"version":"8b91ff5bb912be3ea213cbcf0075aace1f5d4ff249a0d227ed673868cb7bfabc","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"7cb4f431a4591b0e23002bed805dc871a874dfed6b9a3994dce68a6df73e6739","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"e99963ae1e3a48ca7a7958c02f3e88bb963eb7978c28b68ae6b8c9f03309d83c","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"594ae90cacd813fa392ff80d2e0a8eff4e41f4a136329a940e321399dd8895b4","impliedFormat":1},{"version":"d1f333ade8ff35a409b4984e1f11956fe11c61855b0c7e9b59f0313e48b40c4a","impliedFormat":1},{"version":"0224aa4b3464895d69c413a640a19ac2166778a74eb5eb3b36b021c72d42b274","impliedFormat":1},{"version":"2e6fca0024dd8a076a886d9ec031a936ea59ad878a25b944820495d92f8381dd","affectsGlobalScope":true,"impliedFormat":1},{"version":"177459cba484e2f1e08872a3d2fdbca3162d9d43ca5ec9dc0c946835b55f74be","impliedFormat":1},{"version":"2fbf504c4791f9d32cd766cfe6b605bcda63289b925401953a7900db9af85348","impliedFormat":1},{"version":"ed0fb633cae35948d9e144004299a4bdf1ab912667c787b7fbffcd6d8c7b92a2","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"010eccc3ce4a7ea2e546f6e58cf18c891a50fd3e2a3089f07b3b844230d19a12","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"98fc7231d6c846a8ed19bdef026ddffe5e2182cc818be74899287421ad370a87","impliedFormat":1},{"version":"3a40b5d34e014017539acb92f04cf2bc0aa71e49efb33c66039df93be97842a1","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"8c7e618c2a91ea7f6b5cca272a295864e92c16413be8fc56a943e8c7d5320011","affectsGlobalScope":true,"impliedFormat":1},{"version":"79a85c64bf083c5f4dd7074e804d1000c0c47301b84d48417a224decd681be30","impliedFormat":1},{"version":"9f1e3a76d5f509b5579e567de522b402cb79e201c4f47dcd014451c0580b290d","impliedFormat":1},{"version":"4f1fd541f720030367b5d7ebfea7ae5f9edc8481422993b9a363f459c5412437","impliedFormat":1},{"version":"70f3f8b2dcaf7388f26731a59c79437813e3620b594903525a303cb2a7901016","impliedFormat":1},{"version":"62e8f884c3bc6dff6189b6e662ebe8b238a645938f2df7a97b8a82fca56773a4","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"57a0d1b3d59063d4af2d3f8aac27cfe3c20a0f5d1faf0f8598ccf0b779637939","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"97234c5303866576f913d0ccae7d58d6322d9e803c7bf1228a3fda46ab8087b2","affectsGlobalScope":true,"impliedFormat":1},{"version":"93ecf87143cac7b9d05cffc1d6bdc075b7e4fdd48ff05f1fad85043f6ae678d3","impliedFormat":1},{"version":"6f200afcb82b3e9a54bed6db23f2edf2508cd266801257312c0f124b47f2bdb9","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"39338f84e8c4d0e3de7b3c4a7024fb3925f42100eed5cbe73be58902799dff4d","impliedFormat":1},{"version":"fbf83eb33bf5e329527add92acc65da59323876c702ddccf5f4bf1e848c92369","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"515318bc6e656f75e9e34db625316bfafbafd800dfb1642574af93735a24ad38","impliedFormat":1},{"version":"441b9bb09013654aa3d050e68b06464d8959b473e85868249d9d18f692acd35b","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"55246f15e33ff1e2e9e679b25fa9790a48db55dc63d567fe25fac8b6a0efe911","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"03b7804d69cecd66850abada858ed6d4a59001f8c228a9fe212306ee860a4ff6","impliedFormat":1},{"version":"5b26c4dd672d88336bb929787c9bfb55119e80ba89ec6dc923da1c063892843e","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"987fd1f85dc36f4b2c927aa3db814ac6b452e970f4f55d24ed4ecbb7df09be00","impliedFormat":1},{"version":"f12624a4a8d042b68914eac1b0a16571fc1c523173fcdf2517c65d191bd5a86c","impliedFormat":1},{"version":"b4769767f13a1692a66186e01c3aa186ff808d5ff72ed36eda8c37738fb2ac92","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"683edfc4f2b411ebe04729cb6dc09ddd26fbac2c57771a6d7c55964af776e176","impliedFormat":1},{"version":"1ec3f3a5f04cc42df33274fbe5c0937d9a9e06f249a7a26288d7d54f0763ffd4","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"e47f532d6e1617833f13a5b0710c0089d402c89c2f2b54f324e5a20e418d287a","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"8e2577e7262051fd3c5bd6ca2b2056d358ff8853565720f92455860824c25188","impliedFormat":1},{"version":"7ec8d7d483f7394f9da611b10d3a0e402f76ff5c991261e6ce43a15f81ca4258","impliedFormat":1},{"version":"bb9dbb4b2ad81e3e71ec5ba4314973718555b9d04ba2a17dfbf875efecb8e2c0","impliedFormat":1},{"version":"82c3cc48c692438e41b94d936b8acd75ca97b18c50fa1af8a0715eb9d07d18cd","impliedFormat":1},{"version":"045a210189ec63c5488410b33f9fca53d77d051599d0d6506d8048551399c5f3","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"632c45ccb4cdc2c3a80c7a36a63dd7763016e59cac5e07bfb3e37e3548957028","impliedFormat":1},{"version":"c9a2daf6cd1eb854cd5b9e424247c5e306692055738c2effd35f7871d942b76e","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"e50a7130339a951e6da9e968ed5521b0997a5b0479e148914087213839b5474c","impliedFormat":1},{"version":"f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","impliedFormat":1},{"version":"4a20a0a39aca8738cc5088f9dea2969bf2af3ca1341c56071f513059b122d150","impliedFormat":1},{"version":"a33c98f95c099c2a9a383b156c8f2a16605843d29455a954c1431bcbbc1ce35a","impliedFormat":1},{"version":"effa1fd4980f6dff4e81ed67009b847d34449087504319f9a0dd081e8cf23a31","impliedFormat":1},{"version":"c2c9f431f788b434e6ae327844ef6712bb6a6a88ad08acf20bf6cfeb41d154ba","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"8d4c91e162f0e6cfdab6ff4fed4fe325f0009aefb1b31939bb25cda6f122a793","impliedFormat":1},{"version":"5aea76ab98173f2c230b1f78dc010da403da622c105c468ace9fe24e3b77883c","impliedFormat":99},{"version":"b215d8fbb08a469106a0dc32edeae9acdc9959313827e2127838815183806df3","signature":"9b74afa358d72c345dab54c7848dac4bf2ad81b2c95a9db4079f8be5b5a54bbf","impliedFormat":99},{"version":"ea62d6f686236a3113dec10395c473b9300a586a1c33ee057c6cffcd9b15d86c","signature":"978d7630b04cc823441230efbdafa67142222c9d4052f791c8a6bc88afd2e2da","impliedFormat":99},{"version":"b97d8c45cb39f81a5acd34548cf692d222247aed4e4ddfd7f262f2e988eefba1","signature":"faee3b1d4a660933a0669c841b2d7198a94f5594bf93f2cd36a7c41540169dd7","impliedFormat":99},{"version":"a3151f37697eb47edb5cb1317eccb148da9b4f81ceddb2c5fea1d62dab463a86","impliedFormat":99},{"version":"427c3abdc20ff204f1e46255bb2adfa83d0a2f05814301db12b9a31659d3eb06","impliedFormat":99},{"version":"313843fb7b4c57e36b0e0f1c61669b51dd1a95b0cd872b5556824394b464d08d","impliedFormat":99},{"version":"fd6b4cf5adf6a71d1edd9a6bfb4d74b76bfead15191a1a236f076636dc797a6f","affectsGlobalScope":true,"impliedFormat":99},{"version":"4ce56a7657530facedfb2a28db041655bd1fe7c7e80011a9ab5e564b66fa1aa5","impliedFormat":99},{"version":"47a2abd0bf125fb6520d79984c7ad8ef7347ddab47df35f29299c9c4342adf71","impliedFormat":99},{"version":"ce4e76edfcbf3f63acdd3448768db858a5d966ad55c25dbe92fcdba7bd73164e","impliedFormat":99},{"version":"171dc788ae48274124d41595503440d6a28f86bea4c6a03558da63e0ed63c099","impliedFormat":99},{"version":"cb648ab1ae1f62c5f21e2171f424e598fb4ec970383f1fff90833a924b5effc5","impliedFormat":99},{"version":"7037249c7ef0c817360f65d62dc1f0de96a81e4ccbabe52685962b22307a6ec0","impliedFormat":99},{"version":"c48dceaa23fc1196a2202c11a93b74b8a7f89be8766e2ee4deb6bc09af1df30a","impliedFormat":99},{"version":"1b9bbaa80d75b1b1c9e092857f2f462644b78c4dfbe43aeefec9765b77e7b87f","signature":"15b4fa13ac254db29ec73caaa523c90d725de5e563a4fcc6c6e07d7c75f3ef2e","impliedFormat":99},{"version":"cc5f3e241ed27c61d7756d1d9ba05e45dc3b1acb1c541bc421f3e80c041a479d","signature":"544b3f8f54265078a40a2166427ad8c0666b09d94e78718b957de7adbc7529f8","impliedFormat":99},{"version":"b5cbf47c49979d5ec30d6dcf0dff9c34129a50139878b9f0d563524a240d31da","signature":"d6c6a78e2ea66115911610472b7030347be4b611885caf4d23c769da9676e1cb","impliedFormat":99},{"version":"ba77d0c0aa3d0c175caadfb78dbec26b2029f00bc42bfbd060aea9edc966e1f5","signature":"9f9b92e87788bc84e4dde34bfc8392554c7f242df01138df0b7f0557e1e61f38","impliedFormat":99},{"version":"062f5fc6ef35c580299e859386a9aa971149436952e2c0b41cffd4441df1edd8","signature":"b9be92cdff5750b17c04e1592d62de4f2dcb43670b811ea0ebea08ed6992bc49","impliedFormat":99},{"version":"65b71a985b7499df736183a01301f42ae665aa5e0169ea766444887e2a5898a7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99}],"root":[[64,74],[209,211],[223,228]],"options":{"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"..","skipLibCheck":true,"sourceMap":true,"strict":true,"target":10,"verbatimModuleSyntax":true},"referencedMap":[[220,1],[221,2],[222,3],[218,4],[212,1],[219,5],[213,6],[215,7],[217,8],[214,1],[216,1],[138,9],[139,9],[140,10],[76,11],[141,12],[142,13],[143,14],[144,15],[145,16],[146,17],[147,18],[148,19],[149,20],[150,20],[151,21],[152,22],[153,1],[154,23],[155,24],[77,1],[75,1],[156,25],[157,26],[158,27],[200,28],[159,29],[160,30],[161,29],[162,31],[163,32],[164,33],[165,34],[166,34],[167,34],[168,35],[169,36],[170,37],[171,38],[172,39],[173,40],[174,40],[175,41],[176,1],[177,1],[178,42],[179,43],[180,44],[181,45],[182,46],[183,47],[184,48],[185,49],[186,50],[187,51],[188,52],[189,53],[190,54],[191,55],[192,56],[193,57],[194,58],[195,59],[196,60],[78,29],[79,1],[80,61],[81,62],[82,1],[83,63],[84,1],[129,64],[130,65],[131,66],[132,66],[133,67],[134,1],[135,12],[136,68],[137,65],[197,69],[198,70],[199,71],[208,72],[207,73],[206,72],[205,74],[202,1],[204,75],[203,1],[201,1],[62,1],[63,1],[12,1],[11,1],[2,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[3,1],[21,1],[22,1],[4,1],[23,1],[27,1],[24,1],[25,1],[26,1],[28,1],[29,1],[30,1],[5,1],[31,1],[32,1],[33,1],[34,1],[6,1],[38,1],[35,1],[36,1],[37,1],[39,1],[7,1],[40,1],[45,1],[46,1],[41,1],[42,1],[43,1],[44,1],[8,1],[50,1],[47,1],[48,1],[49,1],[51,1],[9,1],[52,1],[53,1],[54,1],[56,1],[55,1],[57,1],[58,1],[10,1],[59,1],[60,1],[1,1],[61,1],[103,76],[117,77],[100,78],[118,79],[127,80],[91,81],[92,82],[90,83],[126,84],[121,85],[125,86],[94,87],[104,88],[114,89],[93,90],[124,91],[88,92],[89,85],[95,88],[96,1],[102,93],[99,88],[86,94],[128,95],[119,96],[107,97],[106,88],[108,98],[111,99],[105,100],[109,101],[122,84],[97,102],[98,103],[112,104],[87,79],[116,105],[115,88],[101,103],[110,106],[113,107],[120,1],[85,1],[123,108],[73,109],[71,110],[74,111],[66,112],[67,112],[70,113],[69,113],[68,112],[211,114],[72,115],[64,1],[209,116],[210,117],[227,118],[225,1],[228,119],[226,120],[65,1],[223,121],[224,122]],"latestChangedDtsFile":"./migrate-main.d.ts","version":"6.0.3"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Domain vocabulary from docs/authz.md section 3.1.
3
+ *
4
+ * These are contracts, not conveniences. Widening any of them — an extra
5
+ * permission, an extra effect, a scope that is not part of the tree — changes
6
+ * what the resolver is allowed to conclude, so it is a specification change
7
+ * before it is a code change.
8
+ */
9
+ /** A principal is identified as `{type}:{id}` wherever it appears as a string. */
10
+ export type PrincipalType = 'user' | 'group' | 'service_account';
11
+ export interface Principal {
12
+ readonly type: PrincipalType;
13
+ readonly id: string;
14
+ }
15
+ /** `user:8f1c…`, `group:2b0a…`. The form ACL tags are hashed from. */
16
+ export type PrincipalRef = `${PrincipalType}:${string}`;
17
+ export declare function principalRef(p: Principal): PrincipalRef;
18
+ /**
19
+ * Scopes form a tree: workspace → layer → document. A grant on a scope reaches
20
+ * everything nested beneath it (rule 4).
21
+ */
22
+ export type ScopeType = 'workspace' | 'layer' | 'document';
23
+ export interface Scope {
24
+ readonly type: ScopeType;
25
+ readonly id: string;
26
+ }
27
+ export type ScopeRef = `${ScopeType}:${string}`;
28
+ export declare function scopeRef(s: Scope): ScopeRef;
29
+ export type Permission = 'read' | 'write' | 'admin';
30
+ export type Effect = 'allow' | 'deny';
31
+ export interface Grant {
32
+ /**
33
+ * Carried on the grant itself, not just implied by the query that fetched it.
34
+ * Rule 1 is a precondition rather than part of the ACL, and the resolver
35
+ * re-checks it — a grant that reached the resolver from the wrong tenant is a
36
+ * bug somewhere upstream, and the resolver is the last place to catch it
37
+ * before it becomes a result.
38
+ */
39
+ readonly orgId: string;
40
+ readonly principal: Principal;
41
+ readonly scope: Scope;
42
+ readonly permission: Permission;
43
+ readonly effect: Effect;
44
+ }
45
+ /**
46
+ * Roles that bypass the grant table, from rules 2 and 3.
47
+ *
48
+ * `platform_admin` is not "an admin with more power" — it administers
49
+ * organizations and reads no documents at all. Modelling it as a role that
50
+ * short-circuits to *less* access is deliberate; anyone reaching for
51
+ * `if (role === 'platform_admin') allowEverything` has inverted rule 2.
52
+ */
53
+ export type OrgRole = 'platform_admin' | 'org_admin' | 'member';
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,iBAAiB,CAAA;AAEhE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,sEAAsE;AACtE,MAAM,MAAM,YAAY,GAAG,GAAG,aAAa,IAAI,MAAM,EAAE,CAAA;AAEvD,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,CAEvD;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,UAAU,CAAA;AAE1D,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,MAAM,EAAE,CAAA;AAE/C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAE3C;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;AAEnD,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAErC,MAAM,WAAW,KAAK;IACpB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,OAAO,GAAG,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAA"}
package/dist/types.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Domain vocabulary from docs/authz.md section 3.1.
3
+ *
4
+ * These are contracts, not conveniences. Widening any of them — an extra
5
+ * permission, an extra effect, a scope that is not part of the tree — changes
6
+ * what the resolver is allowed to conclude, so it is a specification change
7
+ * before it is a code change.
8
+ */
9
+ export function principalRef(p) {
10
+ return `${p.type}:${p.id}`;
11
+ }
12
+ export function scopeRef(s) {
13
+ return `${s.type}:${s.id}`;
14
+ }
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,MAAM,UAAU,YAAY,CAAC,CAAY;IACvC,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAA;AAC5B,CAAC;AAeD,MAAM,UAAU,QAAQ,CAAC,CAAQ;IAC/B,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,140 @@
1
+ import type { VectorFilter } from '../authz/filter.js';
2
+ /**
3
+ * Building the hybrid query.
4
+ *
5
+ * The rule this module exists to enforce is one line in docs/architecture.md:
6
+ * *the filter is repeated in every prefetch branch, and omitting it from one is
7
+ * a leak.* In a hand-written query document those branches sit far enough apart
8
+ * that a missing `filter` key reads as a formatting difference rather than as a
9
+ * hole, and it is the kind of omission that passes every functional test —
10
+ * results still come back, they are simply somebody else's.
11
+ *
12
+ * So the branches are not hand-written. A caller supplies what makes a branch
13
+ * different — the vector and which named vector to use — and the filter is
14
+ * applied to all of them here, once, from a single argument. There is no
15
+ * signature that accepts a per-branch filter, which is what makes the
16
+ * omission unrepresentable rather than merely discouraged.
17
+ */
18
+ export interface DenseBranch {
19
+ readonly kind: 'dense';
20
+ /** The named vector in the collection, e.g. `v_bge_m3_1024`. */
21
+ readonly using: string;
22
+ readonly vector: readonly number[];
23
+ }
24
+ export interface SparseBranch {
25
+ readonly kind: 'sparse';
26
+ /** The sparse vector name, `bm25` by default. */
27
+ readonly using: string;
28
+ readonly vector: {
29
+ readonly indices: readonly number[];
30
+ readonly values: readonly number[];
31
+ };
32
+ }
33
+ export type Branch = DenseBranch | SparseBranch;
34
+ export interface HybridQueryOptions {
35
+ readonly branches: readonly Branch[];
36
+ readonly filter: VectorFilter;
37
+ /** How many candidates each branch contributes before fusion. */
38
+ readonly prefetchLimit?: number;
39
+ /** How many results the fused query returns. */
40
+ readonly limit: number;
41
+ readonly withPayload?: boolean;
42
+ }
43
+ export interface PrefetchClause {
44
+ readonly query: unknown;
45
+ readonly using: string;
46
+ readonly filter: VectorFilter;
47
+ readonly limit: number;
48
+ }
49
+ export interface HybridQuery {
50
+ readonly prefetch: readonly PrefetchClause[];
51
+ readonly query: {
52
+ readonly fusion: 'rrf';
53
+ };
54
+ readonly limit: number;
55
+ readonly with_payload: boolean;
56
+ }
57
+ /**
58
+ * Reciprocal Rank Fusion over a dense branch and a sparse one, then the caller
59
+ * reranks. Defaults follow docs/architecture.md: 50 candidates per branch.
60
+ */
61
+ export declare function buildHybridQuery(options: HybridQueryOptions): HybridQuery;
62
+ /**
63
+ * The payload indexes the permission filter needs.
64
+ *
65
+ * Without them the filter is evaluated by scanning, which does not fail a test
66
+ * — it just gets slow enough to matter at a customer's volume, which is the
67
+ * worst way to find out. `acl_tags` stays in memory because it participates in
68
+ * every single query.
69
+ */
70
+ export declare const PAYLOAD_INDEXES: readonly [{
71
+ readonly field_name: "layer_id";
72
+ readonly field_schema: "uuid";
73
+ }, {
74
+ readonly field_name: "doc_id";
75
+ readonly field_schema: "uuid";
76
+ }, {
77
+ readonly field_name: "org_id";
78
+ readonly field_schema: "uuid";
79
+ }, {
80
+ readonly field_name: "deleted";
81
+ readonly field_schema: "bool";
82
+ }, {
83
+ readonly field_name: "acl_tags";
84
+ readonly field_schema: {
85
+ readonly type: "keyword";
86
+ readonly is_tenant: false;
87
+ readonly on_disk: false;
88
+ };
89
+ }];
90
+ /**
91
+ * Collection configuration for one organization.
92
+ *
93
+ * int8 quantization is not a tuning knob: roughly 4x less memory for a recall
94
+ * loss inside one percent, which for corporate search is noise. Originals stay
95
+ * on disk for rescoring.
96
+ */
97
+ export declare function collectionConfig(vectorName: string, size: number): {
98
+ vectors: {
99
+ [vectorName]: {
100
+ size: number;
101
+ distance: "Cosine";
102
+ hnsw_config: {
103
+ m: number;
104
+ ef_construct: number;
105
+ };
106
+ quantization_config: {
107
+ scalar: {
108
+ type: "int8";
109
+ quantile: number;
110
+ always_ram: boolean;
111
+ };
112
+ };
113
+ };
114
+ };
115
+ sparse_vectors: {
116
+ bm25: {};
117
+ };
118
+ optimizers_config: {
119
+ default_segment_number: number;
120
+ };
121
+ on_disk_payload: boolean;
122
+ };
123
+ /**
124
+ * The named vector for a model and dimension: `v_{model}_{dim}`.
125
+ *
126
+ * One function because there are three callers that must agree — the API and
127
+ * MCP search paths derive it from configuration, and a layer stores it in a
128
+ * column the worker reads when writing points. They disagreed: layers created
129
+ * through `POST /v1/layers` got the literal `default`, so the worker wrote to a
130
+ * vector the collection did not have and every upsert failed with `Bad
131
+ * Request`, while search looked for the configured name and would have found
132
+ * nothing even if the write had worked.
133
+ *
134
+ * A mismatch here is not a type error and not a test failure; it is an empty
135
+ * index. Deriving it in more than one place is what made that possible.
136
+ */
137
+ export declare function vectorName(model: string, dimensions: number): string;
138
+ /** `org_{slug}` — offboarding a tenant is then one delete, with no rows to forget. */
139
+ export declare function collectionName(orgSlug: string): string;
140
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../vector/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;CAC7F;AAED,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,YAAY,CAAA;AAE/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAA;IAC5C,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAA;KAAE,CAAA;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAyBzE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;EASlB,CAAA;AAEV;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;QAG3D,CAAC,UAAU,CAAC;;;;;;;;;;;;;;UAOX;;;;;;;;;EAMN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtD"}