@grackle-ai/server 0.53.2 → 0.53.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credential-providers.d.ts +22 -5
- package/dist/credential-providers.d.ts.map +1 -1
- package/dist/credential-providers.js +37 -19
- package/dist/credential-providers.js.map +1 -1
- package/dist/github-import.d.ts +118 -4
- package/dist/github-import.d.ts.map +1 -1
- package/dist/github-import.js +185 -131
- package/dist/github-import.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { BetterSQLite3Database } from "drizzle-orm/better-sqlite3";
|
|
1
2
|
import { powerline } from "@grackle-ai/common";
|
|
3
|
+
import * as schema from "./schema.js";
|
|
2
4
|
/** Configuration for which credential providers are enabled. */
|
|
3
5
|
export interface CredentialProviderConfig {
|
|
4
6
|
claude: "off" | "subscription" | "api_key";
|
|
@@ -12,15 +14,30 @@ export declare const VALID_PROVIDERS: readonly string[];
|
|
|
12
14
|
export declare const VALID_CLAUDE_VALUES: ReadonlySet<string>;
|
|
13
15
|
/** Valid values for toggle-style providers (github, copilot, codex). */
|
|
14
16
|
export declare const VALID_TOGGLE_VALUES: ReadonlySet<string>;
|
|
15
|
-
/**
|
|
16
|
-
export
|
|
17
|
+
/** Drizzle database instance type used by credential-provider functions. */
|
|
18
|
+
export type DatabaseInstance = BetterSQLite3Database<typeof schema>;
|
|
19
|
+
/**
|
|
20
|
+
* Parse a raw JSON string into a validated {@link CredentialProviderConfig}.
|
|
21
|
+
* Invalid or missing fields fall back to {@link DEFAULT_CONFIG} values.
|
|
22
|
+
* Throws if the JSON is syntactically invalid — callers decide how to handle the error.
|
|
23
|
+
* Non-object values (e.g. `"null"`, `"42"`) are treated as empty and fall back to defaults.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseCredentialProviderConfig(rawJson: string): CredentialProviderConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Read the current credential provider configuration from the database.
|
|
28
|
+
* @param database - Optional Drizzle instance; defaults to the module-level db.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getCredentialProviders(database?: DatabaseInstance): CredentialProviderConfig;
|
|
17
31
|
/**
|
|
18
32
|
* Validate that a value is a well-formed credential provider config.
|
|
19
33
|
* Returns true if all fields have valid values.
|
|
20
34
|
*/
|
|
21
35
|
export declare function isValidCredentialProviderConfig(value: unknown): value is CredentialProviderConfig;
|
|
22
|
-
/**
|
|
23
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Persist credential provider configuration to the database.
|
|
38
|
+
* @param database - Optional Drizzle instance; defaults to the module-level db.
|
|
39
|
+
*/
|
|
40
|
+
export declare function setCredentialProviders(config: CredentialProviderConfig, database?: DatabaseInstance): void;
|
|
24
41
|
/**
|
|
25
42
|
* Build a token bundle containing enabled provider credentials.
|
|
26
43
|
* When `runtime` is a known {@link RuntimeName}, only providers mapped to that runtime are included.
|
|
@@ -29,5 +46,5 @@ export declare function setCredentialProviders(config: CredentialProviderConfig)
|
|
|
29
46
|
* (fails safe rather than exposing all credentials for an unrecognized runtime).
|
|
30
47
|
* Reads values fresh from `process.env` or disk at call time.
|
|
31
48
|
*/
|
|
32
|
-
export declare function buildProviderTokenBundle(runtime?: string): powerline.TokenBundle;
|
|
49
|
+
export declare function buildProviderTokenBundle(runtime?: string, database?: DatabaseInstance): powerline.TokenBundle;
|
|
33
50
|
//# sourceMappingURL=credential-providers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-providers.d.ts","sourceRoot":"","sources":["../src/credential-providers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credential-providers.d.ts","sourceRoot":"","sources":["../src/credential-providers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAKxE,OAAO,EAAE,SAAS,EAAoB,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAKtC,gEAAgE;AAChE,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,KAAK,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3C,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAaD,4BAA4B;AAC5B,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA6C,CAAC;AAE3F,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAA+C,CAAC;AAEpG,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAA0B,CAAC;AAE/E,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;AAIpE;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CASvF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,wBAAwB,CAkB5F;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,wBAAwB,CAWjG;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,wBAAwB,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAU1G;AAkBD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC,WAAW,CA8H7G"}
|
|
@@ -9,7 +9,7 @@ import { join } from "node:path";
|
|
|
9
9
|
import { create } from "@bufbuild/protobuf";
|
|
10
10
|
import { powerline } from "@grackle-ai/common";
|
|
11
11
|
import db from "./db.js";
|
|
12
|
-
import
|
|
12
|
+
import * as schema from "./schema.js";
|
|
13
13
|
import { logger } from "./logger.js";
|
|
14
14
|
/** Settings table key for credential provider configuration. */
|
|
15
15
|
const SETTINGS_KEY = "credential_providers";
|
|
@@ -27,24 +27,38 @@ export const VALID_CLAUDE_VALUES = new Set(["off", "subscription", "api_key"]);
|
|
|
27
27
|
/** Valid values for toggle-style providers (github, copilot, codex). */
|
|
28
28
|
export const VALID_TOGGLE_VALUES = new Set(["off", "on"]);
|
|
29
29
|
// ─── Read / Write ──────────────────────────────────────────
|
|
30
|
-
/**
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Parse a raw JSON string into a validated {@link CredentialProviderConfig}.
|
|
32
|
+
* Invalid or missing fields fall back to {@link DEFAULT_CONFIG} values.
|
|
33
|
+
* Throws if the JSON is syntactically invalid — callers decide how to handle the error.
|
|
34
|
+
* Non-object values (e.g. `"null"`, `"42"`) are treated as empty and fall back to defaults.
|
|
35
|
+
*/
|
|
36
|
+
export function parseCredentialProviderConfig(rawJson) {
|
|
37
|
+
const raw = JSON.parse(rawJson);
|
|
38
|
+
const parsed = (typeof raw === "object" && raw !== null ? raw : {});
|
|
39
|
+
return {
|
|
40
|
+
claude: VALID_CLAUDE_VALUES.has(parsed.claude ?? "") ? parsed.claude : DEFAULT_CONFIG.claude,
|
|
41
|
+
github: VALID_TOGGLE_VALUES.has(parsed.github ?? "") ? parsed.github : DEFAULT_CONFIG.github,
|
|
42
|
+
copilot: VALID_TOGGLE_VALUES.has(parsed.copilot ?? "") ? parsed.copilot : DEFAULT_CONFIG.copilot,
|
|
43
|
+
codex: VALID_TOGGLE_VALUES.has(parsed.codex ?? "") ? parsed.codex : DEFAULT_CONFIG.codex,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Read the current credential provider configuration from the database.
|
|
48
|
+
* @param database - Optional Drizzle instance; defaults to the module-level db.
|
|
49
|
+
*/
|
|
50
|
+
export function getCredentialProviders(database) {
|
|
51
|
+
const conn = database ?? db;
|
|
52
|
+
const row = conn
|
|
33
53
|
.select()
|
|
34
|
-
.from(settings)
|
|
35
|
-
.where(eq(settings.key, SETTINGS_KEY))
|
|
54
|
+
.from(schema.settings)
|
|
55
|
+
.where(eq(schema.settings.key, SETTINGS_KEY))
|
|
36
56
|
.get();
|
|
37
57
|
if (!row) {
|
|
38
58
|
return { ...DEFAULT_CONFIG };
|
|
39
59
|
}
|
|
40
60
|
try {
|
|
41
|
-
|
|
42
|
-
return {
|
|
43
|
-
claude: VALID_CLAUDE_VALUES.has(parsed.claude ?? "") ? parsed.claude : DEFAULT_CONFIG.claude,
|
|
44
|
-
github: VALID_TOGGLE_VALUES.has(parsed.github ?? "") ? parsed.github : DEFAULT_CONFIG.github,
|
|
45
|
-
copilot: VALID_TOGGLE_VALUES.has(parsed.copilot ?? "") ? parsed.copilot : DEFAULT_CONFIG.copilot,
|
|
46
|
-
codex: VALID_TOGGLE_VALUES.has(parsed.codex ?? "") ? parsed.codex : DEFAULT_CONFIG.codex,
|
|
47
|
-
};
|
|
61
|
+
return parseCredentialProviderConfig(row.value);
|
|
48
62
|
}
|
|
49
63
|
catch {
|
|
50
64
|
logger.warn("Invalid credential_providers setting; returning defaults");
|
|
@@ -65,13 +79,17 @@ export function isValidCredentialProviderConfig(value) {
|
|
|
65
79
|
VALID_TOGGLE_VALUES.has(v.copilot) &&
|
|
66
80
|
VALID_TOGGLE_VALUES.has(v.codex));
|
|
67
81
|
}
|
|
68
|
-
/**
|
|
69
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Persist credential provider configuration to the database.
|
|
84
|
+
* @param database - Optional Drizzle instance; defaults to the module-level db.
|
|
85
|
+
*/
|
|
86
|
+
export function setCredentialProviders(config, database) {
|
|
87
|
+
const conn = database ?? db;
|
|
70
88
|
const value = JSON.stringify(config);
|
|
71
|
-
|
|
89
|
+
conn.insert(schema.settings)
|
|
72
90
|
.values({ key: SETTINGS_KEY, value })
|
|
73
91
|
.onConflictDoUpdate({
|
|
74
|
-
target: settings.key,
|
|
92
|
+
target: schema.settings.key,
|
|
75
93
|
set: { value },
|
|
76
94
|
})
|
|
77
95
|
.run();
|
|
@@ -97,8 +115,8 @@ const RUNTIME_PROVIDERS = {
|
|
|
97
115
|
* (fails safe rather than exposing all credentials for an unrecognized runtime).
|
|
98
116
|
* Reads values fresh from `process.env` or disk at call time.
|
|
99
117
|
*/
|
|
100
|
-
export function buildProviderTokenBundle(runtime) {
|
|
101
|
-
const config = getCredentialProviders();
|
|
118
|
+
export function buildProviderTokenBundle(runtime, database) {
|
|
119
|
+
const config = getCredentialProviders(database);
|
|
102
120
|
// When runtime is given, look it up in the map. Unknown runtimes get [] (empty, not all providers).
|
|
103
121
|
const runtimeProviders = runtime !== undefined
|
|
104
122
|
? (Object.hasOwn(RUNTIME_PROVIDERS, runtime) ? RUNTIME_PROVIDERS[runtime] : [])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-providers.js","sourceRoot":"","sources":["../src/credential-providers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"credential-providers.js","sourceRoot":"","sources":["../src/credential-providers.ts"],"names":[],"mappings":"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"}
|
package/dist/github-import.d.ts
CHANGED
|
@@ -1,3 +1,43 @@
|
|
|
1
|
+
/** Wraps `gh` CLI execution for testability. */
|
|
2
|
+
export interface GitHubClient {
|
|
3
|
+
/** Execute a `gh` CLI command and return stdout. */
|
|
4
|
+
exec(args: string[], options: {
|
|
5
|
+
encoding: BufferEncoding;
|
|
6
|
+
maxBuffer: number;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
}): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
/** Wraps task/workspace store operations for testability. */
|
|
11
|
+
export interface TaskPersistence {
|
|
12
|
+
/** Look up a workspace by ID. */
|
|
13
|
+
getWorkspace(workspaceId: string): {
|
|
14
|
+
name: string;
|
|
15
|
+
} | undefined;
|
|
16
|
+
/** List all tasks in a workspace. */
|
|
17
|
+
listTasks(workspaceId: string): Array<{
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
}>;
|
|
21
|
+
/** Create a new task. */
|
|
22
|
+
createTask(id: string, workspaceId: string, title: string, description: string, dependsOn: string[], workspaceSlug: string, parentTaskId: string, canDecompose: boolean): void;
|
|
23
|
+
/** Set the dependsOn list for a task. */
|
|
24
|
+
setTaskDependsOn(taskId: string, dependsOn: string[]): void;
|
|
25
|
+
}
|
|
26
|
+
/** Wraps event bus broadcasting for testability. */
|
|
27
|
+
export interface ImportEventEmitter {
|
|
28
|
+
/** Emit a task lifecycle event. */
|
|
29
|
+
emit(type: "task.created" | "task.updated", payload: {
|
|
30
|
+
taskId: string;
|
|
31
|
+
workspaceId: string;
|
|
32
|
+
}): void;
|
|
33
|
+
}
|
|
34
|
+
/** Concurrency guard for imports. */
|
|
35
|
+
export interface ImportLock {
|
|
36
|
+
/** Acquire the lock. Throws if already held. */
|
|
37
|
+
acquire(): void;
|
|
38
|
+
/** Release the lock. */
|
|
39
|
+
release(): void;
|
|
40
|
+
}
|
|
1
41
|
/** Shape of a single GitHub issue comment as returned by the GraphQL query. */
|
|
2
42
|
export interface GitHubComment {
|
|
3
43
|
/** Login of the comment author. */
|
|
@@ -33,6 +73,50 @@ export interface ImportResult {
|
|
|
33
73
|
/** Number of blocking (dependsOn) relationships created. */
|
|
34
74
|
dependencies: number;
|
|
35
75
|
}
|
|
76
|
+
/** Instruction to create a single task during the persist phase. */
|
|
77
|
+
export interface TaskCreateInstruction {
|
|
78
|
+
/** Generated task ID. */
|
|
79
|
+
id: string;
|
|
80
|
+
/** Formatted title (e.g., "#42: Fix the bug"). */
|
|
81
|
+
title: string;
|
|
82
|
+
/** Full task description including comments. */
|
|
83
|
+
description: string;
|
|
84
|
+
/** Resolved parent task ID, or empty string for root tasks. */
|
|
85
|
+
parentTaskId: string;
|
|
86
|
+
/** Original GitHub issue number. */
|
|
87
|
+
issueNumber: number;
|
|
88
|
+
}
|
|
89
|
+
/** Instruction to set dependsOn for a task during the persist phase. */
|
|
90
|
+
export interface DependencyInstruction {
|
|
91
|
+
/** Task ID to update. */
|
|
92
|
+
taskId: string;
|
|
93
|
+
/** Resolved task IDs that this task depends on. */
|
|
94
|
+
dependsOn: string[];
|
|
95
|
+
}
|
|
96
|
+
/** The output of {@link planImport}: a pure description of what to persist. */
|
|
97
|
+
export interface ImportPlan {
|
|
98
|
+
/** Tasks to create, in topological order. */
|
|
99
|
+
tasksToCreate: TaskCreateInstruction[];
|
|
100
|
+
/** Dependency relationships to set after task creation. */
|
|
101
|
+
dependenciesToSet: DependencyInstruction[];
|
|
102
|
+
/** Number of issues skipped because they already exist. */
|
|
103
|
+
skipped: number;
|
|
104
|
+
/** Number of parent links resolved. */
|
|
105
|
+
linked: number;
|
|
106
|
+
}
|
|
107
|
+
/** Options for dependency injection in {@link importGitHubIssues}. */
|
|
108
|
+
export interface ImportGitHubIssuesOptions {
|
|
109
|
+
/** @internal GitHub CLI client for testing. */
|
|
110
|
+
githubClient?: GitHubClient;
|
|
111
|
+
/** @internal Task/workspace persistence for testing. */
|
|
112
|
+
persistence?: TaskPersistence;
|
|
113
|
+
/** @internal Event broadcaster for testing. */
|
|
114
|
+
eventEmitter?: ImportEventEmitter;
|
|
115
|
+
/** @internal Concurrency lock for testing. */
|
|
116
|
+
importLock?: ImportLock;
|
|
117
|
+
/** @internal ID generator for testing. */
|
|
118
|
+
generateId?: () => string;
|
|
119
|
+
}
|
|
36
120
|
/**
|
|
37
121
|
* Builds the full task description from an issue body and its comments.
|
|
38
122
|
*
|
|
@@ -48,6 +132,34 @@ export interface ImportResult {
|
|
|
48
132
|
* @returns The formatted description string.
|
|
49
133
|
*/
|
|
50
134
|
export declare function buildDescriptionWithComments(body: string, comments: GitHubComment[], hasMoreComments?: boolean): string;
|
|
135
|
+
/**
|
|
136
|
+
* Builds a deduplication map from existing tasks whose titles match
|
|
137
|
+
* the `#<number>: <title>` pattern used by imported GitHub issues.
|
|
138
|
+
*
|
|
139
|
+
* @param existingTasks - Tasks already in the workspace.
|
|
140
|
+
* @returns Maps and sets for deduplication during import planning.
|
|
141
|
+
*/
|
|
142
|
+
export declare function buildExistingIssueMap(existingTasks: Array<{
|
|
143
|
+
id: string;
|
|
144
|
+
title: string;
|
|
145
|
+
}>): {
|
|
146
|
+
issueNumberToTaskId: Map<number, string>;
|
|
147
|
+
existingIssueNumbers: Set<number>;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Given fetched issues and existing state, computes what to create and link
|
|
151
|
+
* without performing any side effects.
|
|
152
|
+
*
|
|
153
|
+
* Performs topological sort, skips existing issues, generates IDs upfront,
|
|
154
|
+
* resolves parent links and blockedBy dependencies, and returns a plan.
|
|
155
|
+
*
|
|
156
|
+
* @param issues - Fetched GitHub issues to import.
|
|
157
|
+
* @param existingIssueNumbers - Issue numbers already imported (to skip).
|
|
158
|
+
* @param existingIssueNumberToTaskId - Map from issue number to existing task ID.
|
|
159
|
+
* @param generateId - Optional ID generator (defaults to `uuid().slice(0, 8)`).
|
|
160
|
+
* @returns An {@link ImportPlan} describing all tasks to create and dependencies to set.
|
|
161
|
+
*/
|
|
162
|
+
export declare function planImport(issues: GitHubIssue[], existingIssueNumbers: Set<number>, existingIssueNumberToTaskId: Map<number, string>, generateId?: () => string): ImportPlan;
|
|
51
163
|
/**
|
|
52
164
|
* Fetches GitHub issues from a repository via the `gh` CLI GraphQL API.
|
|
53
165
|
* Paginates automatically and includes parent sub-issue information.
|
|
@@ -58,9 +170,10 @@ export declare function buildDescriptionWithComments(body: string, comments: Git
|
|
|
58
170
|
* @param includeComments - When `true` (default), fetches issue comments and
|
|
59
171
|
* includes them in each returned {@link GitHubIssue}. Pass `false` to omit
|
|
60
172
|
* comments and reduce payload size.
|
|
173
|
+
* @param client - Optional {@link GitHubClient} for testing (defaults to `gh` CLI).
|
|
61
174
|
* @returns Array of parsed GitHub issues.
|
|
62
175
|
*/
|
|
63
|
-
export declare function fetchGitHubIssues(repo: string, state: string, label?: string, includeComments?: boolean): Promise<GitHubIssue[]>;
|
|
176
|
+
export declare function fetchGitHubIssues(repo: string, state: string, label?: string, includeComments?: boolean, client?: GitHubClient): Promise<GitHubIssue[]>;
|
|
64
177
|
/**
|
|
65
178
|
* Topologically sorts issues so that parents appear before their children.
|
|
66
179
|
* Issues whose parent is outside the import set are treated as roots.
|
|
@@ -77,8 +190,8 @@ export declare function topologicalSortIssues<T extends {
|
|
|
77
190
|
/**
|
|
78
191
|
* Imports GitHub issues as Grackle tasks, with deduplication and parent linking.
|
|
79
192
|
*
|
|
80
|
-
* Orchestrates: fetch issues → dedup against existing tasks →
|
|
81
|
-
*
|
|
193
|
+
* Orchestrates: fetch issues → dedup against existing tasks → plan (pure) →
|
|
194
|
+
* persist tasks → broadcast updates → return summary.
|
|
82
195
|
*
|
|
83
196
|
* Only one import may run at a time; concurrent calls are rejected.
|
|
84
197
|
*
|
|
@@ -89,7 +202,8 @@ export declare function topologicalSortIssues<T extends {
|
|
|
89
202
|
* @param environmentId - Optional environment ID to assign to created tasks.
|
|
90
203
|
* @param includeComments - When `true` (default), appends issue comments to each
|
|
91
204
|
* task description. Pass `false` to import only the issue body (old behavior).
|
|
205
|
+
* @param options - Optional dependency overrides for testing.
|
|
92
206
|
* @returns Summary of imported, linked, and skipped issues.
|
|
93
207
|
*/
|
|
94
|
-
export declare function importGitHubIssues(workspaceId: string, repo: string, state: string, label?: string, _environmentId?: string, includeComments?: boolean): Promise<ImportResult>;
|
|
208
|
+
export declare function importGitHubIssues(workspaceId: string, repo: string, state: string, label?: string, _environmentId?: string, includeComments?: boolean, options?: ImportGitHubIssuesOptions): Promise<ImportResult>;
|
|
95
209
|
//# sourceMappingURL=github-import.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-import.d.ts","sourceRoot":"","sources":["../src/github-import.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"github-import.d.ts","sourceRoot":"","sources":["../src/github-import.ts"],"names":[],"mappings":"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"}
|
package/dist/github-import.js
CHANGED
|
@@ -22,42 +22,65 @@ const ISSUES_PER_PAGE = 100;
|
|
|
22
22
|
const COMMENTS_PER_ISSUE = 25;
|
|
23
23
|
/** Separator inserted between the issue body and each appended comment block. */
|
|
24
24
|
const COMMENT_SEPARATOR = "\n\n---\n\n";
|
|
25
|
-
/**
|
|
26
|
-
* Promise wrapper around `execFile` that resolves with stdout as a string.
|
|
27
|
-
* Includes a timeout to prevent hanging the import lock if `gh` stalls.
|
|
28
|
-
*/
|
|
29
|
-
function execFileAsync(command, args, options) {
|
|
30
|
-
const timeout = options.timeout ?? GH_CLI_TIMEOUT_MS;
|
|
31
|
-
return new Promise((resolve, reject) => {
|
|
32
|
-
execFile(command, args, { ...options, timeout }, (err, stdout, stderr) => {
|
|
33
|
-
if (err) {
|
|
34
|
-
err.stderr = String(stderr);
|
|
35
|
-
reject(err);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
resolve(String(stdout));
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
25
|
/** Maximum number of blockedBy relationships fetched per issue. */
|
|
44
26
|
const BLOCKED_BY_PER_ISSUE = 25;
|
|
27
|
+
// ── Default Implementations ─────────────────────────────────────
|
|
28
|
+
/** Default {@link GitHubClient} that shells out to the `gh` CLI. */
|
|
29
|
+
const NODE_GITHUB_CLIENT = {
|
|
30
|
+
exec(args, options) {
|
|
31
|
+
const timeout = options.timeout ?? GH_CLI_TIMEOUT_MS;
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
execFile("gh", args, { ...options, timeout }, (err, stdout, stderr) => {
|
|
34
|
+
if (err) {
|
|
35
|
+
err.stderr = String(stderr);
|
|
36
|
+
reject(err);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
resolve(String(stdout));
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
/** Default {@link TaskPersistence} delegating to the real stores. */
|
|
46
|
+
const NODE_TASK_PERSISTENCE = {
|
|
47
|
+
getWorkspace(workspaceId) {
|
|
48
|
+
return workspaceStore.getWorkspace(workspaceId);
|
|
49
|
+
},
|
|
50
|
+
listTasks(workspaceId) {
|
|
51
|
+
return taskStore.listTasks(workspaceId);
|
|
52
|
+
},
|
|
53
|
+
createTask(id, workspaceId, title, description, dependsOn, workspaceSlug, parentTaskId, canDecompose) {
|
|
54
|
+
taskStore.createTask(id, workspaceId, title, description, dependsOn, workspaceSlug, parentTaskId, canDecompose);
|
|
55
|
+
},
|
|
56
|
+
setTaskDependsOn(taskId, dependsOn) {
|
|
57
|
+
taskStore.setTaskDependsOn(taskId, dependsOn);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
/** Default {@link ImportEventEmitter} delegating to the real event bus. */
|
|
61
|
+
const NODE_IMPORT_EVENT_EMITTER = {
|
|
62
|
+
emit(type, payload) {
|
|
63
|
+
emit(type, payload);
|
|
64
|
+
},
|
|
65
|
+
};
|
|
45
66
|
/**
|
|
46
67
|
* Simple concurrency guard — only one import runs at a time within this process.
|
|
47
68
|
* Does not prevent concurrent imports from separate server processes sharing the same DB.
|
|
48
69
|
*/
|
|
49
|
-
const
|
|
50
|
-
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
70
|
+
const importLockState = { active: false };
|
|
71
|
+
/** Default {@link ImportLock} using a process-global boolean. */
|
|
72
|
+
const DEFAULT_IMPORT_LOCK = {
|
|
73
|
+
acquire() {
|
|
74
|
+
if (importLockState.active) {
|
|
75
|
+
throw new Error("An import is already in progress. Please wait for it to complete.");
|
|
76
|
+
}
|
|
77
|
+
importLockState.active = true;
|
|
78
|
+
},
|
|
79
|
+
release() {
|
|
80
|
+
importLockState.active = false;
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
// ── Helper Functions ────────────────────────────────────────────
|
|
61
84
|
/**
|
|
62
85
|
* Extracts a human-readable message from an unknown error value.
|
|
63
86
|
*
|
|
@@ -99,6 +122,96 @@ export function buildDescriptionWithComments(body, comments, hasMoreComments = f
|
|
|
99
122
|
}
|
|
100
123
|
return result;
|
|
101
124
|
}
|
|
125
|
+
// ── Pure Transform Functions ────────────────────────────────────
|
|
126
|
+
/**
|
|
127
|
+
* Builds a deduplication map from existing tasks whose titles match
|
|
128
|
+
* the `#<number>: <title>` pattern used by imported GitHub issues.
|
|
129
|
+
*
|
|
130
|
+
* @param existingTasks - Tasks already in the workspace.
|
|
131
|
+
* @returns Maps and sets for deduplication during import planning.
|
|
132
|
+
*/
|
|
133
|
+
export function buildExistingIssueMap(existingTasks) {
|
|
134
|
+
const issueNumberPattern = /^#(\d+):/;
|
|
135
|
+
const issueNumberToTaskId = new Map();
|
|
136
|
+
const existingIssueNumbers = new Set();
|
|
137
|
+
for (const t of existingTasks) {
|
|
138
|
+
const match = t.title.match(issueNumberPattern);
|
|
139
|
+
if (match) {
|
|
140
|
+
const num = Number(match[1]);
|
|
141
|
+
existingIssueNumbers.add(num);
|
|
142
|
+
issueNumberToTaskId.set(num, t.id);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return { issueNumberToTaskId, existingIssueNumbers };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Given fetched issues and existing state, computes what to create and link
|
|
149
|
+
* without performing any side effects.
|
|
150
|
+
*
|
|
151
|
+
* Performs topological sort, skips existing issues, generates IDs upfront,
|
|
152
|
+
* resolves parent links and blockedBy dependencies, and returns a plan.
|
|
153
|
+
*
|
|
154
|
+
* @param issues - Fetched GitHub issues to import.
|
|
155
|
+
* @param existingIssueNumbers - Issue numbers already imported (to skip).
|
|
156
|
+
* @param existingIssueNumberToTaskId - Map from issue number to existing task ID.
|
|
157
|
+
* @param generateId - Optional ID generator (defaults to `uuid().slice(0, 8)`).
|
|
158
|
+
* @returns An {@link ImportPlan} describing all tasks to create and dependencies to set.
|
|
159
|
+
*/
|
|
160
|
+
export function planImport(issues, existingIssueNumbers, existingIssueNumberToTaskId, generateId = () => uuid().slice(0, 8)) {
|
|
161
|
+
// Topological sort: parents before children
|
|
162
|
+
const issueSet = new Set(issues.map((i) => i.number));
|
|
163
|
+
const sorted = topologicalSortIssues(issues, issueSet);
|
|
164
|
+
// Mutable copy of the issue→taskId map so we can track newly generated IDs
|
|
165
|
+
const issueNumberToTaskId = new Map(existingIssueNumberToTaskId);
|
|
166
|
+
const tasksToCreate = [];
|
|
167
|
+
const dependenciesToSet = [];
|
|
168
|
+
let skipped = 0;
|
|
169
|
+
let linked = 0;
|
|
170
|
+
// First pass: generate IDs and resolve parent links
|
|
171
|
+
for (const issue of sorted) {
|
|
172
|
+
if (existingIssueNumbers.has(issue.number)) {
|
|
173
|
+
skipped++;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const id = generateId();
|
|
177
|
+
issueNumberToTaskId.set(issue.number, id);
|
|
178
|
+
const title = `#${issue.number}: ${issue.title}`;
|
|
179
|
+
let parentTaskId = "";
|
|
180
|
+
if (issue.parentNumber !== undefined) {
|
|
181
|
+
const resolvedParentId = issueNumberToTaskId.get(issue.parentNumber);
|
|
182
|
+
if (resolvedParentId) {
|
|
183
|
+
parentTaskId = resolvedParentId;
|
|
184
|
+
linked++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const description = buildDescriptionWithComments(issue.body, issue.comments, issue.commentsHasNextPage);
|
|
188
|
+
tasksToCreate.push({ id, title, description, parentTaskId, issueNumber: issue.number });
|
|
189
|
+
}
|
|
190
|
+
// Build a map for O(1) lookup of issues by number during dependency resolution
|
|
191
|
+
const issueNumberToIssue = new Map();
|
|
192
|
+
for (const issue of sorted) {
|
|
193
|
+
issueNumberToIssue.set(issue.number, issue);
|
|
194
|
+
}
|
|
195
|
+
// Second pass: resolve blockedBy → dependsOn for newly created tasks only
|
|
196
|
+
for (const instruction of tasksToCreate) {
|
|
197
|
+
const issue = issueNumberToIssue.get(instruction.issueNumber);
|
|
198
|
+
if (!issue || issue.blockedByNumbers.length === 0) {
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
const resolvedDeps = [];
|
|
202
|
+
for (const blockerNumber of issue.blockedByNumbers) {
|
|
203
|
+
const blockerTaskId = issueNumberToTaskId.get(blockerNumber);
|
|
204
|
+
if (blockerTaskId) {
|
|
205
|
+
resolvedDeps.push(blockerTaskId);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (resolvedDeps.length > 0) {
|
|
209
|
+
dependenciesToSet.push({ taskId: instruction.id, dependsOn: resolvedDeps });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return { tasksToCreate, dependenciesToSet, skipped, linked };
|
|
213
|
+
}
|
|
214
|
+
// ── Fetch Function ──────────────────────────────────────────────
|
|
102
215
|
/**
|
|
103
216
|
* Fetches GitHub issues from a repository via the `gh` CLI GraphQL API.
|
|
104
217
|
* Paginates automatically and includes parent sub-issue information.
|
|
@@ -109,9 +222,10 @@ export function buildDescriptionWithComments(body, comments, hasMoreComments = f
|
|
|
109
222
|
* @param includeComments - When `true` (default), fetches issue comments and
|
|
110
223
|
* includes them in each returned {@link GitHubIssue}. Pass `false` to omit
|
|
111
224
|
* comments and reduce payload size.
|
|
225
|
+
* @param client - Optional {@link GitHubClient} for testing (defaults to `gh` CLI).
|
|
112
226
|
* @returns Array of parsed GitHub issues.
|
|
113
227
|
*/
|
|
114
|
-
export async function fetchGitHubIssues(repo, state, label, includeComments = true) {
|
|
228
|
+
export async function fetchGitHubIssues(repo, state, label, includeComments = true, client = NODE_GITHUB_CLIENT) {
|
|
115
229
|
const segments = repo.split("/");
|
|
116
230
|
if (segments.length !== 2 || !segments[0] || !segments[1]) {
|
|
117
231
|
throw new Error(`repo must be in "owner/repo" format (received: "${repo}")`);
|
|
@@ -164,7 +278,7 @@ export async function fetchGitHubIssues(repo, state, label, includeComments = tr
|
|
|
164
278
|
}
|
|
165
279
|
let ghOutput;
|
|
166
280
|
try {
|
|
167
|
-
ghOutput = await
|
|
281
|
+
ghOutput = await client.exec(ghArgs, {
|
|
168
282
|
encoding: "utf8",
|
|
169
283
|
maxBuffer: MAX_BUFFER_BYTES,
|
|
170
284
|
});
|
|
@@ -219,6 +333,7 @@ export async function fetchGitHubIssues(repo, state, label, includeComments = tr
|
|
|
219
333
|
}
|
|
220
334
|
return issues;
|
|
221
335
|
}
|
|
336
|
+
// ── Topological Sort ────────────────────────────────────────────
|
|
222
337
|
/**
|
|
223
338
|
* Topologically sorts issues so that parents appear before their children.
|
|
224
339
|
* Issues whose parent is outside the import set are treated as roots.
|
|
@@ -251,11 +366,12 @@ export function topologicalSortIssues(issues, issueSet) {
|
|
|
251
366
|
}
|
|
252
367
|
return sorted;
|
|
253
368
|
}
|
|
369
|
+
// ── Main Entry Point ────────────────────────────────────────────
|
|
254
370
|
/**
|
|
255
371
|
* Imports GitHub issues as Grackle tasks, with deduplication and parent linking.
|
|
256
372
|
*
|
|
257
|
-
* Orchestrates: fetch issues → dedup against existing tasks →
|
|
258
|
-
*
|
|
373
|
+
* Orchestrates: fetch issues → dedup against existing tasks → plan (pure) →
|
|
374
|
+
* persist tasks → broadcast updates → return summary.
|
|
259
375
|
*
|
|
260
376
|
* Only one import may run at a time; concurrent calls are rejected.
|
|
261
377
|
*
|
|
@@ -266,110 +382,48 @@ export function topologicalSortIssues(issues, issueSet) {
|
|
|
266
382
|
* @param environmentId - Optional environment ID to assign to created tasks.
|
|
267
383
|
* @param includeComments - When `true` (default), appends issue comments to each
|
|
268
384
|
* task description. Pass `false` to import only the issue body (old behavior).
|
|
385
|
+
* @param options - Optional dependency overrides for testing.
|
|
269
386
|
* @returns Summary of imported, linked, and skipped issues.
|
|
270
387
|
*/
|
|
271
|
-
export async function importGitHubIssues(workspaceId, repo, state, label, _environmentId, includeComments = true) {
|
|
272
|
-
|
|
388
|
+
export async function importGitHubIssues(workspaceId, repo, state, label, _environmentId, includeComments = true, options = {}) {
|
|
389
|
+
const lock = options.importLock ?? DEFAULT_IMPORT_LOCK;
|
|
390
|
+
lock.acquire();
|
|
273
391
|
try {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
*
|
|
283
|
-
* @param workspaceId - The Grackle workspace ID to import tasks into.
|
|
284
|
-
* @param repo - Repository in "owner/repo" format.
|
|
285
|
-
* @param state - Issue state filter ("open" or "closed").
|
|
286
|
-
* @param label - Optional label to filter issues by.
|
|
287
|
-
* @param environmentId - Optional environment ID to assign to created tasks.
|
|
288
|
-
* @param includeComments - When `true` (default), appends issue comments to each
|
|
289
|
-
* task description.
|
|
290
|
-
* @returns Summary of imported, linked, and skipped issues.
|
|
291
|
-
*/
|
|
292
|
-
async function doImport(workspaceId, repo, state, label, includeComments = true) {
|
|
293
|
-
const workspace = workspaceStore.getWorkspace(workspaceId);
|
|
294
|
-
if (!workspace) {
|
|
295
|
-
throw new Error(`Workspace not found: ${workspaceId}`);
|
|
296
|
-
}
|
|
297
|
-
const workspaceSlug = slugify(workspace.name);
|
|
298
|
-
// 1. Fetch issues from GitHub (with or without comments)
|
|
299
|
-
const issues = await fetchGitHubIssues(repo, state, label, includeComments);
|
|
300
|
-
logger.info({ repo, state, label, count: issues.length, includeComments }, "Fetched GitHub issues");
|
|
301
|
-
// 2. Fetch existing tasks for deduplication and parent linking
|
|
302
|
-
const existingTasks = taskStore.listTasks(workspaceId);
|
|
303
|
-
const issueNumberPattern = /^#(\d+):/;
|
|
304
|
-
/** Maps GitHub issue number → Grackle task ID (for both existing and newly created tasks). */
|
|
305
|
-
const issueNumberToTaskId = new Map();
|
|
306
|
-
const existingIssueNumbers = new Set();
|
|
307
|
-
for (const t of existingTasks) {
|
|
308
|
-
const match = t.title.match(issueNumberPattern);
|
|
309
|
-
if (match) {
|
|
310
|
-
const num = Number(match[1]);
|
|
311
|
-
existingIssueNumbers.add(num);
|
|
312
|
-
issueNumberToTaskId.set(num, t.id);
|
|
392
|
+
const client = options.githubClient ?? NODE_GITHUB_CLIENT;
|
|
393
|
+
const persistence = options.persistence ?? NODE_TASK_PERSISTENCE;
|
|
394
|
+
const emitter = options.eventEmitter ?? NODE_IMPORT_EVENT_EMITTER;
|
|
395
|
+
const generateId = options.generateId ?? (() => uuid().slice(0, 8));
|
|
396
|
+
// 1. Validate workspace
|
|
397
|
+
const workspace = persistence.getWorkspace(workspaceId);
|
|
398
|
+
if (!workspace) {
|
|
399
|
+
throw new Error(`Workspace not found: ${workspaceId}`);
|
|
313
400
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
continue;
|
|
401
|
+
const workspaceSlug = slugify(workspace.name);
|
|
402
|
+
// 2. FETCH — get issues from GitHub
|
|
403
|
+
const issues = await fetchGitHubIssues(repo, state, label, includeComments, client);
|
|
404
|
+
logger.info({ repo, state, label, count: issues.length, includeComments }, "Fetched GitHub issues");
|
|
405
|
+
// 3. Read existing state for deduplication
|
|
406
|
+
const existingTasks = persistence.listTasks(workspaceId);
|
|
407
|
+
const { issueNumberToTaskId, existingIssueNumbers } = buildExistingIssueMap(existingTasks);
|
|
408
|
+
// 4. TRANSFORM — pure planning step
|
|
409
|
+
const plan = planImport(issues, existingIssueNumbers, issueNumberToTaskId, generateId);
|
|
410
|
+
// 5. PERSIST — create tasks
|
|
411
|
+
for (const task of plan.tasksToCreate) {
|
|
412
|
+
persistence.createTask(task.id, workspaceId, task.title, task.description, [], workspaceSlug, task.parentTaskId, true);
|
|
413
|
+
emitter.emit("task.created", { taskId: task.id, workspaceId });
|
|
328
414
|
}
|
|
329
|
-
|
|
330
|
-
let
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
linked++;
|
|
336
|
-
}
|
|
415
|
+
// 6. PERSIST — set dependency relationships
|
|
416
|
+
let dependencies = 0;
|
|
417
|
+
for (const dep of plan.dependenciesToSet) {
|
|
418
|
+
persistence.setTaskDependsOn(dep.taskId, dep.dependsOn);
|
|
419
|
+
dependencies += dep.dependsOn.length;
|
|
420
|
+
emitter.emit("task.updated", { taskId: dep.taskId, workspaceId });
|
|
337
421
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
taskStore.createTask(id, workspaceId, title, description, [], workspaceSlug, parentTaskId, true);
|
|
341
|
-
emit("task.created", { taskId: id, workspaceId });
|
|
342
|
-
issueNumberToTaskId.set(issue.number, id);
|
|
343
|
-
newlyImportedIssues.push(issue);
|
|
344
|
-
imported++;
|
|
422
|
+
logger.info({ workspaceId, imported: plan.tasksToCreate.length, linked: plan.linked, skipped: plan.skipped, dependencies }, "GitHub import complete");
|
|
423
|
+
return { imported: plan.tasksToCreate.length, linked: plan.linked, skipped: plan.skipped, dependencies };
|
|
345
424
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
// (either newly imported or pre-existing). Skip external blockers silently.
|
|
349
|
-
// Re-imported (skipped) issues are not updated — their existing dependsOn is preserved.
|
|
350
|
-
let dependencies = 0;
|
|
351
|
-
for (const issue of newlyImportedIssues) {
|
|
352
|
-
if (issue.blockedByNumbers.length === 0) {
|
|
353
|
-
continue;
|
|
354
|
-
}
|
|
355
|
-
const taskId = issueNumberToTaskId.get(issue.number);
|
|
356
|
-
if (!taskId) {
|
|
357
|
-
continue;
|
|
358
|
-
}
|
|
359
|
-
const resolvedDeps = [];
|
|
360
|
-
for (const blockerNumber of issue.blockedByNumbers) {
|
|
361
|
-
const blockerTaskId = issueNumberToTaskId.get(blockerNumber);
|
|
362
|
-
if (blockerTaskId) {
|
|
363
|
-
resolvedDeps.push(blockerTaskId);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
if (resolvedDeps.length > 0) {
|
|
367
|
-
taskStore.setTaskDependsOn(taskId, resolvedDeps);
|
|
368
|
-
dependencies += resolvedDeps.length;
|
|
369
|
-
emit("task.updated", { taskId: taskId, workspaceId });
|
|
370
|
-
}
|
|
425
|
+
finally {
|
|
426
|
+
lock.release();
|
|
371
427
|
}
|
|
372
|
-
logger.info({ workspaceId, imported, linked, skipped, dependencies }, "GitHub import complete");
|
|
373
|
-
return { imported, linked, skipped, dependencies };
|
|
374
428
|
}
|
|
375
429
|
//# sourceMappingURL=github-import.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-import.js","sourceRoot":"","sources":["../src/github-import.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github-import.js","sourceRoot":"","sources":["../src/github-import.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grackle-ai/server",
|
|
3
|
-
"version": "0.53.
|
|
3
|
+
"version": "0.53.4",
|
|
4
4
|
"description": "Central gRPC server with SQLite storage and WebSocket bridge for Grackle",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
"ulid": "^2.3.0",
|
|
36
36
|
"uuid": "^11.0.0",
|
|
37
37
|
"ws": "^8.0.0",
|
|
38
|
-
"@grackle-ai/
|
|
39
|
-
"@grackle-ai/
|
|
40
|
-
"@grackle-ai/powerline": "0.53.
|
|
41
|
-
"@grackle-ai/
|
|
42
|
-
"@grackle-ai/
|
|
38
|
+
"@grackle-ai/common": "0.53.4",
|
|
39
|
+
"@grackle-ai/adapter-sdk": "0.53.4",
|
|
40
|
+
"@grackle-ai/powerline": "0.53.4",
|
|
41
|
+
"@grackle-ai/web": "0.53.4",
|
|
42
|
+
"@grackle-ai/mcp": "0.53.4"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@rushstack/heft": "1.2.4",
|