@digitalpresence/cliclaw-auth 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/claude-md-generator.d.ts +6 -1
- package/dist/claude-md-generator.d.ts.map +1 -1
- package/dist/claude-md-generator.js +16 -3
- package/dist/claude-md-generator.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/instance-store.d.ts +1 -0
- package/dist/instance-store.d.ts.map +1 -1
- package/dist/instance-store.js +22 -34
- package/dist/instance-store.js.map +1 -1
- package/dist/integration-registry.d.ts +11 -0
- package/dist/integration-registry.d.ts.map +1 -1
- package/dist/integration-registry.js +32 -0
- package/dist/integration-registry.js.map +1 -1
- package/dist/token-store.d.ts +4 -3
- package/dist/token-store.d.ts.map +1 -1
- package/dist/token-store.js.map +1 -1
- package/package.json +6 -6
- package/src/claude-md-generator.ts +22 -3
- package/src/index.ts +2 -2
- package/src/instance-store.ts +24 -37
- package/src/integration-registry.ts +44 -0
- package/src/token-store.ts +5 -4
|
@@ -3,8 +3,13 @@ import type { MemoryEntry } from "./memory-store.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Generates the universal ~/.cliclaw/CLAUDE.md shared by all agents.
|
|
5
5
|
* Contains safety rules, CLI usage patterns, memory instructions, and behavioral guidelines.
|
|
6
|
+
* When soul/role/context are provided, they are inlined so the agent doesn't waste turns reading files.
|
|
6
7
|
*/
|
|
7
|
-
export declare function generateUniversalClaudeMd(
|
|
8
|
+
export declare function generateUniversalClaudeMd(sections?: {
|
|
9
|
+
soul?: string;
|
|
10
|
+
role?: string;
|
|
11
|
+
context?: string;
|
|
12
|
+
}): string;
|
|
8
13
|
/**
|
|
9
14
|
* Generates per-instance CONTEXT.md with agent-specific context:
|
|
10
15
|
* name, integrations, cron schedules, and current memories.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md-generator.d.ts","sourceRoot":"","sources":["../src/claude-md-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"claude-md-generator.d.ts","sourceRoot":"","sources":["../src/claude-md-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAuDT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAE,WAAW,EAAO,GAAG,MAAM,CAmE3F"}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generates the universal ~/.cliclaw/CLAUDE.md shared by all agents.
|
|
3
3
|
* Contains safety rules, CLI usage patterns, memory instructions, and behavioral guidelines.
|
|
4
|
+
* When soul/role/context are provided, they are inlined so the agent doesn't waste turns reading files.
|
|
4
5
|
*/
|
|
5
|
-
export function generateUniversalClaudeMd() {
|
|
6
|
+
export function generateUniversalClaudeMd(sections) {
|
|
6
7
|
const lines = [];
|
|
7
8
|
lines.push("# Agent Instructions");
|
|
8
9
|
lines.push("");
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
if (sections?.soul || sections?.role || sections?.context) {
|
|
11
|
+
if (sections.soul) {
|
|
12
|
+
lines.push(sections.soul.trim());
|
|
13
|
+
lines.push("");
|
|
14
|
+
}
|
|
15
|
+
if (sections.role) {
|
|
16
|
+
lines.push(sections.role.trim());
|
|
17
|
+
lines.push("");
|
|
18
|
+
}
|
|
19
|
+
if (sections.context) {
|
|
20
|
+
lines.push(sections.context.trim());
|
|
21
|
+
lines.push("");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
11
24
|
lines.push("## Safety Rules");
|
|
12
25
|
lines.push("- Never access files outside your workspace directory");
|
|
13
26
|
lines.push("- Never modify or read system files, environment files, or credentials outside your workspace");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md-generator.js","sourceRoot":"","sources":["../src/claude-md-generator.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"claude-md-generator.js","sourceRoot":"","sources":["../src/claude-md-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,8 +12,8 @@ export { createCalendarOAuthClient, getCalendarAuthUrl } from "./calendar-auth.j
|
|
|
12
12
|
export { createFormsOAuthClient, getFormsAuthUrl } from "./forms-auth.js";
|
|
13
13
|
export { waitForOAuthCallback } from "./oauth-server.js";
|
|
14
14
|
export { loadConfig, getConfigDir, getTokensPath, getAgentsDir } from "./config.js";
|
|
15
|
-
export { INTEGRATIONS } from "./integration-registry.js";
|
|
16
|
-
export type { IntegrationDef } from "./integration-registry.js";
|
|
15
|
+
export { INTEGRATIONS, PROVIDERS } from "./integration-registry.js";
|
|
16
|
+
export type { IntegrationDef, ProviderConfig } from "./integration-registry.js";
|
|
17
17
|
export type { CliclawConfig } from "./config.js";
|
|
18
18
|
export { generateUniversalClaudeMd, generateContextMd } from "./claude-md-generator.js";
|
|
19
19
|
export { InstanceStore } from "./instance-store.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ export { createCalendarOAuthClient, getCalendarAuthUrl } from "./calendar-auth.j
|
|
|
11
11
|
export { createFormsOAuthClient, getFormsAuthUrl } from "./forms-auth.js";
|
|
12
12
|
export { waitForOAuthCallback } from "./oauth-server.js";
|
|
13
13
|
export { loadConfig, getConfigDir, getTokensPath, getAgentsDir } from "./config.js";
|
|
14
|
-
export { INTEGRATIONS } from "./integration-registry.js";
|
|
14
|
+
export { INTEGRATIONS, PROVIDERS } from "./integration-registry.js";
|
|
15
15
|
export { generateUniversalClaudeMd, generateContextMd } from "./claude-md-generator.js";
|
|
16
16
|
export { InstanceStore } from "./instance-store.js";
|
|
17
17
|
export { MemoryStore } from "./memory-store.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/instance-store.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare class InstanceStore {
|
|
|
4
4
|
private agentStore;
|
|
5
5
|
constructor(instancesDir: string, agentStore: AgentStore);
|
|
6
6
|
private ensureDir;
|
|
7
|
+
private readFileOrEmpty;
|
|
7
8
|
/** Get the root path for an instance */
|
|
8
9
|
getInstancePath(agentName: string, userId: string): string;
|
|
9
10
|
/** Get the workspace subdir (what gets mounted into Docker) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-store.d.ts","sourceRoot":"","sources":["../src/instance-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instance-store.d.ts","sourceRoot":"","sources":["../src/instance-store.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,qBAAa,aAAa;IAEtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,UAAU;gBADV,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,UAAU;IAGhC,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,eAAe;IAQvB,wCAAwC;IACxC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAI1D,+DAA+D;IAC/D,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAI3D,gFAAgF;IAChF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IA8BzD,kFAAkF;IAClF,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA0BrD,yBAAyB;IACzB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAO1D,4DAA4D;IAC5D,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAwB9F"}
|
package/dist/instance-store.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { existsSync, mkdirSync,
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync, readdirSync, statSync, } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { generateUniversalClaudeMd, generateContextMd } from "./claude-md-generator.js";
|
|
4
4
|
import { MemoryStore } from "./memory-store.js";
|
|
5
|
-
import { getConfigDir } from "./config.js";
|
|
6
5
|
export class InstanceStore {
|
|
7
6
|
instancesDir;
|
|
8
7
|
agentStore;
|
|
@@ -15,6 +14,14 @@ export class InstanceStore {
|
|
|
15
14
|
mkdirSync(path, { recursive: true });
|
|
16
15
|
}
|
|
17
16
|
}
|
|
17
|
+
readFileOrEmpty(path) {
|
|
18
|
+
try {
|
|
19
|
+
return readFileSync(path, "utf-8");
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return "";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
18
25
|
/** Get the root path for an instance */
|
|
19
26
|
getInstancePath(agentName, userId) {
|
|
20
27
|
return join(this.instancesDir, agentName, userId);
|
|
@@ -33,27 +40,16 @@ export class InstanceStore {
|
|
|
33
40
|
this.ensureDir(join(instancePath, "workspace"));
|
|
34
41
|
this.ensureDir(join(instancePath, "memory"));
|
|
35
42
|
this.ensureDir(join(instancePath, "cron"));
|
|
36
|
-
//
|
|
37
|
-
const universalClaudeMd = join(getConfigDir(), "CLAUDE.md");
|
|
38
|
-
if (existsSync(universalClaudeMd)) {
|
|
39
|
-
cpSync(universalClaudeMd, join(instancePath, "CLAUDE.md"));
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
// Generate it if it doesn't exist yet
|
|
43
|
-
writeFileSync(join(instancePath, "CLAUDE.md"), generateUniversalClaudeMd(), "utf-8");
|
|
44
|
-
}
|
|
45
|
-
// Copy agent template files
|
|
43
|
+
// Read agent template files
|
|
46
44
|
const agentDir = this.agentStore.workspacePath(agentName);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
cpSync(src, join(instancePath, file));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// Generate CONTEXT.md
|
|
45
|
+
const soul = this.readFileOrEmpty(join(agentDir, "SOUL.md"));
|
|
46
|
+
const role = this.readFileOrEmpty(join(agentDir, "ROLE.md"));
|
|
47
|
+
// Generate CONTEXT.md content
|
|
54
48
|
const memoryStore = new MemoryStore(join(instancePath, "memory"));
|
|
55
49
|
const memories = memoryStore.list();
|
|
56
|
-
|
|
50
|
+
const context = generateContextMd(config, memories);
|
|
51
|
+
// Generate unified CLAUDE.md with soul/role/context inlined
|
|
52
|
+
writeFileSync(join(instancePath, "CLAUDE.md"), generateUniversalClaudeMd({ soul, role, context }), "utf-8");
|
|
57
53
|
return instancePath;
|
|
58
54
|
}
|
|
59
55
|
/** Re-copy template files and regenerate CONTEXT.md after agent config changes */
|
|
@@ -66,23 +62,15 @@ export class InstanceStore {
|
|
|
66
62
|
this.createInstance(agentName, userId);
|
|
67
63
|
return;
|
|
68
64
|
}
|
|
69
|
-
//
|
|
65
|
+
// Read agent template files
|
|
70
66
|
const agentDir = this.agentStore.workspacePath(agentName);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
cpSync(src, join(instancePath, file));
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Re-copy universal CLAUDE.md
|
|
78
|
-
const universalClaudeMd = join(getConfigDir(), "CLAUDE.md");
|
|
79
|
-
if (existsSync(universalClaudeMd)) {
|
|
80
|
-
cpSync(universalClaudeMd, join(instancePath, "CLAUDE.md"));
|
|
81
|
-
}
|
|
82
|
-
// Regenerate CONTEXT.md
|
|
67
|
+
const soul = this.readFileOrEmpty(join(agentDir, "SOUL.md"));
|
|
68
|
+
const role = this.readFileOrEmpty(join(agentDir, "ROLE.md"));
|
|
69
|
+
// Regenerate unified CLAUDE.md with soul/role/context inlined
|
|
83
70
|
const memoryStore = new MemoryStore(join(instancePath, "memory"));
|
|
84
71
|
const memories = memoryStore.list();
|
|
85
|
-
|
|
72
|
+
const context = generateContextMd(config, memories);
|
|
73
|
+
writeFileSync(join(instancePath, "CLAUDE.md"), generateUniversalClaudeMd({ soul, role, context }), "utf-8");
|
|
86
74
|
}
|
|
87
75
|
/** Delete an instance */
|
|
88
76
|
deleteInstance(agentName, userId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-store.js","sourceRoot":"","sources":["../src/instance-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,
|
|
1
|
+
{"version":3,"file":"instance-store.js","sourceRoot":"","sources":["../src/instance-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
export interface IntegrationDef {
|
|
2
2
|
id: string;
|
|
3
3
|
displayName: string;
|
|
4
|
+
provider: string;
|
|
4
5
|
scopes: string[];
|
|
5
6
|
}
|
|
7
|
+
export interface ProviderConfig {
|
|
8
|
+
authUrl: string;
|
|
9
|
+
tokenUrl: string;
|
|
10
|
+
userInfoUrl: string;
|
|
11
|
+
clientIdEnv: string;
|
|
12
|
+
clientSecretEnv: string;
|
|
13
|
+
extraScopes: string[];
|
|
14
|
+
extraAuthParams: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
export declare const PROVIDERS: Record<string, ProviderConfig>;
|
|
6
17
|
export declare const INTEGRATIONS: Record<string, IntegrationDef>;
|
|
7
18
|
//# sourceMappingURL=integration-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-registry.d.ts","sourceRoot":"","sources":["../src/integration-registry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"integration-registry.d.ts","sourceRoot":"","sources":["../src/integration-registry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAmBpD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAqDvD,CAAC"}
|
|
@@ -1,17 +1,40 @@
|
|
|
1
|
+
export const PROVIDERS = {
|
|
2
|
+
google: {
|
|
3
|
+
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
4
|
+
tokenUrl: "https://oauth2.googleapis.com/token",
|
|
5
|
+
userInfoUrl: "https://www.googleapis.com/oauth2/v2/userinfo",
|
|
6
|
+
clientIdEnv: "GOOGLE_CLIENT_ID",
|
|
7
|
+
clientSecretEnv: "GOOGLE_CLIENT_SECRET",
|
|
8
|
+
extraScopes: ["openid", "email", "profile"],
|
|
9
|
+
extraAuthParams: { access_type: "offline", prompt: "consent" },
|
|
10
|
+
},
|
|
11
|
+
github: {
|
|
12
|
+
authUrl: "https://github.com/login/oauth/authorize",
|
|
13
|
+
tokenUrl: "https://github.com/login/oauth/access_token",
|
|
14
|
+
userInfoUrl: "https://api.github.com/user",
|
|
15
|
+
clientIdEnv: "GITHUB_CLIENT_ID",
|
|
16
|
+
clientSecretEnv: "GITHUB_CLIENT_SECRET",
|
|
17
|
+
extraScopes: [],
|
|
18
|
+
extraAuthParams: {},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
1
21
|
export const INTEGRATIONS = {
|
|
2
22
|
gmail: {
|
|
3
23
|
id: "gmail",
|
|
4
24
|
displayName: "Gmail",
|
|
25
|
+
provider: "google",
|
|
5
26
|
scopes: ["https://www.googleapis.com/auth/gmail.modify"],
|
|
6
27
|
},
|
|
7
28
|
gdrive: {
|
|
8
29
|
id: "gdrive",
|
|
9
30
|
displayName: "Google Drive",
|
|
31
|
+
provider: "google",
|
|
10
32
|
scopes: ["https://www.googleapis.com/auth/drive"],
|
|
11
33
|
},
|
|
12
34
|
gsheets: {
|
|
13
35
|
id: "gsheets",
|
|
14
36
|
displayName: "Google Sheets",
|
|
37
|
+
provider: "google",
|
|
15
38
|
scopes: [
|
|
16
39
|
"https://www.googleapis.com/auth/spreadsheets",
|
|
17
40
|
"https://www.googleapis.com/auth/drive",
|
|
@@ -20,6 +43,7 @@ export const INTEGRATIONS = {
|
|
|
20
43
|
gslides: {
|
|
21
44
|
id: "gslides",
|
|
22
45
|
displayName: "Google Slides",
|
|
46
|
+
provider: "google",
|
|
23
47
|
scopes: [
|
|
24
48
|
"https://www.googleapis.com/auth/presentations",
|
|
25
49
|
"https://www.googleapis.com/auth/drive.file",
|
|
@@ -28,16 +52,24 @@ export const INTEGRATIONS = {
|
|
|
28
52
|
calendar: {
|
|
29
53
|
id: "calendar",
|
|
30
54
|
displayName: "Google Calendar",
|
|
55
|
+
provider: "google",
|
|
31
56
|
scopes: ["https://www.googleapis.com/auth/calendar"],
|
|
32
57
|
},
|
|
33
58
|
forms: {
|
|
34
59
|
id: "forms",
|
|
35
60
|
displayName: "Google Forms",
|
|
61
|
+
provider: "google",
|
|
36
62
|
scopes: [
|
|
37
63
|
"https://www.googleapis.com/auth/forms.body",
|
|
38
64
|
"https://www.googleapis.com/auth/forms.responses.readonly",
|
|
39
65
|
"https://www.googleapis.com/auth/drive.metadata.readonly",
|
|
40
66
|
],
|
|
41
67
|
},
|
|
68
|
+
github: {
|
|
69
|
+
id: "github",
|
|
70
|
+
displayName: "GitHub",
|
|
71
|
+
provider: "github",
|
|
72
|
+
scopes: ["repo", "read:user", "user:email"],
|
|
73
|
+
},
|
|
42
74
|
};
|
|
43
75
|
//# sourceMappingURL=integration-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-registry.js","sourceRoot":"","sources":["../src/integration-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"integration-registry.js","sourceRoot":"","sources":["../src/integration-registry.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,SAAS,GAAmC;IACvD,MAAM,EAAE;QACN,OAAO,EAAE,8CAA8C;QACvD,QAAQ,EAAE,qCAAqC;QAC/C,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,kBAAkB;QAC/B,eAAe,EAAE,sBAAsB;QACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;QAC3C,eAAe,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;KAC/D;IACD,MAAM,EAAE;QACN,OAAO,EAAE,0CAA0C;QACnD,QAAQ,EAAE,6CAA6C;QACvD,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE,kBAAkB;QAC/B,eAAe,EAAE,sBAAsB;QACvC,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;KACpB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAmC;IAC1D,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,CAAC,8CAA8C,CAAC;KACzD;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,CAAC,uCAAuC,CAAC;KAClD;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,eAAe;QAC5B,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE;YACN,8CAA8C;YAC9C,uCAAuC;SACxC;KACF;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,eAAe;QAC5B,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE;YACN,+CAA+C;YAC/C,4CAA4C;SAC7C;KACF;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU;QACd,WAAW,EAAE,iBAAiB;QAC9B,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,CAAC,0CAA0C,CAAC;KACrD;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE;YACN,4CAA4C;YAC5C,0DAA0D;YAC1D,yDAAyD;SAC1D;KACF;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;KAC5C;CACF,CAAC"}
|
package/dist/token-store.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
type OAuthCredentials = Record<string, any>;
|
|
2
2
|
export declare class TokenStore {
|
|
3
3
|
private tokensPath;
|
|
4
4
|
constructor(tokensPath: string);
|
|
5
5
|
private load;
|
|
6
6
|
private save;
|
|
7
|
-
get(account: string):
|
|
8
|
-
set(account: string, tokens:
|
|
7
|
+
get(account: string): OAuthCredentials | null;
|
|
8
|
+
set(account: string, tokens: OAuthCredentials): void;
|
|
9
9
|
has(account: string): boolean;
|
|
10
10
|
delete(account: string): boolean;
|
|
11
11
|
list(): string[];
|
|
12
12
|
}
|
|
13
|
+
export {};
|
|
13
14
|
//# sourceMappingURL=token-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AAGA,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAM5C,qBAAa,UAAU;IACT,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,MAAM;IAEtC,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,IAAI;IAQZ,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAa7C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAMpD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAmBhC,IAAI,IAAI,MAAM,EAAE;CAGjB"}
|
package/dist/token-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digitalpresence/cliclaw-auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,10 +10,6 @@
|
|
|
10
10
|
"types": "./dist/index.d.ts"
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
|
-
"scripts": {
|
|
14
|
-
"build": "tsc",
|
|
15
|
-
"typecheck": "tsc --noEmit"
|
|
16
|
-
},
|
|
17
13
|
"dependencies": {
|
|
18
14
|
"google-auth-library": "^10.5.0",
|
|
19
15
|
"googleapis": "^144.0.0"
|
|
@@ -21,5 +17,9 @@
|
|
|
21
17
|
"devDependencies": {
|
|
22
18
|
"@types/node": "^22.0.0",
|
|
23
19
|
"typescript": "^5.8.0"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"typecheck": "tsc --noEmit"
|
|
24
24
|
}
|
|
25
|
-
}
|
|
25
|
+
}
|
|
@@ -4,14 +4,33 @@ import type { MemoryEntry } from "./memory-store.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Generates the universal ~/.cliclaw/CLAUDE.md shared by all agents.
|
|
6
6
|
* Contains safety rules, CLI usage patterns, memory instructions, and behavioral guidelines.
|
|
7
|
+
* When soul/role/context are provided, they are inlined so the agent doesn't waste turns reading files.
|
|
7
8
|
*/
|
|
8
|
-
export function generateUniversalClaudeMd(
|
|
9
|
+
export function generateUniversalClaudeMd(sections?: {
|
|
10
|
+
soul?: string;
|
|
11
|
+
role?: string;
|
|
12
|
+
context?: string;
|
|
13
|
+
}): string {
|
|
9
14
|
const lines: string[] = [];
|
|
10
15
|
|
|
11
16
|
lines.push("# Agent Instructions");
|
|
12
17
|
lines.push("");
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
|
|
19
|
+
if (sections?.soul || sections?.role || sections?.context) {
|
|
20
|
+
if (sections.soul) {
|
|
21
|
+
lines.push(sections.soul.trim());
|
|
22
|
+
lines.push("");
|
|
23
|
+
}
|
|
24
|
+
if (sections.role) {
|
|
25
|
+
lines.push(sections.role.trim());
|
|
26
|
+
lines.push("");
|
|
27
|
+
}
|
|
28
|
+
if (sections.context) {
|
|
29
|
+
lines.push(sections.context.trim());
|
|
30
|
+
lines.push("");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
15
34
|
|
|
16
35
|
lines.push("## Safety Rules");
|
|
17
36
|
lines.push("- Never access files outside your workspace directory");
|
package/src/index.ts
CHANGED
|
@@ -12,8 +12,8 @@ export { createCalendarOAuthClient, getCalendarAuthUrl } from "./calendar-auth.j
|
|
|
12
12
|
export { createFormsOAuthClient, getFormsAuthUrl } from "./forms-auth.js";
|
|
13
13
|
export { waitForOAuthCallback } from "./oauth-server.js";
|
|
14
14
|
export { loadConfig, getConfigDir, getTokensPath, getAgentsDir } from "./config.js";
|
|
15
|
-
export { INTEGRATIONS } from "./integration-registry.js";
|
|
16
|
-
export type { IntegrationDef } from "./integration-registry.js";
|
|
15
|
+
export { INTEGRATIONS, PROVIDERS } from "./integration-registry.js";
|
|
16
|
+
export type { IntegrationDef, ProviderConfig } from "./integration-registry.js";
|
|
17
17
|
export type { CliclawConfig } from "./config.js";
|
|
18
18
|
export { generateUniversalClaudeMd, generateContextMd } from "./claude-md-generator.js";
|
|
19
19
|
export { InstanceStore } from "./instance-store.js";
|
package/src/instance-store.ts
CHANGED
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
mkdirSync,
|
|
4
4
|
readFileSync,
|
|
5
5
|
writeFileSync,
|
|
6
|
-
cpSync,
|
|
7
6
|
rmSync,
|
|
8
7
|
readdirSync,
|
|
9
8
|
statSync,
|
|
@@ -12,7 +11,6 @@ import { join } from "path";
|
|
|
12
11
|
import { AgentStore } from "./agent-store.js";
|
|
13
12
|
import { generateUniversalClaudeMd, generateContextMd } from "./claude-md-generator.js";
|
|
14
13
|
import { MemoryStore } from "./memory-store.js";
|
|
15
|
-
import { getConfigDir } from "./config.js";
|
|
16
14
|
|
|
17
15
|
export class InstanceStore {
|
|
18
16
|
constructor(
|
|
@@ -26,6 +24,14 @@ export class InstanceStore {
|
|
|
26
24
|
}
|
|
27
25
|
}
|
|
28
26
|
|
|
27
|
+
private readFileOrEmpty(path: string): string {
|
|
28
|
+
try {
|
|
29
|
+
return readFileSync(path, "utf-8");
|
|
30
|
+
} catch {
|
|
31
|
+
return "";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
29
35
|
/** Get the root path for an instance */
|
|
30
36
|
getInstancePath(agentName: string, userId: string): string {
|
|
31
37
|
return join(this.instancesDir, agentName, userId);
|
|
@@ -47,30 +53,20 @@ export class InstanceStore {
|
|
|
47
53
|
this.ensureDir(join(instancePath, "memory"));
|
|
48
54
|
this.ensureDir(join(instancePath, "cron"));
|
|
49
55
|
|
|
50
|
-
//
|
|
51
|
-
const universalClaudeMd = join(getConfigDir(), "CLAUDE.md");
|
|
52
|
-
if (existsSync(universalClaudeMd)) {
|
|
53
|
-
cpSync(universalClaudeMd, join(instancePath, "CLAUDE.md"));
|
|
54
|
-
} else {
|
|
55
|
-
// Generate it if it doesn't exist yet
|
|
56
|
-
writeFileSync(join(instancePath, "CLAUDE.md"), generateUniversalClaudeMd(), "utf-8");
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Copy agent template files
|
|
56
|
+
// Read agent template files
|
|
60
57
|
const agentDir = this.agentStore.workspacePath(agentName);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (existsSync(src)) {
|
|
64
|
-
cpSync(src, join(instancePath, file));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
58
|
+
const soul = this.readFileOrEmpty(join(agentDir, "SOUL.md"));
|
|
59
|
+
const role = this.readFileOrEmpty(join(agentDir, "ROLE.md"));
|
|
67
60
|
|
|
68
|
-
// Generate CONTEXT.md
|
|
61
|
+
// Generate CONTEXT.md content
|
|
69
62
|
const memoryStore = new MemoryStore(join(instancePath, "memory"));
|
|
70
63
|
const memories = memoryStore.list();
|
|
64
|
+
const context = generateContextMd(config, memories);
|
|
65
|
+
|
|
66
|
+
// Generate unified CLAUDE.md with soul/role/context inlined
|
|
71
67
|
writeFileSync(
|
|
72
|
-
join(instancePath, "
|
|
73
|
-
|
|
68
|
+
join(instancePath, "CLAUDE.md"),
|
|
69
|
+
generateUniversalClaudeMd({ soul, role, context }),
|
|
74
70
|
"utf-8",
|
|
75
71
|
);
|
|
76
72
|
|
|
@@ -88,27 +84,18 @@ export class InstanceStore {
|
|
|
88
84
|
return;
|
|
89
85
|
}
|
|
90
86
|
|
|
91
|
-
//
|
|
87
|
+
// Read agent template files
|
|
92
88
|
const agentDir = this.agentStore.workspacePath(agentName);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (existsSync(src)) {
|
|
96
|
-
cpSync(src, join(instancePath, file));
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Re-copy universal CLAUDE.md
|
|
101
|
-
const universalClaudeMd = join(getConfigDir(), "CLAUDE.md");
|
|
102
|
-
if (existsSync(universalClaudeMd)) {
|
|
103
|
-
cpSync(universalClaudeMd, join(instancePath, "CLAUDE.md"));
|
|
104
|
-
}
|
|
89
|
+
const soul = this.readFileOrEmpty(join(agentDir, "SOUL.md"));
|
|
90
|
+
const role = this.readFileOrEmpty(join(agentDir, "ROLE.md"));
|
|
105
91
|
|
|
106
|
-
// Regenerate
|
|
92
|
+
// Regenerate unified CLAUDE.md with soul/role/context inlined
|
|
107
93
|
const memoryStore = new MemoryStore(join(instancePath, "memory"));
|
|
108
94
|
const memories = memoryStore.list();
|
|
95
|
+
const context = generateContextMd(config, memories);
|
|
109
96
|
writeFileSync(
|
|
110
|
-
join(instancePath, "
|
|
111
|
-
|
|
97
|
+
join(instancePath, "CLAUDE.md"),
|
|
98
|
+
generateUniversalClaudeMd({ soul, role, context }),
|
|
112
99
|
"utf-8",
|
|
113
100
|
);
|
|
114
101
|
}
|
|
@@ -1,23 +1,58 @@
|
|
|
1
1
|
export interface IntegrationDef {
|
|
2
2
|
id: string;
|
|
3
3
|
displayName: string;
|
|
4
|
+
provider: string;
|
|
4
5
|
scopes: string[];
|
|
5
6
|
}
|
|
6
7
|
|
|
8
|
+
export interface ProviderConfig {
|
|
9
|
+
authUrl: string;
|
|
10
|
+
tokenUrl: string;
|
|
11
|
+
userInfoUrl: string;
|
|
12
|
+
clientIdEnv: string;
|
|
13
|
+
clientSecretEnv: string;
|
|
14
|
+
extraScopes: string[];
|
|
15
|
+
extraAuthParams: Record<string, string>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const PROVIDERS: Record<string, ProviderConfig> = {
|
|
19
|
+
google: {
|
|
20
|
+
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
21
|
+
tokenUrl: "https://oauth2.googleapis.com/token",
|
|
22
|
+
userInfoUrl: "https://www.googleapis.com/oauth2/v2/userinfo",
|
|
23
|
+
clientIdEnv: "GOOGLE_CLIENT_ID",
|
|
24
|
+
clientSecretEnv: "GOOGLE_CLIENT_SECRET",
|
|
25
|
+
extraScopes: ["openid", "email", "profile"],
|
|
26
|
+
extraAuthParams: { access_type: "offline", prompt: "consent" },
|
|
27
|
+
},
|
|
28
|
+
github: {
|
|
29
|
+
authUrl: "https://github.com/login/oauth/authorize",
|
|
30
|
+
tokenUrl: "https://github.com/login/oauth/access_token",
|
|
31
|
+
userInfoUrl: "https://api.github.com/user",
|
|
32
|
+
clientIdEnv: "GITHUB_CLIENT_ID",
|
|
33
|
+
clientSecretEnv: "GITHUB_CLIENT_SECRET",
|
|
34
|
+
extraScopes: [],
|
|
35
|
+
extraAuthParams: {},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
|
|
7
39
|
export const INTEGRATIONS: Record<string, IntegrationDef> = {
|
|
8
40
|
gmail: {
|
|
9
41
|
id: "gmail",
|
|
10
42
|
displayName: "Gmail",
|
|
43
|
+
provider: "google",
|
|
11
44
|
scopes: ["https://www.googleapis.com/auth/gmail.modify"],
|
|
12
45
|
},
|
|
13
46
|
gdrive: {
|
|
14
47
|
id: "gdrive",
|
|
15
48
|
displayName: "Google Drive",
|
|
49
|
+
provider: "google",
|
|
16
50
|
scopes: ["https://www.googleapis.com/auth/drive"],
|
|
17
51
|
},
|
|
18
52
|
gsheets: {
|
|
19
53
|
id: "gsheets",
|
|
20
54
|
displayName: "Google Sheets",
|
|
55
|
+
provider: "google",
|
|
21
56
|
scopes: [
|
|
22
57
|
"https://www.googleapis.com/auth/spreadsheets",
|
|
23
58
|
"https://www.googleapis.com/auth/drive",
|
|
@@ -26,6 +61,7 @@ export const INTEGRATIONS: Record<string, IntegrationDef> = {
|
|
|
26
61
|
gslides: {
|
|
27
62
|
id: "gslides",
|
|
28
63
|
displayName: "Google Slides",
|
|
64
|
+
provider: "google",
|
|
29
65
|
scopes: [
|
|
30
66
|
"https://www.googleapis.com/auth/presentations",
|
|
31
67
|
"https://www.googleapis.com/auth/drive.file",
|
|
@@ -34,15 +70,23 @@ export const INTEGRATIONS: Record<string, IntegrationDef> = {
|
|
|
34
70
|
calendar: {
|
|
35
71
|
id: "calendar",
|
|
36
72
|
displayName: "Google Calendar",
|
|
73
|
+
provider: "google",
|
|
37
74
|
scopes: ["https://www.googleapis.com/auth/calendar"],
|
|
38
75
|
},
|
|
39
76
|
forms: {
|
|
40
77
|
id: "forms",
|
|
41
78
|
displayName: "Google Forms",
|
|
79
|
+
provider: "google",
|
|
42
80
|
scopes: [
|
|
43
81
|
"https://www.googleapis.com/auth/forms.body",
|
|
44
82
|
"https://www.googleapis.com/auth/forms.responses.readonly",
|
|
45
83
|
"https://www.googleapis.com/auth/drive.metadata.readonly",
|
|
46
84
|
],
|
|
47
85
|
},
|
|
86
|
+
github: {
|
|
87
|
+
id: "github",
|
|
88
|
+
displayName: "GitHub",
|
|
89
|
+
provider: "github",
|
|
90
|
+
scopes: ["repo", "read:user", "user:email"],
|
|
91
|
+
},
|
|
48
92
|
};
|
package/src/token-store.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
2
2
|
import { dirname } from "path";
|
|
3
|
-
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
|
+
type OAuthCredentials = Record<string, any>;
|
|
4
5
|
|
|
5
6
|
interface TokenFile {
|
|
6
|
-
[account: string]:
|
|
7
|
+
[account: string]: OAuthCredentials;
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
export class TokenStore {
|
|
@@ -28,7 +29,7 @@ export class TokenStore {
|
|
|
28
29
|
writeFileSync(this.tokensPath, JSON.stringify(data, null, 2), "utf-8");
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
get(account: string):
|
|
32
|
+
get(account: string): OAuthCredentials | null {
|
|
32
33
|
const data = this.load();
|
|
33
34
|
if (data[account]) return data[account];
|
|
34
35
|
// Fall back to integration:account key format (portal token injection)
|
|
@@ -41,7 +42,7 @@ export class TokenStore {
|
|
|
41
42
|
return null;
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
set(account: string, tokens:
|
|
45
|
+
set(account: string, tokens: OAuthCredentials): void {
|
|
45
46
|
const data = this.load();
|
|
46
47
|
data[account] = tokens;
|
|
47
48
|
this.save(data);
|