@codemap-ai/core 0.2.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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/dist/config.d.ts +40 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +229 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/index.d.ts +27 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +29 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/agent-pack-doctor.d.ts +36 -0
  11. package/dist/lib/agent-pack-doctor.d.ts.map +1 -0
  12. package/dist/lib/agent-pack-doctor.js +325 -0
  13. package/dist/lib/agent-pack-doctor.js.map +1 -0
  14. package/dist/lib/agent-pack-installer.d.ts +35 -0
  15. package/dist/lib/agent-pack-installer.d.ts.map +1 -0
  16. package/dist/lib/agent-pack-installer.js +371 -0
  17. package/dist/lib/agent-pack-installer.js.map +1 -0
  18. package/dist/lib/agent-pack.d.ts +36 -0
  19. package/dist/lib/agent-pack.d.ts.map +1 -0
  20. package/dist/lib/agent-pack.js +119 -0
  21. package/dist/lib/agent-pack.js.map +1 -0
  22. package/dist/lib/agent-workflow.d.ts +37 -0
  23. package/dist/lib/agent-workflow.d.ts.map +1 -0
  24. package/dist/lib/agent-workflow.js +329 -0
  25. package/dist/lib/agent-workflow.js.map +1 -0
  26. package/dist/lib/api-types.d.ts +32 -0
  27. package/dist/lib/api-types.d.ts.map +1 -0
  28. package/dist/lib/api-types.js +3 -0
  29. package/dist/lib/api-types.js.map +1 -0
  30. package/dist/lib/auto-inject.d.ts +16 -0
  31. package/dist/lib/auto-inject.d.ts.map +1 -0
  32. package/dist/lib/auto-inject.js +80 -0
  33. package/dist/lib/auto-inject.js.map +1 -0
  34. package/dist/lib/bundled-runtime.d.ts +9 -0
  35. package/dist/lib/bundled-runtime.d.ts.map +1 -0
  36. package/dist/lib/bundled-runtime.js +20 -0
  37. package/dist/lib/bundled-runtime.js.map +1 -0
  38. package/dist/lib/codemap-api.d.ts +22 -0
  39. package/dist/lib/codemap-api.d.ts.map +1 -0
  40. package/dist/lib/codemap-api.js +74 -0
  41. package/dist/lib/codemap-api.js.map +1 -0
  42. package/dist/lib/import-health.d.ts +38 -0
  43. package/dist/lib/import-health.d.ts.map +1 -0
  44. package/dist/lib/import-health.js +186 -0
  45. package/dist/lib/import-health.js.map +1 -0
  46. package/dist/lib/local-index.d.ts +52 -0
  47. package/dist/lib/local-index.d.ts.map +1 -0
  48. package/dist/lib/local-index.js +262 -0
  49. package/dist/lib/local-index.js.map +1 -0
  50. package/dist/lib/markdown-fence.d.ts +8 -0
  51. package/dist/lib/markdown-fence.d.ts.map +1 -0
  52. package/dist/lib/markdown-fence.js +98 -0
  53. package/dist/lib/markdown-fence.js.map +1 -0
  54. package/dist/lib/mcp-auth.d.ts +39 -0
  55. package/dist/lib/mcp-auth.d.ts.map +1 -0
  56. package/dist/lib/mcp-auth.js +184 -0
  57. package/dist/lib/mcp-auth.js.map +1 -0
  58. package/dist/lib/monorepo-root.d.ts +7 -0
  59. package/dist/lib/monorepo-root.d.ts.map +1 -0
  60. package/dist/lib/monorepo-root.js +23 -0
  61. package/dist/lib/monorepo-root.js.map +1 -0
  62. package/dist/lib/onboarding.d.ts +5 -0
  63. package/dist/lib/onboarding.d.ts.map +1 -0
  64. package/dist/lib/onboarding.js +96 -0
  65. package/dist/lib/onboarding.js.map +1 -0
  66. package/dist/lib/open-url.d.ts +7 -0
  67. package/dist/lib/open-url.d.ts.map +1 -0
  68. package/dist/lib/open-url.js +38 -0
  69. package/dist/lib/open-url.js.map +1 -0
  70. package/dist/lib/regex-utils.d.ts +2 -0
  71. package/dist/lib/regex-utils.d.ts.map +1 -0
  72. package/dist/lib/regex-utils.js +4 -0
  73. package/dist/lib/regex-utils.js.map +1 -0
  74. package/dist/lib/server-instructions.d.ts +2 -0
  75. package/dist/lib/server-instructions.d.ts.map +1 -0
  76. package/dist/lib/server-instructions.js +34 -0
  77. package/dist/lib/server-instructions.js.map +1 -0
  78. package/dist/lib/session-context.d.ts +2 -0
  79. package/dist/lib/session-context.d.ts.map +1 -0
  80. package/dist/lib/session-context.js +40 -0
  81. package/dist/lib/session-context.js.map +1 -0
  82. package/dist/lib/session-tracker.d.ts +16 -0
  83. package/dist/lib/session-tracker.d.ts.map +1 -0
  84. package/dist/lib/session-tracker.js +32 -0
  85. package/dist/lib/session-tracker.js.map +1 -0
  86. package/dist/lib/sqlite-index-store.d.ts +165 -0
  87. package/dist/lib/sqlite-index-store.d.ts.map +1 -0
  88. package/dist/lib/sqlite-index-store.js +609 -0
  89. package/dist/lib/sqlite-index-store.js.map +1 -0
  90. package/dist/lib/tool-response.d.ts +97 -0
  91. package/dist/lib/tool-response.d.ts.map +1 -0
  92. package/dist/lib/tool-response.js +127 -0
  93. package/dist/lib/tool-response.js.map +1 -0
  94. package/dist/lib/uuid-schema.d.ts +8 -0
  95. package/dist/lib/uuid-schema.d.ts.map +1 -0
  96. package/dist/lib/uuid-schema.js +10 -0
  97. package/dist/lib/uuid-schema.js.map +1 -0
  98. package/dist/lib/workspace-git.d.ts +16 -0
  99. package/dist/lib/workspace-git.d.ts.map +1 -0
  100. package/dist/lib/workspace-git.js +53 -0
  101. package/dist/lib/workspace-git.js.map +1 -0
  102. package/dist/lib/workspace-project.d.ts +61 -0
  103. package/dist/lib/workspace-project.d.ts.map +1 -0
  104. package/dist/lib/workspace-project.js +231 -0
  105. package/dist/lib/workspace-project.js.map +1 -0
  106. package/dist/lib/workspace-resolver.d.ts +16 -0
  107. package/dist/lib/workspace-resolver.d.ts.map +1 -0
  108. package/dist/lib/workspace-resolver.js +59 -0
  109. package/dist/lib/workspace-resolver.js.map +1 -0
  110. package/dist/lib/workspace-zip.d.ts +12 -0
  111. package/dist/lib/workspace-zip.d.ts.map +1 -0
  112. package/dist/lib/workspace-zip.js +126 -0
  113. package/dist/lib/workspace-zip.js.map +1 -0
  114. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codemap-api.js","sourceRoot":"","sources":["../../src/lib/codemap-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { CodeMapClient } from "./codemap-api.js";
2
+ import type { CurrentWorkspaceInfo } from "./workspace-git.js";
3
+ import { type ResolvedWorkspace } from "./workspace-resolver.js";
4
+ import type { ProjectImportDetail } from "./api-types.js";
5
+ type ProjectLike = {
6
+ repositoryUrl?: string | null;
7
+ localWorkspacePath?: string | null;
8
+ };
9
+ export type ImportHealthState = "ready" | "stale" | "importing" | "parse_pending" | "failed" | "missing_import" | "unknown";
10
+ export type ImportHealthNextAction = "none" | "reimport" | "inspect_import_error";
11
+ export interface ImportHealth {
12
+ state: ImportHealthState;
13
+ isReady: boolean;
14
+ isStale: boolean;
15
+ needsReimport: boolean;
16
+ nextAction: ImportHealthNextAction;
17
+ latestImport: ProjectImportDetail | null;
18
+ workspace: CurrentWorkspaceInfo | null;
19
+ workspaceResolution: ResolvedWorkspace["resolution"] | null;
20
+ commitComparison: {
21
+ status: "same" | "different" | "unknown";
22
+ importCommit: string | null;
23
+ workspaceCommit: string | null;
24
+ };
25
+ }
26
+ export declare function isImportDone(status: ProjectImportDetail["status"]): status is "completed" | "failed";
27
+ export declare function fetchLatestProjectImport(client: CodeMapClient, projectId: string): Promise<import("@codemap-ai/shared/dist/project-entities.js").ProjectImport>;
28
+ export declare function buildImportHealth(input: {
29
+ latestImport: ProjectImportDetail | null;
30
+ workspace: CurrentWorkspaceInfo | null;
31
+ workspaceResolution?: ResolvedWorkspace["resolution"] | null;
32
+ project?: ProjectLike | null;
33
+ }): ImportHealth;
34
+ export declare function getProjectImportHealth(client: CodeMapClient, projectId: string, project?: ProjectLike | null): Promise<ImportHealth>;
35
+ export declare function formatShortCommit(commit: string | null | undefined): string | null;
36
+ export declare function describeImportHealth(health: ImportHealth): string;
37
+ export {};
38
+ //# sourceMappingURL=import-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-health.d.ts","sourceRoot":"","sources":["../../src/lib/import-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,KAAK,WAAW,GAAG;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,OAAO,GACP,OAAO,GACP,WAAW,GACX,eAAe,GACf,QAAQ,GACR,gBAAgB,GAChB,SAAS,CAAC;AAEd,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,UAAU,GACV,sBAAsB,CAAC;AAE3B,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,sBAAsB,CAAC;IACnC,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACvC,mBAAmB,EAAE,iBAAiB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC5D,gBAAgB,EAAE;QAChB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;QACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;CACH;AA4CD,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,oCAEjE;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,gFAQlB;AAoBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACvC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC7D,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC9B,GAAG,YAAY,CAiHf;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,yBAa7B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,iBAElE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,UAiBxD"}
@@ -0,0 +1,186 @@
1
+ import { resolveWorkspace, } from "./workspace-resolver.js";
2
+ function normalizeRepositoryUrl(value) {
3
+ const trimmed = value.trim().replace(/\.git$/i, "").replace(/\/+$/, "");
4
+ const githubSshMatch = /^git@github\.com:(.+)$/i.exec(trimmed);
5
+ if (githubSshMatch?.[1]) {
6
+ return `github.com/${githubSshMatch[1].toLowerCase()}`;
7
+ }
8
+ try {
9
+ const url = new URL(trimmed);
10
+ if (url.hostname.toLowerCase() === "github.com") {
11
+ return `github.com/${url.pathname.replace(/^\/+/, "").toLowerCase()}`;
12
+ }
13
+ }
14
+ catch {
15
+ // Non-URL remotes fall through to basic normalized string comparison.
16
+ }
17
+ return trimmed.toLowerCase();
18
+ }
19
+ function shouldCompareWorkspaceCommit(project, workspace) {
20
+ if (!workspace || !project)
21
+ return false;
22
+ if (project.repositoryUrl &&
23
+ workspace.remoteUrl &&
24
+ normalizeRepositoryUrl(project.repositoryUrl) ===
25
+ normalizeRepositoryUrl(workspace.remoteUrl)) {
26
+ return true;
27
+ }
28
+ return Boolean(project.localWorkspacePath &&
29
+ workspace.repoRootPath &&
30
+ project.localWorkspacePath === workspace.repoRootPath);
31
+ }
32
+ export function isImportDone(status) {
33
+ return status === "completed" || status === "failed";
34
+ }
35
+ export async function fetchLatestProjectImport(client, projectId) {
36
+ const imports = await client.request(`/projects/${encodeURIComponent(projectId)}/imports`, { authRequired: true });
37
+ return imports[0] ?? null;
38
+ }
39
+ function compareCommits(latestImport, workspace) {
40
+ const importCommit = latestImport?.commitSha ?? null;
41
+ const workspaceCommit = workspace?.commitSha ?? null;
42
+ if (!importCommit || !workspaceCommit) {
43
+ return { status: "unknown", importCommit, workspaceCommit };
44
+ }
45
+ return {
46
+ status: importCommit === workspaceCommit ? "same" : "different",
47
+ importCommit,
48
+ workspaceCommit,
49
+ };
50
+ }
51
+ export function buildImportHealth(input) {
52
+ const { latestImport, workspace, project } = input;
53
+ const comparableWorkspace = shouldCompareWorkspaceCommit(project, workspace)
54
+ ? workspace
55
+ : null;
56
+ const workspaceResolution = comparableWorkspace
57
+ ? input.workspaceResolution ?? null
58
+ : null;
59
+ const commitComparison = compareCommits(latestImport, comparableWorkspace);
60
+ if (!latestImport) {
61
+ return {
62
+ state: "missing_import",
63
+ isReady: false,
64
+ isStale: false,
65
+ needsReimport: true,
66
+ nextAction: "reimport",
67
+ latestImport,
68
+ workspace: comparableWorkspace,
69
+ workspaceResolution,
70
+ commitComparison,
71
+ };
72
+ }
73
+ if (latestImport.status === "failed" || latestImport.parseStatus === "failed") {
74
+ return {
75
+ state: "failed",
76
+ isReady: false,
77
+ isStale: false,
78
+ needsReimport: true,
79
+ nextAction: "inspect_import_error",
80
+ latestImport,
81
+ workspace: comparableWorkspace,
82
+ workspaceResolution,
83
+ commitComparison,
84
+ };
85
+ }
86
+ if (latestImport.status === "queued" || latestImport.status === "running") {
87
+ return {
88
+ state: "importing",
89
+ isReady: false,
90
+ isStale: false,
91
+ needsReimport: false,
92
+ nextAction: "reimport",
93
+ latestImport,
94
+ workspace: comparableWorkspace,
95
+ workspaceResolution,
96
+ commitComparison,
97
+ };
98
+ }
99
+ if (latestImport.parseStatus === "pending" ||
100
+ latestImport.parseStatus === "queued" ||
101
+ latestImport.parseStatus === "running") {
102
+ return {
103
+ state: "parse_pending",
104
+ isReady: false,
105
+ isStale: false,
106
+ needsReimport: false,
107
+ nextAction: "reimport",
108
+ latestImport,
109
+ workspace: comparableWorkspace,
110
+ workspaceResolution,
111
+ commitComparison,
112
+ };
113
+ }
114
+ if (latestImport.status === "completed" &&
115
+ latestImport.parseStatus === "completed" &&
116
+ commitComparison.status === "different") {
117
+ return {
118
+ state: "stale",
119
+ isReady: false,
120
+ isStale: true,
121
+ needsReimport: true,
122
+ nextAction: "reimport",
123
+ latestImport,
124
+ workspace: comparableWorkspace,
125
+ workspaceResolution,
126
+ commitComparison,
127
+ };
128
+ }
129
+ if (latestImport.status === "completed" && latestImport.parseStatus === "completed") {
130
+ return {
131
+ state: "ready",
132
+ isReady: true,
133
+ isStale: false,
134
+ needsReimport: false,
135
+ nextAction: "none",
136
+ latestImport,
137
+ workspace: comparableWorkspace,
138
+ workspaceResolution,
139
+ commitComparison,
140
+ };
141
+ }
142
+ return {
143
+ state: "unknown",
144
+ isReady: false,
145
+ isStale: false,
146
+ needsReimport: false,
147
+ nextAction: "reimport",
148
+ latestImport,
149
+ workspace: comparableWorkspace,
150
+ workspaceResolution,
151
+ commitComparison,
152
+ };
153
+ }
154
+ export async function getProjectImportHealth(client, projectId, project) {
155
+ const [latestImport, resolvedWorkspace] = await Promise.all([
156
+ fetchLatestProjectImport(client, projectId),
157
+ resolveWorkspace({ project }),
158
+ ]);
159
+ return buildImportHealth({
160
+ latestImport,
161
+ workspace: resolvedWorkspace.workspace,
162
+ workspaceResolution: resolvedWorkspace.resolution,
163
+ project,
164
+ });
165
+ }
166
+ export function formatShortCommit(commit) {
167
+ return commit ? commit.slice(0, 8) : null;
168
+ }
169
+ export function describeImportHealth(health) {
170
+ const lines = [
171
+ `Index health: ${health.state}`,
172
+ health.latestImport?.commitSha
173
+ ? `Import commit: ${formatShortCommit(health.latestImport.commitSha)}`
174
+ : null,
175
+ health.workspace?.commitSha
176
+ ? `Local commit: ${formatShortCommit(health.workspace.commitSha)}`
177
+ : null,
178
+ health.workspaceResolution ? `Workspace: ${health.workspaceResolution}` : null,
179
+ health.commitComparison.status === "different"
180
+ ? "Local workspace differs from the latest indexed commit."
181
+ : null,
182
+ health.nextAction !== "none" ? `Next action: ${health.nextAction}` : null,
183
+ ];
184
+ return lines.filter(Boolean).join("\n");
185
+ }
186
+ //# sourceMappingURL=import-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-health.js","sourceRoot":"","sources":["../../src/lib/import-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { CodeMapClient } from "./codemap-api.js";
2
+ import { SQLiteIndexStore } from "./sqlite-index-store.js";
3
+ import type { LocalIndexSummary } from "./sqlite-index-store.js";
4
+ export type { LocalIndexedFile, LocalImportedBy, LocalIndexSummary, LocalFileParseResponse, SQLiteIndexStore, } from "./sqlite-index-store.js";
5
+ export declare function buildLocalIndex(input?: {
6
+ workspaceRootPath?: string;
7
+ }): Promise<SQLiteIndexStore>;
8
+ export declare function readLocalIndex(workspaceRootPath?: string): Promise<SQLiteIndexStore | null>;
9
+ export declare function isLocalIndexStale(store: SQLiteIndexStore): Promise<boolean>;
10
+ export declare function ensureLocalIndex(input?: {
11
+ force?: boolean;
12
+ workspaceRootPath?: string;
13
+ }): Promise<SQLiteIndexStore>;
14
+ /**
15
+ * Incrementally re-index a single file. Updates only the given file's data
16
+ * in the SQLite index without a full workspace scan.
17
+ * Returns true if the file was updated, false if it couldn't be found/read.
18
+ */
19
+ export declare function refreshLocalFile(relativePath: string, workspaceRootPath?: string): Promise<boolean>;
20
+ /**
21
+ * Remove a single file from the local SQLite index.
22
+ * Use after delete_file tool to immediately purge stale entries.
23
+ * Returns true if the file was found and removed, false otherwise.
24
+ */
25
+ export declare function removeLocalFile(relativePath: string, workspaceRootPath?: string): Promise<boolean>;
26
+ export declare function getLocalIndexSummary(store: SQLiteIndexStore): Promise<LocalIndexSummary>;
27
+ export declare function ensureLocalIndexWithSummary(input?: {
28
+ force?: boolean;
29
+ }): Promise<{
30
+ store: SQLiteIndexStore;
31
+ summary: LocalIndexSummary;
32
+ }>;
33
+ /**
34
+ * Returns true when the cloud API served a file with status "ready" but no
35
+ * actual text content — which happens when the cloud index is stale relative
36
+ * to local uncommitted edits. Callers should fall back to the local index.
37
+ */
38
+ export declare function isCloudContentEmpty(content: {
39
+ status: string;
40
+ content: string | null;
41
+ } | null): boolean;
42
+ export declare function shouldFallbackToLocal(error: unknown): boolean;
43
+ export declare function shouldUseLocalIndexBeforeRemote(client: CodeMapClient, projectId: string): Promise<boolean>;
44
+ export declare function localIndexCachePath(workspaceRootPath: string): string;
45
+ /**
46
+ * Normalize a file path to be repo-relative.
47
+ * If an absolute path is given (e.g. from bash output or another tool),
48
+ * strip the workspace root prefix so get_file / get_file can find it in the index.
49
+ * Returns the path unchanged if it is already relative or not under the workspace root.
50
+ */
51
+ export declare function toRepoRelativePath(filePath: string, workspaceRootPath: string): string;
52
+ //# sourceMappingURL=local-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-index.d.ts","sourceRoot":"","sources":["../../src/lib/local-index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EACL,gBAAgB,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAGV,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAmDjC,wBAAsB,eAAe,CAAC,KAAK,CAAC,EAAE;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyC5B;AAED,wBAAsB,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAajG;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CASjF;AAYD,wBAAsB,gBAAgB,CAAC,KAAK,CAAC,EAAE;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsB5B;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,OAAO,CAAC,CA+BlB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAG9F;AAED,wBAAsB,2BAA2B,CAAC,KAAK,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;;;GAI5E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GACzD,OAAO,CAET;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,WAYnD;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,oBAuBlB;AAED,wBAAgB,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,UAE5D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAQtF"}
@@ -0,0 +1,262 @@
1
+ import path from "node:path";
2
+ import { collectSingleFile, collectWorkspaceFiles, loadTypeScriptResolverConfigs, parseWorkspaceFileSemantics, PARSE_TOOL_NAME, PARSE_TOOL_VERSION, } from "@codemap-ai/code-index";
3
+ import { resolveWorkspace } from "./workspace-resolver.js";
4
+ import { fetchLatestProjectImport } from "./import-health.js";
5
+ import { SQLiteIndexStore, sqliteIndexDbPath, } from "./sqlite-index-store.js";
6
+ // Module-level cache — reused across tool calls in the same MCP server process
7
+ let _cachedStore = null;
8
+ function toLocalFile(file, semantics) {
9
+ return {
10
+ path: file.path,
11
+ dirPath: file.dirPath,
12
+ baseName: file.baseName,
13
+ extension: file.extension,
14
+ language: file.language,
15
+ mimeType: file.mimeType,
16
+ sizeBytes: file.sizeBytes,
17
+ lineCount: file.lineCount,
18
+ parseStatus: file.parseStatus,
19
+ isBinary: file.isBinary,
20
+ isText: file.isText,
21
+ contentSha256: file.contentSha256,
22
+ content: file.content,
23
+ symbols: semantics.symbols,
24
+ imports: semantics.imports,
25
+ importedBy: [],
26
+ exports: semantics.exports,
27
+ };
28
+ }
29
+ function attachIncomingImports(files) {
30
+ const byPath = new Map(files.map((f) => [f.path, f]));
31
+ for (const file of files) {
32
+ for (const imp of file.imports) {
33
+ if (!imp.targetPathText)
34
+ continue;
35
+ const target = byPath.get(imp.targetPathText);
36
+ if (!target)
37
+ continue;
38
+ target.importedBy.push({
39
+ sourceFilePath: file.path,
40
+ moduleSpecifier: imp.moduleSpecifier,
41
+ importKind: imp.importKind,
42
+ resolutionKind: imp.resolutionKind,
43
+ startLine: imp.line,
44
+ startCol: imp.col,
45
+ endLine: imp.endLine,
46
+ endCol: imp.endCol,
47
+ });
48
+ }
49
+ }
50
+ }
51
+ export async function buildLocalIndex(input) {
52
+ const resolved = input?.workspaceRootPath
53
+ ? {
54
+ workspaceRootPath: input.workspaceRootPath,
55
+ workspace: await resolveWorkspace({ cwd: input.workspaceRootPath }).then((w) => w.workspace),
56
+ }
57
+ : await resolveWorkspace();
58
+ const workspaceRootPath = resolved.workspaceRootPath;
59
+ const dbPath = sqliteIndexDbPath(workspaceRootPath);
60
+ const files = await collectWorkspaceFiles(workspaceRootPath);
61
+ const filePathSet = new Set(files.map((f) => f.path));
62
+ const resolverConfigs = await loadTypeScriptResolverConfigs(workspaceRootPath);
63
+ const indexedFiles = [];
64
+ for (const file of files) {
65
+ const semantics = await parseWorkspaceFileSemantics({
66
+ file,
67
+ filePathSet,
68
+ projectImportId: "local",
69
+ workspacePath: workspaceRootPath,
70
+ resolverConfigs,
71
+ });
72
+ indexedFiles.push(toLocalFile(file, semantics));
73
+ }
74
+ attachIncomingImports(indexedFiles);
75
+ const store = SQLiteIndexStore.open(dbPath);
76
+ store.write(indexedFiles, {
77
+ indexedAt: new Date().toISOString(),
78
+ commitSha: resolved.workspace?.commitSha ?? null,
79
+ workspaceRootPath,
80
+ cachePath: dbPath,
81
+ parserName: PARSE_TOOL_NAME,
82
+ parserVersion: PARSE_TOOL_VERSION,
83
+ });
84
+ _cachedStore = store;
85
+ return store;
86
+ }
87
+ export async function readLocalIndex(workspaceRootPath) {
88
+ const workspace = workspaceRootPath
89
+ ? { workspaceRootPath }
90
+ : await resolveWorkspace();
91
+ const dbPath = sqliteIndexDbPath(workspace.workspaceRootPath);
92
+ if (!SQLiteIndexStore.exists(dbPath))
93
+ return null;
94
+ try {
95
+ const store = SQLiteIndexStore.open(dbPath);
96
+ if (!store.getMeta())
97
+ return null;
98
+ return store;
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ export async function isLocalIndexStale(store) {
105
+ const meta = store.getMeta();
106
+ if (!meta)
107
+ return true;
108
+ try {
109
+ const files = await collectWorkspaceFiles(meta.workspaceRootPath);
110
+ return store.isStale(files);
111
+ }
112
+ catch {
113
+ return true;
114
+ }
115
+ }
116
+ async function collectFilesForStore(store) {
117
+ const meta = store.getMeta();
118
+ if (!meta)
119
+ return [];
120
+ try {
121
+ return await collectWorkspaceFiles(meta.workspaceRootPath);
122
+ }
123
+ catch {
124
+ return [];
125
+ }
126
+ }
127
+ export async function ensureLocalIndex(input) {
128
+ if (input?.force) {
129
+ _cachedStore = null;
130
+ return buildLocalIndex(input);
131
+ }
132
+ if (_cachedStore) {
133
+ const files = await collectFilesForStore(_cachedStore);
134
+ if (files.length > 0 && !_cachedStore.isStale(files))
135
+ return _cachedStore;
136
+ _cachedStore = null;
137
+ }
138
+ const existing = await readLocalIndex(input?.workspaceRootPath);
139
+ if (existing) {
140
+ const files = await collectFilesForStore(existing);
141
+ if (files.length > 0 && !existing.isStale(files)) {
142
+ _cachedStore = existing;
143
+ return existing;
144
+ }
145
+ }
146
+ return buildLocalIndex(input);
147
+ }
148
+ /**
149
+ * Incrementally re-index a single file. Updates only the given file's data
150
+ * in the SQLite index without a full workspace scan.
151
+ * Returns true if the file was updated, false if it couldn't be found/read.
152
+ */
153
+ export async function refreshLocalFile(relativePath, workspaceRootPath) {
154
+ // Get or build the store
155
+ const store = _cachedStore ?? await readLocalIndex(workspaceRootPath) ?? await buildLocalIndex({ workspaceRootPath });
156
+ const meta = store.getMeta();
157
+ if (!meta)
158
+ return false;
159
+ const candidate = await collectSingleFile(relativePath, meta.workspaceRootPath);
160
+ if (!candidate || !candidate.isParseable)
161
+ return false;
162
+ // Get current file set for import resolution context
163
+ const existingFiles = store.getAllFilePaths();
164
+ const filePathSet = new Set(existingFiles);
165
+ // Ensure the current file is in the set (it may be a new file)
166
+ filePathSet.add(candidate.path);
167
+ const resolverConfigs = await loadTypeScriptResolverConfigs(meta.workspaceRootPath);
168
+ const semantics = await parseWorkspaceFileSemantics({
169
+ file: candidate,
170
+ filePathSet,
171
+ projectImportId: "local",
172
+ workspacePath: meta.workspaceRootPath,
173
+ resolverConfigs,
174
+ });
175
+ const localFile = toLocalFile(candidate, semantics);
176
+ store.upsertFile(localFile);
177
+ // Invalidate cached store so next ensureLocalIndex re-checks freshness
178
+ _cachedStore = null;
179
+ return true;
180
+ }
181
+ /**
182
+ * Remove a single file from the local SQLite index.
183
+ * Use after delete_file tool to immediately purge stale entries.
184
+ * Returns true if the file was found and removed, false otherwise.
185
+ */
186
+ export async function removeLocalFile(relativePath, workspaceRootPath) {
187
+ const store = _cachedStore ?? await readLocalIndex(workspaceRootPath);
188
+ if (!store)
189
+ return false;
190
+ const removed = store.removeFileFromIndex(relativePath);
191
+ _cachedStore = null;
192
+ return removed;
193
+ }
194
+ export async function getLocalIndexSummary(store) {
195
+ const files = await collectFilesForStore(store);
196
+ return store.getSummary(files.length > 0 ? store.isStale(files) : false);
197
+ }
198
+ export async function ensureLocalIndexWithSummary(input) {
199
+ const store = await ensureLocalIndex(input);
200
+ const summary = store.getSummary(false);
201
+ return { store, summary };
202
+ }
203
+ /**
204
+ * Returns true when the cloud API served a file with status "ready" but no
205
+ * actual text content — which happens when the cloud index is stale relative
206
+ * to local uncommitted edits. Callers should fall back to the local index.
207
+ */
208
+ export function isCloudContentEmpty(content) {
209
+ return content?.status === "ready" && !content.content;
210
+ }
211
+ export function shouldFallbackToLocal(error) {
212
+ const message = error instanceof Error ? error.message : String(error);
213
+ return (message.includes("Not authenticated") ||
214
+ message.includes("Failed to reach CodeMap API") ||
215
+ message.includes("CodeMap API returned 401") ||
216
+ message.includes("CodeMap API returned 403") ||
217
+ message.includes("CodeMap API returned 404") ||
218
+ message.includes("CodeMap API returned 409") ||
219
+ message.includes("CodeMap API returned 422") ||
220
+ message.includes("Unexpected response from API"));
221
+ }
222
+ export async function shouldUseLocalIndexBeforeRemote(client, projectId) {
223
+ try {
224
+ const [latestImport, workspace] = await Promise.all([
225
+ fetchLatestProjectImport(client, projectId),
226
+ resolveWorkspace(),
227
+ ]);
228
+ if (!latestImport)
229
+ return true;
230
+ if (latestImport.status !== "completed" || latestImport.parseStatus !== "completed") {
231
+ return true;
232
+ }
233
+ if (latestImport.commitSha &&
234
+ workspace.workspace?.commitSha &&
235
+ latestImport.commitSha !== workspace.workspace.commitSha) {
236
+ return true;
237
+ }
238
+ return false;
239
+ }
240
+ catch (error) {
241
+ return shouldFallbackToLocal(error);
242
+ }
243
+ }
244
+ export function localIndexCachePath(workspaceRootPath) {
245
+ return path.join(workspaceRootPath, ".codemap", "local-index.db");
246
+ }
247
+ /**
248
+ * Normalize a file path to be repo-relative.
249
+ * If an absolute path is given (e.g. from bash output or another tool),
250
+ * strip the workspace root prefix so get_file / get_file can find it in the index.
251
+ * Returns the path unchanged if it is already relative or not under the workspace root.
252
+ */
253
+ export function toRepoRelativePath(filePath, workspaceRootPath) {
254
+ const normalized = path.normalize(filePath);
255
+ const root = path.normalize(workspaceRootPath);
256
+ if (path.isAbsolute(normalized) && normalized.startsWith(root)) {
257
+ const rel = normalized.slice(root.length);
258
+ return rel.startsWith(path.sep) ? rel.slice(1) : rel;
259
+ }
260
+ return filePath;
261
+ }
262
+ //# sourceMappingURL=local-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-index.js","sourceRoot":"","sources":["../../src/lib/local-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface MarkdownFenceInput {
2
+ extension?: string | null;
3
+ language?: string | null;
4
+ path?: string | null;
5
+ }
6
+ export declare function markdownFenceLanguage(input: MarkdownFenceInput): string;
7
+ export declare function markdownFenceStart(input: MarkdownFenceInput): string;
8
+ //# sourceMappingURL=markdown-fence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-fence.d.ts","sourceRoot":"","sources":["../../src/lib/markdown-fence.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AA8FD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAUvE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAEpE"}