@grackle-ai/plugin-core 0.96.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/codespace-handlers.d.ts +6 -0
- package/dist/codespace-handlers.d.ts.map +1 -0
- package/dist/codespace-handlers.js +66 -0
- package/dist/codespace-handlers.js.map +1 -0
- package/dist/cron-phase.d.ts +46 -0
- package/dist/cron-phase.d.ts.map +1 -0
- package/dist/cron-phase.js +88 -0
- package/dist/cron-phase.js.map +1 -0
- package/dist/dispatch-phase.d.ts +46 -0
- package/dist/dispatch-phase.d.ts.map +1 -0
- package/dist/dispatch-phase.js +99 -0
- package/dist/dispatch-phase.js.map +1 -0
- package/dist/environment-handlers.d.ts +16 -0
- package/dist/environment-handlers.d.ts.map +1 -0
- package/dist/environment-handlers.js +255 -0
- package/dist/environment-handlers.js.map +1 -0
- package/dist/environment-reconciliation.d.ts +35 -0
- package/dist/environment-reconciliation.d.ts.map +1 -0
- package/dist/environment-reconciliation.js +74 -0
- package/dist/environment-reconciliation.js.map +1 -0
- package/dist/escalation-handlers.d.ts +8 -0
- package/dist/escalation-handlers.d.ts.map +1 -0
- package/dist/escalation-handlers.js +60 -0
- package/dist/escalation-handlers.js.map +1 -0
- package/dist/finding-handlers.d.ts +8 -0
- package/dist/finding-handlers.d.ts.map +1 -0
- package/dist/finding-handlers.js +38 -0
- package/dist/finding-handlers.js.map +1 -0
- package/dist/grpc-proto-converters.d.ts +31 -0
- package/dist/grpc-proto-converters.d.ts.map +1 -0
- package/dist/grpc-proto-converters.js +222 -0
- package/dist/grpc-proto-converters.js.map +1 -0
- package/dist/grpc-service.d.ts +21 -0
- package/dist/grpc-service.d.ts.map +1 -0
- package/dist/grpc-service.js +50 -0
- package/dist/grpc-service.js.map +1 -0
- package/dist/grpc-shared.d.ts +22 -0
- package/dist/grpc-shared.d.ts.map +1 -0
- package/dist/grpc-shared.js +68 -0
- package/dist/grpc-shared.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge-handlers.d.ts +12 -0
- package/dist/knowledge-handlers.d.ts.map +1 -0
- package/dist/knowledge-handlers.js +149 -0
- package/dist/knowledge-handlers.js.map +1 -0
- package/dist/lifecycle-cleanup.d.ts +13 -0
- package/dist/lifecycle-cleanup.d.ts.map +1 -0
- package/dist/lifecycle-cleanup.js +35 -0
- package/dist/lifecycle-cleanup.js.map +1 -0
- package/dist/lifecycle.d.ts +28 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +132 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/orphan-phase.d.ts +27 -0
- package/dist/orphan-phase.d.ts.map +1 -0
- package/dist/orphan-phase.js +69 -0
- package/dist/orphan-phase.js.map +1 -0
- package/dist/persona-handlers.d.ts +12 -0
- package/dist/persona-handlers.d.ts.map +1 -0
- package/dist/persona-handlers.js +156 -0
- package/dist/persona-handlers.js.map +1 -0
- package/dist/root-task-boot.d.ts +67 -0
- package/dist/root-task-boot.d.ts.map +1 -0
- package/dist/root-task-boot.js +234 -0
- package/dist/root-task-boot.js.map +1 -0
- package/dist/schedule-expression.d.ts +43 -0
- package/dist/schedule-expression.d.ts.map +1 -0
- package/dist/schedule-expression.js +105 -0
- package/dist/schedule-expression.js.map +1 -0
- package/dist/schedule-handlers.d.ts +12 -0
- package/dist/schedule-handlers.d.ts.map +1 -0
- package/dist/schedule-handlers.js +122 -0
- package/dist/schedule-handlers.js.map +1 -0
- package/dist/session-handlers.d.ts +40 -0
- package/dist/session-handlers.d.ts.map +1 -0
- package/dist/session-handlers.js +610 -0
- package/dist/session-handlers.js.map +1 -0
- package/dist/settings-handlers.d.ts +10 -0
- package/dist/settings-handlers.d.ts.map +1 -0
- package/dist/settings-handlers.js +80 -0
- package/dist/settings-handlers.js.map +1 -0
- package/dist/signals/escalation-auto.d.ts +20 -0
- package/dist/signals/escalation-auto.d.ts.map +1 -0
- package/dist/signals/escalation-auto.js +126 -0
- package/dist/signals/escalation-auto.js.map +1 -0
- package/dist/signals/orphan-reparent.d.ts +31 -0
- package/dist/signals/orphan-reparent.d.ts.map +1 -0
- package/dist/signals/orphan-reparent.js +175 -0
- package/dist/signals/orphan-reparent.js.map +1 -0
- package/dist/signals/sigchld.d.ts +12 -0
- package/dist/signals/sigchld.d.ts.map +1 -0
- package/dist/signals/sigchld.js +177 -0
- package/dist/signals/sigchld.js.map +1 -0
- package/dist/task-handlers.d.ts +22 -0
- package/dist/task-handlers.d.ts.map +1 -0
- package/dist/task-handlers.js +517 -0
- package/dist/task-handlers.js.map +1 -0
- package/dist/test-utils/integration-setup.d.ts +11 -0
- package/dist/test-utils/integration-setup.d.ts.map +1 -0
- package/dist/test-utils/integration-setup.js +26 -0
- package/dist/test-utils/integration-setup.js.map +1 -0
- package/dist/test-utils/mock-database.d.ts +152 -0
- package/dist/test-utils/mock-database.d.ts.map +1 -0
- package/dist/test-utils/mock-database.js +169 -0
- package/dist/test-utils/mock-database.js.map +1 -0
- package/dist/token-handlers.d.ts +12 -0
- package/dist/token-handlers.d.ts.map +1 -0
- package/dist/token-handlers.js +85 -0
- package/dist/token-handlers.js.map +1 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/utils/format-gh-error.d.ts +6 -0
- package/dist/utils/format-gh-error.d.ts.map +1 -0
- package/dist/utils/format-gh-error.js +30 -0
- package/dist/utils/format-gh-error.js.map +1 -0
- package/dist/workspace-handlers.d.ts +16 -0
- package/dist/workspace-handlers.d.ts.map +1 -0
- package/dist/workspace-handlers.js +146 -0
- package/dist/workspace-handlers.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/** Create a complete mock of the `@grackle-ai/database` barrel export. */
|
|
2
|
+
export declare function createDatabaseMock(): {
|
|
3
|
+
db: {};
|
|
4
|
+
sqlite: undefined;
|
|
5
|
+
openDatabase: import("vitest").Mock<(...args: any[]) => any>;
|
|
6
|
+
initDatabase: import("vitest").Mock<(...args: any[]) => any>;
|
|
7
|
+
seedDatabase: import("vitest").Mock<(...args: any[]) => any>;
|
|
8
|
+
schema: {};
|
|
9
|
+
sessionStore: {
|
|
10
|
+
createSession: import("vitest").Mock<(...args: any[]) => any>;
|
|
11
|
+
getSession: import("vitest").Mock<() => undefined>;
|
|
12
|
+
listSessions: import("vitest").Mock<() => never[]>;
|
|
13
|
+
listByEnv: import("vitest").Mock<() => never[]>;
|
|
14
|
+
listSessionsForTask: import("vitest").Mock<() => never[]>;
|
|
15
|
+
listSessionsByTaskIds: import("vitest").Mock<() => never[]>;
|
|
16
|
+
getLatestSessionForTask: import("vitest").Mock<() => undefined>;
|
|
17
|
+
getActiveForEnv: import("vitest").Mock<() => undefined>;
|
|
18
|
+
getActiveSessionsForTask: import("vitest").Mock<() => never[]>;
|
|
19
|
+
getSuspendedForEnv: import("vitest").Mock<() => never[]>;
|
|
20
|
+
getChildSessions: import("vitest").Mock<() => never[]>;
|
|
21
|
+
updateSession: import("vitest").Mock<(...args: any[]) => any>;
|
|
22
|
+
updateSessionStatus: import("vitest").Mock<(...args: any[]) => any>;
|
|
23
|
+
updateSessionUsage: import("vitest").Mock<(...args: any[]) => any>;
|
|
24
|
+
updateRuntimeSessionId: import("vitest").Mock<(...args: any[]) => any>;
|
|
25
|
+
incrementTurns: import("vitest").Mock<(...args: any[]) => any>;
|
|
26
|
+
suspendSession: import("vitest").Mock<(...args: any[]) => any>;
|
|
27
|
+
reanimateSession: import("vitest").Mock<(...args: any[]) => any>;
|
|
28
|
+
setSigtermSentAt: import("vitest").Mock<(...args: any[]) => any>;
|
|
29
|
+
clearSigtermSentAt: import("vitest").Mock<(...args: any[]) => any>;
|
|
30
|
+
setSessionTask: import("vitest").Mock<(...args: any[]) => any>;
|
|
31
|
+
deleteByEnvironment: import("vitest").Mock<(...args: any[]) => any>;
|
|
32
|
+
aggregateUsage: import("vitest").Mock<() => {
|
|
33
|
+
inputTokens: number;
|
|
34
|
+
outputTokens: number;
|
|
35
|
+
costUsd: number;
|
|
36
|
+
sessionCount: number;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
taskStore: {
|
|
40
|
+
createTask: import("vitest").Mock<(...args: any[]) => any>;
|
|
41
|
+
insertTask: import("vitest").Mock<(...args: any[]) => any>;
|
|
42
|
+
getTask: import("vitest").Mock<() => undefined>;
|
|
43
|
+
listTasks: import("vitest").Mock<() => never[]>;
|
|
44
|
+
updateTask: import("vitest").Mock<(...args: any[]) => any>;
|
|
45
|
+
updateTaskStatus: import("vitest").Mock<(...args: any[]) => any>;
|
|
46
|
+
markTaskComplete: import("vitest").Mock<(...args: any[]) => any>;
|
|
47
|
+
deleteTask: import("vitest").Mock<(...args: any[]) => any>;
|
|
48
|
+
setTaskWorkspace: import("vitest").Mock<(...args: any[]) => any>;
|
|
49
|
+
setTaskDependsOn: import("vitest").Mock<(...args: any[]) => any>;
|
|
50
|
+
getUnblockedTasks: import("vitest").Mock<() => never[]>;
|
|
51
|
+
checkAndUnblock: import("vitest").Mock<() => never[]>;
|
|
52
|
+
areDependenciesMet: import("vitest").Mock<() => boolean>;
|
|
53
|
+
buildChildIdsMap: import("vitest").Mock<() => Map<any, any>>;
|
|
54
|
+
getChildren: import("vitest").Mock<() => never[]>;
|
|
55
|
+
getDescendants: import("vitest").Mock<() => never[]>;
|
|
56
|
+
getAncestors: import("vitest").Mock<() => never[]>;
|
|
57
|
+
getChildStatusCounts: import("vitest").Mock<() => {}>;
|
|
58
|
+
reparentTask: import("vitest").Mock<(...args: any[]) => any>;
|
|
59
|
+
getOrphanedTasks: import("vitest").Mock<() => never[]>;
|
|
60
|
+
};
|
|
61
|
+
workspaceStore: {
|
|
62
|
+
createWorkspace: import("vitest").Mock<(...args: any[]) => any>;
|
|
63
|
+
getWorkspace: import("vitest").Mock<() => undefined>;
|
|
64
|
+
listWorkspaces: import("vitest").Mock<() => never[]>;
|
|
65
|
+
updateWorkspace: import("vitest").Mock<(...args: any[]) => any>;
|
|
66
|
+
archiveWorkspace: import("vitest").Mock<(...args: any[]) => any>;
|
|
67
|
+
countWorkspacesByEnvironment: import("vitest").Mock<() => number>;
|
|
68
|
+
};
|
|
69
|
+
personaStore: {
|
|
70
|
+
createPersona: import("vitest").Mock<(...args: any[]) => any>;
|
|
71
|
+
getPersona: import("vitest").Mock<() => undefined>;
|
|
72
|
+
getPersonaByName: import("vitest").Mock<() => undefined>;
|
|
73
|
+
listPersonas: import("vitest").Mock<() => never[]>;
|
|
74
|
+
updatePersona: import("vitest").Mock<(...args: any[]) => any>;
|
|
75
|
+
deletePersona: import("vitest").Mock<(...args: any[]) => any>;
|
|
76
|
+
};
|
|
77
|
+
findingStore: {
|
|
78
|
+
postFinding: import("vitest").Mock<(...args: any[]) => any>;
|
|
79
|
+
queryFindings: import("vitest").Mock<() => never[]>;
|
|
80
|
+
};
|
|
81
|
+
settingsStore: {
|
|
82
|
+
getSetting: import("vitest").Mock<() => undefined>;
|
|
83
|
+
setSetting: import("vitest").Mock<(...args: any[]) => any>;
|
|
84
|
+
isAllowedSettingKey: import("vitest").Mock<() => boolean>;
|
|
85
|
+
WRITABLE_SETTING_KEYS: Set<string>;
|
|
86
|
+
};
|
|
87
|
+
envRegistry: {
|
|
88
|
+
listEnvironments: import("vitest").Mock<() => never[]>;
|
|
89
|
+
getEnvironment: import("vitest").Mock<() => undefined>;
|
|
90
|
+
addEnvironment: import("vitest").Mock<(...args: any[]) => any>;
|
|
91
|
+
removeEnvironment: import("vitest").Mock<(...args: any[]) => any>;
|
|
92
|
+
updateEnvironmentStatus: import("vitest").Mock<(...args: any[]) => any>;
|
|
93
|
+
markBootstrapped: import("vitest").Mock<(...args: any[]) => any>;
|
|
94
|
+
setEnvInfo: import("vitest").Mock<(...args: any[]) => any>;
|
|
95
|
+
updateAdapterConfig: import("vitest").Mock<(...args: any[]) => any>;
|
|
96
|
+
updateEnvironment: import("vitest").Mock<(...args: any[]) => any>;
|
|
97
|
+
resetAllStatuses: import("vitest").Mock<(...args: any[]) => any>;
|
|
98
|
+
};
|
|
99
|
+
tokenStore: {
|
|
100
|
+
setToken: import("vitest").Mock<(...args: any[]) => any>;
|
|
101
|
+
deleteToken: import("vitest").Mock<(...args: any[]) => any>;
|
|
102
|
+
listTokens: import("vitest").Mock<() => never[]>;
|
|
103
|
+
getBundle: import("vitest").Mock<() => {
|
|
104
|
+
tokens: never[];
|
|
105
|
+
}>;
|
|
106
|
+
};
|
|
107
|
+
workspaceEnvironmentLinkStore: {
|
|
108
|
+
linkEnvironment: import("vitest").Mock<(...args: any[]) => any>;
|
|
109
|
+
unlinkEnvironment: import("vitest").Mock<(...args: any[]) => any>;
|
|
110
|
+
getLinkedEnvironmentIds: import("vitest").Mock<() => never[]>;
|
|
111
|
+
getLinkedEnvironmentIdsByWorkspaces: import("vitest").Mock<() => Map<any, any>>;
|
|
112
|
+
getWorkspaceIdsLinkedToEnvironment: import("vitest").Mock<() => never[]>;
|
|
113
|
+
isLinked: import("vitest").Mock<() => boolean>;
|
|
114
|
+
countLinksForEnvironment: import("vitest").Mock<() => number>;
|
|
115
|
+
deleteLinksForEnvironment: import("vitest").Mock<(...args: any[]) => any>;
|
|
116
|
+
deleteLinksForWorkspace: import("vitest").Mock<(...args: any[]) => any>;
|
|
117
|
+
};
|
|
118
|
+
escalationStore: {
|
|
119
|
+
createEscalation: import("vitest").Mock<(...args: any[]) => any>;
|
|
120
|
+
getEscalation: import("vitest").Mock<() => undefined>;
|
|
121
|
+
listEscalations: import("vitest").Mock<() => never[]>;
|
|
122
|
+
listPendingEscalations: import("vitest").Mock<() => never[]>;
|
|
123
|
+
updateEscalationStatus: import("vitest").Mock<(...args: any[]) => any>;
|
|
124
|
+
};
|
|
125
|
+
credentialProviders: {
|
|
126
|
+
getCredentialProviders: import("vitest").Mock<() => {
|
|
127
|
+
claude: string;
|
|
128
|
+
github: string;
|
|
129
|
+
copilot: string;
|
|
130
|
+
codex: string;
|
|
131
|
+
goose: string;
|
|
132
|
+
}>;
|
|
133
|
+
setCredentialProviders: import("vitest").Mock<(...args: any[]) => any>;
|
|
134
|
+
parseCredentialProviderConfig: import("vitest").Mock<(...args: any[]) => any>;
|
|
135
|
+
isValidCredentialProviderConfig: import("vitest").Mock<() => boolean>;
|
|
136
|
+
VALID_PROVIDERS: string[];
|
|
137
|
+
VALID_CLAUDE_VALUES: Set<string>;
|
|
138
|
+
VALID_TOGGLE_VALUES: Set<string>;
|
|
139
|
+
};
|
|
140
|
+
isAllowedSettingKey: import("vitest").Mock<() => boolean>;
|
|
141
|
+
WRITABLE_SETTING_KEYS: Set<string>;
|
|
142
|
+
VALID_PROVIDERS: string[];
|
|
143
|
+
VALID_CLAUDE_VALUES: Set<string>;
|
|
144
|
+
VALID_TOGGLE_VALUES: Set<string>;
|
|
145
|
+
persistEvent: import("vitest").Mock<(...args: any[]) => any>;
|
|
146
|
+
grackleHome: string;
|
|
147
|
+
safeParseJsonArray: (value: unknown) => string[];
|
|
148
|
+
slugify: (text: string) => string;
|
|
149
|
+
encrypt: import("vitest").Mock<(x: unknown) => unknown>;
|
|
150
|
+
decrypt: import("vitest").Mock<(x: unknown) => unknown>;
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=mock-database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-database.d.ts","sourceRoot":"","sources":["../../src/test-utils/mock-database.ts"],"names":[],"mappings":"AAeA,0EAA0E;AAE1E,wBAAgB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAoJF,OAAO,KAAG,MAAM,EAAE;oBAS9B,MAAM,KAAG,MAAM;uCACZ,OAAO;uCACP,OAAO;EAE7B"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared mock factory for `@grackle-ai/database` used by server test files.
|
|
3
|
+
*
|
|
4
|
+
* Usage in test files:
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { createDatabaseMock } from "./test-utils/mock-database.js";
|
|
7
|
+
* vi.mock("@grackle-ai/database", () => createDatabaseMock());
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* All store namespaces are provided with vi.fn() stubs that return safe defaults
|
|
11
|
+
* (empty arrays, undefined, etc.). Individual tests can override specific functions
|
|
12
|
+
* via `vi.mocked(store.someMethod).mockReturnValue(...)`.
|
|
13
|
+
*/
|
|
14
|
+
import { vi } from "vitest";
|
|
15
|
+
/** Create a complete mock of the `@grackle-ai/database` barrel export. */
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
17
|
+
export function createDatabaseMock() {
|
|
18
|
+
return {
|
|
19
|
+
db: {},
|
|
20
|
+
sqlite: undefined,
|
|
21
|
+
openDatabase: vi.fn(),
|
|
22
|
+
initDatabase: vi.fn(),
|
|
23
|
+
seedDatabase: vi.fn(),
|
|
24
|
+
schema: {},
|
|
25
|
+
sessionStore: {
|
|
26
|
+
createSession: vi.fn(),
|
|
27
|
+
getSession: vi.fn(() => undefined),
|
|
28
|
+
listSessions: vi.fn(() => []),
|
|
29
|
+
listByEnv: vi.fn(() => []),
|
|
30
|
+
listSessionsForTask: vi.fn(() => []),
|
|
31
|
+
listSessionsByTaskIds: vi.fn(() => []),
|
|
32
|
+
getLatestSessionForTask: vi.fn(() => undefined),
|
|
33
|
+
getActiveForEnv: vi.fn(() => undefined),
|
|
34
|
+
getActiveSessionsForTask: vi.fn(() => []),
|
|
35
|
+
getSuspendedForEnv: vi.fn(() => []),
|
|
36
|
+
getChildSessions: vi.fn(() => []),
|
|
37
|
+
updateSession: vi.fn(),
|
|
38
|
+
updateSessionStatus: vi.fn(),
|
|
39
|
+
updateSessionUsage: vi.fn(),
|
|
40
|
+
updateRuntimeSessionId: vi.fn(),
|
|
41
|
+
incrementTurns: vi.fn(),
|
|
42
|
+
suspendSession: vi.fn(),
|
|
43
|
+
reanimateSession: vi.fn(),
|
|
44
|
+
setSigtermSentAt: vi.fn(),
|
|
45
|
+
clearSigtermSentAt: vi.fn(),
|
|
46
|
+
setSessionTask: vi.fn(),
|
|
47
|
+
deleteByEnvironment: vi.fn(),
|
|
48
|
+
aggregateUsage: vi.fn(() => ({ inputTokens: 0, outputTokens: 0, costUsd: 0, sessionCount: 0 })),
|
|
49
|
+
},
|
|
50
|
+
taskStore: {
|
|
51
|
+
createTask: vi.fn(),
|
|
52
|
+
insertTask: vi.fn(),
|
|
53
|
+
getTask: vi.fn(() => undefined),
|
|
54
|
+
listTasks: vi.fn(() => []),
|
|
55
|
+
updateTask: vi.fn(),
|
|
56
|
+
updateTaskStatus: vi.fn(),
|
|
57
|
+
markTaskComplete: vi.fn(),
|
|
58
|
+
deleteTask: vi.fn(),
|
|
59
|
+
setTaskWorkspace: vi.fn(),
|
|
60
|
+
setTaskDependsOn: vi.fn(),
|
|
61
|
+
getUnblockedTasks: vi.fn(() => []),
|
|
62
|
+
checkAndUnblock: vi.fn(() => []),
|
|
63
|
+
areDependenciesMet: vi.fn(() => true),
|
|
64
|
+
buildChildIdsMap: vi.fn(() => new Map()),
|
|
65
|
+
getChildren: vi.fn(() => []),
|
|
66
|
+
getDescendants: vi.fn(() => []),
|
|
67
|
+
getAncestors: vi.fn(() => []),
|
|
68
|
+
getChildStatusCounts: vi.fn(() => ({})),
|
|
69
|
+
reparentTask: vi.fn(),
|
|
70
|
+
getOrphanedTasks: vi.fn(() => []),
|
|
71
|
+
},
|
|
72
|
+
workspaceStore: {
|
|
73
|
+
createWorkspace: vi.fn(),
|
|
74
|
+
getWorkspace: vi.fn(() => undefined),
|
|
75
|
+
listWorkspaces: vi.fn(() => []),
|
|
76
|
+
updateWorkspace: vi.fn(),
|
|
77
|
+
archiveWorkspace: vi.fn(),
|
|
78
|
+
countWorkspacesByEnvironment: vi.fn(() => 0),
|
|
79
|
+
},
|
|
80
|
+
personaStore: {
|
|
81
|
+
createPersona: vi.fn(),
|
|
82
|
+
getPersona: vi.fn(() => undefined),
|
|
83
|
+
getPersonaByName: vi.fn(() => undefined),
|
|
84
|
+
listPersonas: vi.fn(() => []),
|
|
85
|
+
updatePersona: vi.fn(),
|
|
86
|
+
deletePersona: vi.fn(),
|
|
87
|
+
},
|
|
88
|
+
findingStore: {
|
|
89
|
+
postFinding: vi.fn(),
|
|
90
|
+
queryFindings: vi.fn(() => []),
|
|
91
|
+
},
|
|
92
|
+
settingsStore: {
|
|
93
|
+
getSetting: vi.fn(() => undefined),
|
|
94
|
+
setSetting: vi.fn(),
|
|
95
|
+
isAllowedSettingKey: vi.fn(() => true),
|
|
96
|
+
WRITABLE_SETTING_KEYS: new Set(["default_persona_id", "onboarding_completed"]),
|
|
97
|
+
},
|
|
98
|
+
envRegistry: {
|
|
99
|
+
listEnvironments: vi.fn(() => []),
|
|
100
|
+
getEnvironment: vi.fn(() => undefined),
|
|
101
|
+
addEnvironment: vi.fn(),
|
|
102
|
+
removeEnvironment: vi.fn(),
|
|
103
|
+
updateEnvironmentStatus: vi.fn(),
|
|
104
|
+
markBootstrapped: vi.fn(),
|
|
105
|
+
setEnvInfo: vi.fn(),
|
|
106
|
+
updateAdapterConfig: vi.fn(),
|
|
107
|
+
updateEnvironment: vi.fn(),
|
|
108
|
+
resetAllStatuses: vi.fn(),
|
|
109
|
+
},
|
|
110
|
+
tokenStore: {
|
|
111
|
+
setToken: vi.fn(),
|
|
112
|
+
deleteToken: vi.fn(),
|
|
113
|
+
listTokens: vi.fn(() => []),
|
|
114
|
+
getBundle: vi.fn(() => ({ tokens: [] })),
|
|
115
|
+
},
|
|
116
|
+
workspaceEnvironmentLinkStore: {
|
|
117
|
+
linkEnvironment: vi.fn(),
|
|
118
|
+
unlinkEnvironment: vi.fn(),
|
|
119
|
+
getLinkedEnvironmentIds: vi.fn(() => []),
|
|
120
|
+
getLinkedEnvironmentIdsByWorkspaces: vi.fn(() => new Map()),
|
|
121
|
+
getWorkspaceIdsLinkedToEnvironment: vi.fn(() => []),
|
|
122
|
+
isLinked: vi.fn(() => false),
|
|
123
|
+
countLinksForEnvironment: vi.fn(() => 0),
|
|
124
|
+
deleteLinksForEnvironment: vi.fn(),
|
|
125
|
+
deleteLinksForWorkspace: vi.fn(),
|
|
126
|
+
},
|
|
127
|
+
escalationStore: {
|
|
128
|
+
createEscalation: vi.fn(),
|
|
129
|
+
getEscalation: vi.fn(() => undefined),
|
|
130
|
+
listEscalations: vi.fn(() => []),
|
|
131
|
+
listPendingEscalations: vi.fn(() => []),
|
|
132
|
+
updateEscalationStatus: vi.fn(),
|
|
133
|
+
},
|
|
134
|
+
credentialProviders: {
|
|
135
|
+
getCredentialProviders: vi.fn(() => ({ claude: "off", github: "off", copilot: "off", codex: "off", goose: "off" })),
|
|
136
|
+
setCredentialProviders: vi.fn(),
|
|
137
|
+
parseCredentialProviderConfig: vi.fn(),
|
|
138
|
+
isValidCredentialProviderConfig: vi.fn(() => true),
|
|
139
|
+
VALID_PROVIDERS: ["claude", "github", "copilot", "codex", "goose"],
|
|
140
|
+
VALID_CLAUDE_VALUES: new Set(["off", "subscription", "api_key"]),
|
|
141
|
+
VALID_TOGGLE_VALUES: new Set(["off", "on"]),
|
|
142
|
+
},
|
|
143
|
+
// Direct barrel exports
|
|
144
|
+
isAllowedSettingKey: vi.fn(() => true),
|
|
145
|
+
WRITABLE_SETTING_KEYS: new Set(["default_persona_id", "onboarding_completed"]),
|
|
146
|
+
VALID_PROVIDERS: ["claude", "github", "copilot", "codex", "goose"],
|
|
147
|
+
VALID_CLAUDE_VALUES: new Set(["off", "subscription", "api_key"]),
|
|
148
|
+
VALID_TOGGLE_VALUES: new Set(["off", "on"]),
|
|
149
|
+
persistEvent: vi.fn(),
|
|
150
|
+
// Utilities
|
|
151
|
+
grackleHome: "/tmp/test-grackle",
|
|
152
|
+
safeParseJsonArray: (value) => {
|
|
153
|
+
if (!value) {
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
const p = JSON.parse(value);
|
|
158
|
+
return Array.isArray(p) ? p.filter((i) => typeof i === "string") : [];
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
slugify: (text) => text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 40),
|
|
165
|
+
encrypt: vi.fn((x) => x),
|
|
166
|
+
decrypt: vi.fn((x) => x),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=mock-database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-database.js","sourceRoot":"","sources":["../../src/test-utils/mock-database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { grackle } from "@grackle-ai/common";
|
|
2
|
+
/** Store or update a token. */
|
|
3
|
+
export declare function setToken(req: grackle.TokenEntry): Promise<grackle.Empty>;
|
|
4
|
+
/** List all stored tokens (without values). */
|
|
5
|
+
export declare function listTokens(): Promise<grackle.TokenList>;
|
|
6
|
+
/** Delete a token by name. */
|
|
7
|
+
export declare function deleteToken(req: grackle.TokenName): Promise<grackle.Empty>;
|
|
8
|
+
/** Get the current credential provider configuration. */
|
|
9
|
+
export declare function getCredentialProviders(): Promise<grackle.CredentialProviderConfig>;
|
|
10
|
+
/** Set a specific credential provider value. */
|
|
11
|
+
export declare function setCredentialProvider(req: grackle.SetCredentialProviderRequest): Promise<grackle.CredentialProviderConfig>;
|
|
12
|
+
//# sourceMappingURL=token-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-handlers.d.ts","sourceRoot":"","sources":["../src/token-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAM7C,+BAA+B;AAC/B,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAkB9E;AAED,+CAA+C;AAC/C,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAa7D;AAED,8BAA8B;AAC9B,wBAAsB,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAQhF;AAED,yDAAyD;AACzD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CASxF;AAED,gDAAgD;AAChD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,4BAA4B,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAgChI"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { ConnectError, Code } from "@connectrpc/connect";
|
|
2
|
+
import { create } from "@bufbuild/protobuf";
|
|
3
|
+
import { grackle } from "@grackle-ai/common";
|
|
4
|
+
import { claudeProviderModeToEnum, providerToggleToEnum } from "@grackle-ai/common";
|
|
5
|
+
import { tokenStore, credentialProviders } from "@grackle-ai/database";
|
|
6
|
+
import { tokenPush } from "@grackle-ai/core";
|
|
7
|
+
import { emit } from "@grackle-ai/core";
|
|
8
|
+
/** Store or update a token. */
|
|
9
|
+
export async function setToken(req) {
|
|
10
|
+
if (!req.name) {
|
|
11
|
+
throw new ConnectError("name is required", Code.InvalidArgument);
|
|
12
|
+
}
|
|
13
|
+
if (!req.value) {
|
|
14
|
+
throw new ConnectError("value is required", Code.InvalidArgument);
|
|
15
|
+
}
|
|
16
|
+
tokenStore.setToken({
|
|
17
|
+
name: req.name,
|
|
18
|
+
type: req.type,
|
|
19
|
+
envVar: req.envVar,
|
|
20
|
+
filePath: req.filePath,
|
|
21
|
+
value: req.value,
|
|
22
|
+
expiresAt: req.expiresAt,
|
|
23
|
+
});
|
|
24
|
+
emit("token.changed", {});
|
|
25
|
+
await tokenPush.pushToAll();
|
|
26
|
+
return create(grackle.EmptySchema, {});
|
|
27
|
+
}
|
|
28
|
+
/** List all stored tokens (without values). */
|
|
29
|
+
export async function listTokens() {
|
|
30
|
+
const items = tokenStore.listTokens();
|
|
31
|
+
return create(grackle.TokenListSchema, {
|
|
32
|
+
tokens: items.map((t) => create(grackle.TokenInfoSchema, {
|
|
33
|
+
name: t.name,
|
|
34
|
+
type: t.type,
|
|
35
|
+
envVar: t.envVar || "",
|
|
36
|
+
filePath: t.filePath || "",
|
|
37
|
+
expiresAt: t.expiresAt || "",
|
|
38
|
+
})),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Delete a token by name. */
|
|
42
|
+
export async function deleteToken(req) {
|
|
43
|
+
if (!req.name) {
|
|
44
|
+
throw new ConnectError("name is required", Code.InvalidArgument);
|
|
45
|
+
}
|
|
46
|
+
tokenStore.deleteToken(req.name);
|
|
47
|
+
emit("token.changed", {});
|
|
48
|
+
await tokenPush.pushToAll();
|
|
49
|
+
return create(grackle.EmptySchema, {});
|
|
50
|
+
}
|
|
51
|
+
/** Get the current credential provider configuration. */
|
|
52
|
+
export async function getCredentialProviders() {
|
|
53
|
+
const config = credentialProviders.getCredentialProviders();
|
|
54
|
+
return create(grackle.CredentialProviderConfigSchema, {
|
|
55
|
+
claude: claudeProviderModeToEnum(config.claude),
|
|
56
|
+
github: providerToggleToEnum(config.github),
|
|
57
|
+
copilot: providerToggleToEnum(config.copilot),
|
|
58
|
+
codex: providerToggleToEnum(config.codex),
|
|
59
|
+
goose: providerToggleToEnum(config.goose),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** Set a specific credential provider value. */
|
|
63
|
+
export async function setCredentialProvider(req) {
|
|
64
|
+
if (!credentialProviders.VALID_PROVIDERS.includes(req.provider)) {
|
|
65
|
+
throw new ConnectError(`Invalid provider: ${req.provider}. Must be one of: ${credentialProviders.VALID_PROVIDERS.join(", ")}`, Code.InvalidArgument);
|
|
66
|
+
}
|
|
67
|
+
const allowed = req.provider === "claude"
|
|
68
|
+
? credentialProviders.VALID_CLAUDE_VALUES
|
|
69
|
+
: credentialProviders.VALID_TOGGLE_VALUES;
|
|
70
|
+
if (!allowed.has(req.value)) {
|
|
71
|
+
throw new ConnectError(`Invalid value for ${req.provider}: ${req.value}. Must be one of: ${[...allowed].join(", ")}`, Code.InvalidArgument);
|
|
72
|
+
}
|
|
73
|
+
const current = credentialProviders.getCredentialProviders();
|
|
74
|
+
const updated = { ...current, [req.provider]: req.value };
|
|
75
|
+
credentialProviders.setCredentialProviders(updated);
|
|
76
|
+
emit("credential.providers_changed", updated);
|
|
77
|
+
return create(grackle.CredentialProviderConfigSchema, {
|
|
78
|
+
claude: claudeProviderModeToEnum(updated.claude),
|
|
79
|
+
github: providerToggleToEnum(updated.github),
|
|
80
|
+
copilot: providerToggleToEnum(updated.copilot),
|
|
81
|
+
codex: providerToggleToEnum(updated.codex),
|
|
82
|
+
goose: providerToggleToEnum(updated.goose),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=token-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-handlers.js","sourceRoot":"","sources":["../src/token-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// This file is read by tools that parse documentation comments conforming to the TSDoc standard.
|
|
2
|
+
// It should be published with your NPM package. It should not be tracked by Git.
|
|
3
|
+
{
|
|
4
|
+
"tsdocVersion": "0.12",
|
|
5
|
+
"toolPackages": [
|
|
6
|
+
{
|
|
7
|
+
"packageName": "@microsoft/api-extractor",
|
|
8
|
+
"packageVersion": "7.57.7"
|
|
9
|
+
}
|
|
10
|
+
]
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-gh-error.d.ts","sourceRoot":"","sources":["../../src/utils/format-gh-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CA4BrE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translate a raw `gh` CLI error into a user-friendly message.
|
|
3
|
+
* The raw error is still logged server-side for diagnostics.
|
|
4
|
+
*/
|
|
5
|
+
export function formatGhError(err, operation) {
|
|
6
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
7
|
+
const rawStderr = err instanceof Error && "stderr" in err
|
|
8
|
+
? err.stderr
|
|
9
|
+
: undefined;
|
|
10
|
+
const stderr = typeof rawStderr === "string" && rawStderr.length > 0
|
|
11
|
+
? rawStderr
|
|
12
|
+
: Buffer.isBuffer(rawStderr) && rawStderr.length > 0
|
|
13
|
+
? rawStderr.toString()
|
|
14
|
+
: "";
|
|
15
|
+
const code = err instanceof Error && "code" in err
|
|
16
|
+
? String(err.code)
|
|
17
|
+
: "";
|
|
18
|
+
if (code === "ENOENT" || message.includes("ENOENT")) {
|
|
19
|
+
return "Could not find the `gh` CLI. Ensure GitHub CLI is installed and available on your system PATH, then restart the Grackle server.";
|
|
20
|
+
}
|
|
21
|
+
if (code === "EACCES" || message.includes("EACCES")) {
|
|
22
|
+
return "`gh` CLI found but not executable. Check file permissions.";
|
|
23
|
+
}
|
|
24
|
+
const combined = `${stderr} ${message}`.toLowerCase();
|
|
25
|
+
if (combined.includes("auth") || combined.includes("login")) {
|
|
26
|
+
return "GitHub CLI is not authenticated. Run `gh auth login` and restart.";
|
|
27
|
+
}
|
|
28
|
+
return `Failed to ${operation}: ${stderr || message}`;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=format-gh-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-gh-error.js","sourceRoot":"","sources":["../../src/utils/format-gh-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,SAAiB;IAC3D,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,SAAS,GACb,GAAG,YAAY,KAAK,IAAI,QAAQ,IAAI,GAAG;QACrC,CAAC,CAAE,GAAmC,CAAC,MAAM;QAC7C,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,MAAM,GACV,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QACnD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAClD,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;YACtB,CAAC,CAAC,EAAE,CAAC;IACX,MAAM,IAAI,GACR,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG;QACnC,CAAC,CAAC,MAAM,CAAE,GAAiC,CAAC,IAAI,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,OAAO,iIAAiI,CAAC;IAC3I,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,OAAO,4DAA4D,CAAC;IACtE,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO,mEAAmE,CAAC;IAC7E,CAAC;IACD,OAAO,aAAa,SAAS,KAAK,MAAM,IAAI,OAAO,EAAE,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { grackle } from "@grackle-ai/common";
|
|
2
|
+
/** List all workspaces, optionally filtered by environment. */
|
|
3
|
+
export declare function listWorkspaces(req: grackle.ListWorkspacesRequest): Promise<grackle.WorkspaceList>;
|
|
4
|
+
/** Create a new workspace. */
|
|
5
|
+
export declare function createWorkspace(req: grackle.CreateWorkspaceRequest): Promise<grackle.Workspace>;
|
|
6
|
+
/** Get a workspace by ID. */
|
|
7
|
+
export declare function getWorkspace(req: grackle.WorkspaceId): Promise<grackle.Workspace>;
|
|
8
|
+
/** Archive a workspace. */
|
|
9
|
+
export declare function archiveWorkspace(req: grackle.WorkspaceId): Promise<grackle.Empty>;
|
|
10
|
+
/** Update workspace properties. */
|
|
11
|
+
export declare function updateWorkspace(req: grackle.UpdateWorkspaceRequest): Promise<grackle.Workspace>;
|
|
12
|
+
/** Link an additional environment to a workspace's pool. */
|
|
13
|
+
export declare function linkEnvironment(req: grackle.LinkEnvironmentRequest): Promise<grackle.Workspace>;
|
|
14
|
+
/** Remove a linked environment from a workspace's pool. */
|
|
15
|
+
export declare function unlinkEnvironment(req: grackle.UnlinkEnvironmentRequest): Promise<grackle.Workspace>;
|
|
16
|
+
//# sourceMappingURL=workspace-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-handlers.d.ts","sourceRoot":"","sources":["../src/workspace-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAO7C,+DAA+D;AAC/D,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CASvG;AAED,8BAA8B;AAC9B,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAqCrG;AAED,6BAA6B;AAC7B,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAMvF;AAED,2BAA2B;AAC3B,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAKvF;AAED,mCAAmC;AACnC,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAoCrG;AAED,4DAA4D;AAC5D,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAuCrG;AAED,2DAA2D;AAC3D,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAezG"}
|