@codemem/mcp 0.31.4 → 0.32.1

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 (46) hide show
  1. package/dist/audit.d.ts +54 -0
  2. package/dist/audit.d.ts.map +1 -0
  3. package/dist/content.d.ts +13 -0
  4. package/dist/content.d.ts.map +1 -0
  5. package/dist/http.d.ts +38 -0
  6. package/dist/http.d.ts.map +1 -0
  7. package/dist/http.js +1049 -0
  8. package/dist/http.js.map +1 -0
  9. package/dist/index.d.ts +2 -10
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -602
  12. package/dist/memory-access.d.ts.map +1 -1
  13. package/dist/memory-kinds.d.ts +2 -0
  14. package/dist/memory-kinds.d.ts.map +1 -0
  15. package/dist/oauth.d.ts +176 -0
  16. package/dist/oauth.d.ts.map +1 -0
  17. package/dist/oidc.d.ts +35 -0
  18. package/dist/oidc.d.ts.map +1 -0
  19. package/dist/project-scope.d.ts +4 -0
  20. package/dist/project-scope.d.ts.map +1 -1
  21. package/dist/provider.d.ts +51 -0
  22. package/dist/provider.d.ts.map +1 -0
  23. package/dist/schemas.d.ts +36 -0
  24. package/dist/schemas.d.ts.map +1 -0
  25. package/dist/server-Djvf0Yik.js +488 -0
  26. package/dist/server-Djvf0Yik.js.map +1 -0
  27. package/dist/server.d.ts +5 -0
  28. package/dist/server.d.ts.map +1 -0
  29. package/dist/stdio.d.ts +9 -0
  30. package/dist/stdio.d.ts.map +1 -0
  31. package/dist/stdio.js +69 -0
  32. package/dist/stdio.js.map +1 -0
  33. package/dist/tool-context.d.ts +12 -0
  34. package/dist/tool-context.d.ts.map +1 -0
  35. package/dist/tools/items.d.ts +4 -0
  36. package/dist/tools/items.d.ts.map +1 -0
  37. package/dist/tools/learn.d.ts +3 -0
  38. package/dist/tools/learn.d.ts.map +1 -0
  39. package/dist/tools/schema.d.ts +3 -0
  40. package/dist/tools/schema.d.ts.map +1 -0
  41. package/dist/tools/search.d.ts +4 -0
  42. package/dist/tools/search.d.ts.map +1 -0
  43. package/dist/tools/timeline.d.ts +4 -0
  44. package/dist/tools/timeline.d.ts.map +1 -0
  45. package/package.json +19 -7
  46. package/dist/index.js.map +0 -1
@@ -0,0 +1,176 @@
1
+ import type { OAuthRegisteredClientsStore } from "@modelcontextprotocol/sdk/server/auth/clients.js";
2
+ import { type OAuthClientInformationFull, type OAuthErrorResponse, type OAuthMetadata, type OAuthProtectedResourceMetadata, type OAuthTokens } from "@modelcontextprotocol/sdk/shared/auth.js";
3
+ export declare const MCP_OAUTH_PUBLIC_URL_ENV = "CODEMEM_MCP_HTTP_PUBLIC_URL";
4
+ export declare const MCP_OAUTH_RESOURCE_NAME = "codemem MCP";
5
+ export declare const MCP_OAUTH_SCOPES_SUPPORTED: string[];
6
+ export declare const MCP_OAUTH_SERVICE_DOCUMENTATION_URL = "https://github.com/kunickiaj/codemem#readme";
7
+ export interface McpOAuthMetadataOptions {
8
+ mcpUrl: string;
9
+ clientsStore: OAuthRegisteredClientsStore;
10
+ }
11
+ export interface RegisteredMcpOAuthClient {
12
+ status: 201;
13
+ body: OAuthClientInformationFull;
14
+ }
15
+ export interface McpOAuthRegistrationError {
16
+ status: 400;
17
+ body: {
18
+ error: "invalid_client_metadata";
19
+ error_description: string;
20
+ };
21
+ }
22
+ export interface AuthorizationCodeRecord {
23
+ clientId: string;
24
+ redirectUri: string;
25
+ codeChallenge: string;
26
+ scopes: string[];
27
+ resource?: string;
28
+ expiresAt: number;
29
+ used: boolean;
30
+ }
31
+ export interface OAuthAuthorizationCodeStore {
32
+ issueCode(record: Omit<AuthorizationCodeRecord, "used">, now?: number): string | undefined;
33
+ peekCode(code: string): AuthorizationCodeRecord | undefined;
34
+ consumeCode(code: string): AuthorizationCodeRecord | undefined;
35
+ }
36
+ export interface AccessTokenRecord {
37
+ clientId: string;
38
+ grantId?: string;
39
+ scopes: string[];
40
+ resource?: string;
41
+ tokenHash: string;
42
+ issuedAt: number;
43
+ expiresAt: number;
44
+ lastUsedAt: number | null;
45
+ revokedAt: number | null;
46
+ }
47
+ export type AccessTokenVerificationResult = {
48
+ ok: true;
49
+ record: AccessTokenRecord;
50
+ } | {
51
+ ok: false;
52
+ reason: "unknown_token" | "expired_token" | "revoked_token";
53
+ };
54
+ export interface OAuthAccessTokenStore {
55
+ issueToken(clientId: string, now?: number, resource?: string, grantId?: string, scopes?: string[]): {
56
+ token: string;
57
+ expiresIn: number;
58
+ } | undefined;
59
+ verifyToken(token: string, now?: number): AccessTokenVerificationResult;
60
+ revokeToken(token: string, now?: number): boolean;
61
+ revokeTokensForGrant?(grantId: string, now?: number): number;
62
+ }
63
+ export interface RefreshTokenGrantRecord {
64
+ grantId: string;
65
+ clientId: string;
66
+ scopes: string[];
67
+ resource?: string;
68
+ currentRefreshTokenHash: string;
69
+ previousRefreshTokenHash: string | null;
70
+ issuedAt: number;
71
+ expiresAt: number;
72
+ rotatedAt: number | null;
73
+ revokedAt: number | null;
74
+ }
75
+ export type RefreshTokenRotationResult = {
76
+ ok: true;
77
+ grant: RefreshTokenGrantRecord;
78
+ refreshToken: string;
79
+ expiresIn: number;
80
+ } | {
81
+ ok: false;
82
+ reason: "unknown_refresh_token" | "expired_refresh_token" | "revoked_refresh_token" | "client_mismatch" | "scope_mismatch" | "resource_mismatch" | "refresh_token_replay";
83
+ grantId?: string;
84
+ };
85
+ export interface OAuthRefreshTokenStore {
86
+ issueGrant(record: {
87
+ clientId: string;
88
+ scopes?: string[];
89
+ resource?: string;
90
+ }, now?: number): {
91
+ grant: RefreshTokenGrantRecord;
92
+ refreshToken: string;
93
+ expiresIn: number;
94
+ } | undefined;
95
+ rotateRefreshToken(clientId: string, refreshToken: string, options?: {
96
+ scopes?: string[];
97
+ resource?: string;
98
+ }, now?: number): RefreshTokenRotationResult;
99
+ revokeRefreshToken(token: string, now?: number): string | undefined;
100
+ revokeGrant(grantId: string, now?: number): boolean;
101
+ }
102
+ export interface McpOAuthRedirectResult {
103
+ status: 302;
104
+ location: string;
105
+ }
106
+ export interface McpOAuthErrorResult {
107
+ status: 400;
108
+ body: OAuthErrorResponse;
109
+ }
110
+ export interface McpOAuthTokenResult {
111
+ status: 200;
112
+ body: OAuthTokens;
113
+ }
114
+ export interface PreparedMcpOAuthAuthorizationRequest {
115
+ clientId: string;
116
+ redirectUri: string;
117
+ codeChallenge: string;
118
+ scopes: string[];
119
+ resource: string | null;
120
+ state: string | null;
121
+ }
122
+ export declare class InMemoryOAuthClientsStore implements OAuthRegisteredClientsStore {
123
+ #private;
124
+ getClient(clientId: string): OAuthClientInformationFull | undefined;
125
+ registerClient(client: Omit<OAuthClientInformationFull, "client_id" | "client_id_issued_at">): OAuthClientInformationFull;
126
+ }
127
+ export declare class InMemoryOAuthAuthorizationCodeStore implements OAuthAuthorizationCodeStore {
128
+ #private;
129
+ issueCode(record: Omit<AuthorizationCodeRecord, "used">, now?: number): string | undefined;
130
+ peekCode(code: string): AuthorizationCodeRecord | undefined;
131
+ consumeCode(code: string): AuthorizationCodeRecord | undefined;
132
+ }
133
+ export declare class InMemoryOAuthAccessTokenStore implements OAuthAccessTokenStore {
134
+ #private;
135
+ issueToken(clientId: string, now?: number, resource?: string, grantId?: string, scopes?: string[]): {
136
+ token: string;
137
+ expiresIn: number;
138
+ } | undefined;
139
+ verifyToken(token: string, now?: number): AccessTokenVerificationResult;
140
+ revokeToken(token: string, now?: number): boolean;
141
+ revokeTokensForGrant(grantId: string, now?: number): number;
142
+ }
143
+ export declare class InMemoryOAuthRefreshTokenStore implements OAuthRefreshTokenStore {
144
+ #private;
145
+ issueGrant(record: {
146
+ clientId: string;
147
+ scopes?: string[];
148
+ resource?: string;
149
+ }, now?: number): {
150
+ grant: RefreshTokenGrantRecord;
151
+ refreshToken: string;
152
+ expiresIn: number;
153
+ } | undefined;
154
+ rotateRefreshToken(clientId: string, refreshToken: string, options?: {
155
+ scopes?: string[];
156
+ resource?: string;
157
+ }, now?: number): RefreshTokenRotationResult;
158
+ revokeRefreshToken(token: string, now?: number): string | undefined;
159
+ revokeGrant(grantId: string, now?: number): boolean;
160
+ }
161
+ export declare function createInMemoryOAuthClientsStore(): OAuthRegisteredClientsStore;
162
+ export declare function createInMemoryOAuthAuthorizationCodeStore(): OAuthAuthorizationCodeStore;
163
+ export declare function createInMemoryOAuthAccessTokenStore(): OAuthAccessTokenStore;
164
+ export declare function createInMemoryOAuthRefreshTokenStore(): OAuthRefreshTokenStore;
165
+ export declare function createMcpOAuthMetadata(options: McpOAuthMetadataOptions): OAuthMetadata;
166
+ export declare function createMcpProtectedResourceMetadata(mcpUrl: string): OAuthProtectedResourceMetadata;
167
+ export declare function registerMcpOAuthClient(requestBody: unknown, clientsStore: OAuthRegisteredClientsStore): RegisteredMcpOAuthClient | McpOAuthRegistrationError;
168
+ export declare function authorizeMcpOAuthClient(params: URLSearchParams, clientsStore: OAuthRegisteredClientsStore, codeStore: OAuthAuthorizationCodeStore, now?: number): McpOAuthRedirectResult | McpOAuthErrorResult;
169
+ export declare function prepareMcpOAuthAuthorizationRequest(params: URLSearchParams, clientsStore: OAuthRegisteredClientsStore): PreparedMcpOAuthAuthorizationRequest | McpOAuthErrorResult;
170
+ export declare function exchangeMcpOAuthAuthorizationCode(params: URLSearchParams, clientsStore: OAuthRegisteredClientsStore, codeStore: OAuthAuthorizationCodeStore, tokenStore: OAuthAccessTokenStore, now?: number): McpOAuthTokenResult | McpOAuthErrorResult;
171
+ export declare function revokeMcpOAuthAccessToken(params: URLSearchParams, tokenStore: OAuthAccessTokenStore): {
172
+ status: 200;
173
+ body: Record<string, never>;
174
+ };
175
+ export declare function normalizeMcpPublicUrl(value: string): URL;
176
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
package/dist/oidc.d.ts ADDED
@@ -0,0 +1,35 @@
1
+ import type { OAuthRegisteredClientsStore } from "@modelcontextprotocol/sdk/server/auth/clients.js";
2
+ import { type McpOAuthErrorResult, type McpOAuthRedirectResult } from "./oauth.js";
3
+ export declare const MCP_OIDC_ISSUER_URL_ENV = "CODEMEM_MCP_OIDC_ISSUER_URL";
4
+ export declare const MCP_OIDC_CLIENT_ID_ENV = "CODEMEM_MCP_OIDC_CLIENT_ID";
5
+ export declare const MCP_OIDC_CLIENT_SECRET_ENV = "CODEMEM_MCP_OIDC_CLIENT_SECRET";
6
+ export declare const MCP_OAUTH_ALLOWED_SUBJECT_ENV = "CODEMEM_MCP_OAUTH_ALLOWED_SUBJECT";
7
+ export declare const MCP_OAUTH_ALLOWED_EMAIL_ENV = "CODEMEM_MCP_OAUTH_ALLOWED_EMAIL";
8
+ export interface OidcConfig {
9
+ issuerUrl: string;
10
+ clientId: string;
11
+ clientSecret: string;
12
+ allowedSubject?: string;
13
+ allowedEmail?: string;
14
+ }
15
+ export interface PendingOidcAuthorization {
16
+ oauthParams: string;
17
+ nonce: string;
18
+ expiresAt: number;
19
+ }
20
+ export interface OidcPendingAuthorizationStore {
21
+ issue(record: Omit<PendingOidcAuthorization, "expiresAt">, now?: number): string | undefined;
22
+ consume(state: string): PendingOidcAuthorization | undefined;
23
+ }
24
+ export declare class InMemoryOidcPendingAuthorizationStore implements OidcPendingAuthorizationStore {
25
+ #private;
26
+ issue(record: Omit<PendingOidcAuthorization, "expiresAt">, now?: number): string | undefined;
27
+ consume(state: string): PendingOidcAuthorization | undefined;
28
+ }
29
+ export declare function createInMemoryOidcPendingAuthorizationStore(): OidcPendingAuthorizationStore;
30
+ export declare function resolveOidcConfig(env?: NodeJS.ProcessEnv): OidcConfig | undefined;
31
+ export declare function beginOidcAuthorization(params: URLSearchParams, clientsStore: OAuthRegisteredClientsStore, pendingStore: OidcPendingAuthorizationStore, config: OidcConfig | undefined, publicMcpUrl: string, now?: number): Promise<McpOAuthRedirectResult | McpOAuthErrorResult>;
32
+ export declare function completeOidcAuthorization(callbackParams: URLSearchParams, pendingStore: OidcPendingAuthorizationStore, config: OidcConfig, publicMcpUrl: string, now?: number): Promise<{
33
+ oauthParams: URLSearchParams;
34
+ } | McpOAuthErrorResult>;
35
+ //# sourceMappingURL=oidc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc.d.ts","sourceRoot":"","sources":["../src/oidc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAE3B,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,uBAAuB,gCAAgC,CAAC;AACrE,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AACnE,eAAO,MAAM,0BAA0B,mCAAmC,CAAC;AAC3E,eAAO,MAAM,6BAA6B,sCAAsC,CAAC;AACjF,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAQ7E,MAAM,WAAW,UAAU;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC7C,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7F,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAAC;CAC7D;AAoCD,qBAAa,qCAAsC,YAAW,6BAA6B;;IAG1F,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,SAAS;IAQhG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;CAW5D;AAED,wBAAgB,2CAA2C,IAAI,6BAA6B,CAE3F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,GAAG,SAAS,CAkB9F;AAED,wBAAsB,sBAAsB,CAC3C,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,2BAA2B,EACzC,YAAY,EAAE,6BAA6B,EAC3C,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,YAAY,EAAE,MAAM,EACpB,GAAG,SAAa,GACd,OAAO,CAAC,sBAAsB,GAAG,mBAAmB,CAAC,CAoBvD;AAED,wBAAsB,yBAAyB,CAC9C,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,6BAA6B,EAC3C,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,EACpB,GAAG,SAAa,GACd,OAAO,CAAC;IAAE,WAAW,EAAE,eAAe,CAAA;CAAE,GAAG,mBAAmB,CAAC,CAiCjE"}
@@ -1,4 +1,8 @@
1
1
  import { type MemoryFilters } from "@codemem/core";
2
2
  export declare function resolveDefaultProject(): string | null;
3
+ export declare function resolveWriteProject(input: {
4
+ project?: string | null;
5
+ envProject?: string | null;
6
+ }): string | null;
3
7
  export declare function buildFilters(raw: Record<string, unknown>, defaultProject?: string | null): MemoryFilters | undefined;
4
8
  //# sourceMappingURL=project-scope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-scope.d.ts","sourceRoot":"","sources":["../src/project-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,eAAe,CAAC;AAEnE,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAGrD;AAED,wBAAgB,YAAY,CAC3B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,cAAc,gBAA0B,GACtC,aAAa,GAAG,SAAS,CA0C3B"}
1
+ {"version":3,"file":"project-scope.d.ts","sourceRoot":"","sources":["../src/project-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,eAAe,CAAC;AAOnE,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IAC1C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GAAG,MAAM,GAAG,IAAI,CAEhB;AAED,wBAAgB,YAAY,CAC3B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,cAAc,gBAA0B,GACtC,aAAa,GAAG,SAAS,CA0C3B"}
@@ -0,0 +1,51 @@
1
+ import type { OAuthRegisteredClientsStore } from "@modelcontextprotocol/sdk/server/auth/clients.js";
2
+ import type { AuthorizationParams, OAuthServerProvider } from "@modelcontextprotocol/sdk/server/auth/provider.js";
3
+ import type { AuthInfo } from "@modelcontextprotocol/sdk/server/auth/types.js";
4
+ import { type OAuthClientInformationFull, type OAuthTokenRevocationRequest, type OAuthTokens } from "@modelcontextprotocol/sdk/shared/auth.js";
5
+ import type { Response } from "express";
6
+ import { type OAuthAccessTokenStore, type OAuthAuthorizationCodeStore, type OAuthRefreshTokenStore } from "./oauth.js";
7
+ import { type OidcConfig, type OidcPendingAuthorizationStore } from "./oidc.js";
8
+ export interface MemoryOAuthServerProviderOptions {
9
+ clientsStore: OAuthRegisteredClientsStore;
10
+ codeStore: OAuthAuthorizationCodeStore;
11
+ tokenStore: OAuthAccessTokenStore;
12
+ refreshTokenStore?: OAuthRefreshTokenStore;
13
+ publicMcpUrl: string;
14
+ oidc?: {
15
+ config: OidcConfig;
16
+ pendingStore: OidcPendingAuthorizationStore;
17
+ };
18
+ now?: () => number;
19
+ }
20
+ /**
21
+ * MemoryOAuthServerProvider adapts codemem's existing in-memory stores to the
22
+ * `@modelcontextprotocol/sdk` `OAuthServerProvider` contract so the SDK's
23
+ * `mcpAuthRouter` and `requireBearerAuth` middleware can drive the OAuth
24
+ * lifecycle. This class is the boundary between SDK-handled HTTP and
25
+ * codemem-owned storage / upstream-OIDC bridging.
26
+ *
27
+ * Conventions encoded here:
28
+ * - `authorize()` does NOT mint the MCP authorization code itself. It
29
+ * persists pending state and redirects the user-agent to the upstream OIDC
30
+ * provider. The MCP code is issued later by codemem's own /oauth/callback
31
+ * route (wired in codemem-b20m.3) after the upstream identity is validated.
32
+ * - PKCE is validated by the SDK token handler against the challenge returned
33
+ * from `challengeForAuthorizationCode`. We do not re-verify here.
34
+ * - `expiresAt` returned in `AuthInfo` is epoch SECONDS per the SDK's
35
+ * `requireBearerAuth` expectations; the underlying store records ms.
36
+ * - Refresh-token grants use dual-token rotation: the current token and one
37
+ * previous token are accepted to tolerate client retry races, while older
38
+ * replayed tokens revoke the whole grant.
39
+ */
40
+ export declare class MemoryOAuthServerProvider implements OAuthServerProvider {
41
+ #private;
42
+ constructor(options: MemoryOAuthServerProviderOptions);
43
+ get clientsStore(): OAuthRegisteredClientsStore;
44
+ authorize(client: OAuthClientInformationFull, params: AuthorizationParams, res: Response): Promise<void>;
45
+ challengeForAuthorizationCode(_client: OAuthClientInformationFull, authorizationCode: string): Promise<string>;
46
+ exchangeAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string, _codeVerifier?: string, redirectUri?: string, resource?: URL): Promise<OAuthTokens>;
47
+ exchangeRefreshToken(client: OAuthClientInformationFull, refreshToken: string, scopes?: string[], resource?: URL): Promise<OAuthTokens>;
48
+ verifyAccessToken(token: string): Promise<AuthInfo>;
49
+ revokeToken(_client: OAuthClientInformationFull, request: OAuthTokenRevocationRequest): Promise<void>;
50
+ }
51
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAWpG,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EACN,KAAK,0BAA0B,EAE/B,KAAK,2BAA2B,EAChC,KAAK,WAAW,EAEhB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAEN,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAEN,KAAK,UAAU,EACf,KAAK,6BAA6B,EAClC,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,gCAAgC;IAChD,YAAY,EAAE,2BAA2B,CAAC;IAC1C,SAAS,EAAE,2BAA2B,CAAC;IACvC,UAAU,EAAE,qBAAqB,CAAC;IAClC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,YAAY,EAAE,6BAA6B,CAAA;KAAE,CAAC;IAC3E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,yBAA0B,YAAW,mBAAmB;;gBAUxD,OAAO,EAAE,gCAAgC;IAWrD,IAAI,YAAY,IAAI,2BAA2B,CAE9C;IAEK,SAAS,CACd,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,mBAAmB,EAC3B,GAAG,EAAE,QAAQ,GACX,OAAO,CAAC,IAAI,CAAC;IAoBV,6BAA6B,CAClC,OAAO,EAAE,0BAA0B,EACnC,iBAAiB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC;IAaZ,yBAAyB,CAC9B,MAAM,EAAE,0BAA0B,EAClC,iBAAiB,EAAE,MAAM,EACzB,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,WAAW,CAAC;IAiEjB,oBAAoB,CACzB,MAAM,EAAE,0BAA0B,EAClC,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,QAAQ,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,WAAW,CAAC;IA8BjB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0BnD,WAAW,CAChB,OAAO,EAAE,0BAA0B,EACnC,OAAO,EAAE,2BAA2B,GAClC,OAAO,CAAC,IAAI,CAAC;CAMhB"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ export declare const filterSchema: {
3
+ visibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
4
+ include_visibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
5
+ exclude_visibility: z.ZodOptional<z.ZodArray<z.ZodString>>;
6
+ include_workspace_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
7
+ exclude_workspace_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
8
+ include_workspace_kinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
9
+ exclude_workspace_kinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
10
+ include_actor_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
11
+ exclude_actor_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
+ include_trust_states: z.ZodOptional<z.ZodArray<z.ZodString>>;
13
+ exclude_trust_states: z.ZodOptional<z.ZodArray<z.ZodString>>;
14
+ ownership_scope: z.ZodOptional<z.ZodString>;
15
+ personal_first: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
16
+ trust_bias: z.ZodOptional<z.ZodString>;
17
+ widen_shared_when_weak: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
18
+ widen_shared_min_personal_results: z.ZodOptional<z.ZodNumber>;
19
+ widen_shared_min_personal_score: z.ZodOptional<z.ZodNumber>;
20
+ scope_id: z.ZodOptional<z.ZodString>;
21
+ include_scope_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
22
+ exclude_scope_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
+ kind: z.ZodOptional<z.ZodString>;
24
+ project: z.ZodOptional<z.ZodString>;
25
+ };
26
+ export declare const memoryKindSchema: z.ZodEnum<{
27
+ discovery: "discovery";
28
+ change: "change";
29
+ feature: "feature";
30
+ bugfix: "bugfix";
31
+ refactor: "refactor";
32
+ decision: "decision";
33
+ exploration: "exploration";
34
+ }>;
35
+ export declare const filterNames: string[];
36
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;CAqBxB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;EAQ3B,CAAC;AAEH,eAAO,MAAM,WAAW,UAAuC,CAAC"}