@sift-wiki/conductor 0.1.0 → 0.2.0-beta.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/README.md +28 -58
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +29 -0
- package/dist/cli.js.map +1 -1
- package/dist/conductorClient.d.ts +192 -1
- package/dist/conductorClient.js +61 -3
- package/dist/conductorClient.js.map +1 -1
- package/dist/daemon.d.ts +4 -0
- package/dist/daemon.js +42 -2
- package/dist/daemon.js.map +1 -1
- package/dist/desktop/app/contracts.d.ts +71 -0
- package/dist/desktop/app/contracts.js +19 -0
- package/dist/desktop/app/contracts.js.map +1 -0
- package/dist/desktop/app/controller.d.ts +58 -0
- package/dist/desktop/app/controller.js +161 -0
- package/dist/desktop/app/controller.js.map +1 -0
- package/dist/desktop/app/runtimeController.d.ts +22 -0
- package/dist/desktop/app/runtimeController.js +44 -0
- package/dist/desktop/app/runtimeController.js.map +1 -0
- package/dist/localApi/authorizedPairing.d.ts +12 -0
- package/dist/localApi/authorizedPairing.js +18 -0
- package/dist/localApi/authorizedPairing.js.map +1 -0
- package/dist/localApi/contracts.d.ts +253 -0
- package/dist/localApi/contracts.js +173 -0
- package/dist/localApi/contracts.js.map +1 -0
- package/dist/localApi/server.d.ts +20 -0
- package/dist/localApi/server.js +412 -0
- package/dist/localApi/server.js.map +1 -0
- package/dist/localApi/workConsole.d.ts +74 -0
- package/dist/localApi/workConsole.js +342 -0
- package/dist/localApi/workConsole.js.map +1 -0
- package/dist/localApi/workContracts.d.ts +213 -0
- package/dist/localApi/workContracts.js +130 -0
- package/dist/localApi/workContracts.js.map +1 -0
- package/dist/localApp/platform.d.ts +2 -0
- package/dist/localApp/platform.js +57 -0
- package/dist/localApp/platform.js.map +1 -0
- package/dist/localApp/service.d.ts +25 -0
- package/dist/localApp/service.js +114 -0
- package/dist/localApp/service.js.map +1 -0
- package/dist/runtime/localLogSpool.d.ts +1 -0
- package/dist/runtime/localLogSpool.js +4 -0
- package/dist/runtime/localLogSpool.js.map +1 -1
- package/dist/userAuth/service.d.ts +26 -0
- package/dist/userAuth/service.js +170 -0
- package/dist/userAuth/service.js.map +1 -0
- package/dist/userAuth/store.d.ts +42 -0
- package/dist/userAuth/store.js +160 -0
- package/dist/userAuth/store.js.map +1 -0
- package/dist/userAuth/types.d.ts +63 -0
- package/dist/userAuth/types.js +29 -0
- package/dist/userAuth/types.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workTypes.d.ts +160 -29
- package/dist/workTypes.js +31 -0
- package/dist/workTypes.js.map +1 -1
- package/dist-web/assets/index-CWfnzdLn.css +1 -0
- package/dist-web/assets/index-D5X9InfE.js +72 -0
- package/dist-web/index.html +15 -0
- package/docs/provider-setup.md +81 -0
- package/docs/quickstart.md +62 -0
- package/docs/troubleshooting.md +63 -0
- package/package.json +13 -3
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type StoredUserAuthorization, type UserCredentialStore } from "./types.js";
|
|
2
|
+
type CommandResult = {
|
|
3
|
+
stdout: string;
|
|
4
|
+
stderr: string;
|
|
5
|
+
};
|
|
6
|
+
type CommandRunner = (file: string, args: string[]) => Promise<CommandResult>;
|
|
7
|
+
type DpapiRunner = (operation: "protect" | "unprotect", value: string) => Promise<string>;
|
|
8
|
+
export declare function createUserCredentialStore(input?: {
|
|
9
|
+
platform?: NodeJS.Platform | undefined;
|
|
10
|
+
metadataPath?: string | undefined;
|
|
11
|
+
secretPath?: string | undefined;
|
|
12
|
+
}): UserCredentialStore;
|
|
13
|
+
export declare class RestrictedFileUserCredentialStore implements UserCredentialStore {
|
|
14
|
+
readonly path: string;
|
|
15
|
+
readonly storageKind: "restricted-file";
|
|
16
|
+
constructor(path?: string);
|
|
17
|
+
read(): Promise<StoredUserAuthorization | undefined>;
|
|
18
|
+
write(value: StoredUserAuthorization): Promise<void>;
|
|
19
|
+
delete(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export declare class MacKeychainUserCredentialStore implements UserCredentialStore {
|
|
22
|
+
readonly metadataPath: string;
|
|
23
|
+
private readonly runCommand;
|
|
24
|
+
readonly storageKind: "macos-keychain";
|
|
25
|
+
constructor(metadataPath?: string, runCommand?: CommandRunner);
|
|
26
|
+
read(): Promise<StoredUserAuthorization | undefined>;
|
|
27
|
+
write(value: StoredUserAuthorization): Promise<void>;
|
|
28
|
+
delete(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export declare class WindowsDpapiUserCredentialStore implements UserCredentialStore {
|
|
31
|
+
readonly metadataPath: string;
|
|
32
|
+
readonly secretPath: string;
|
|
33
|
+
private readonly dpapi;
|
|
34
|
+
readonly storageKind: "windows-dpapi";
|
|
35
|
+
constructor(metadataPath?: string, secretPath?: string, dpapi?: DpapiRunner);
|
|
36
|
+
read(): Promise<StoredUserAuthorization | undefined>;
|
|
37
|
+
write(value: StoredUserAuthorization): Promise<void>;
|
|
38
|
+
delete(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export declare function defaultUserMetadataPath(env?: NodeJS.ProcessEnv): string;
|
|
41
|
+
export declare function defaultUserSecretPath(env?: NodeJS.ProcessEnv): string;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { chmod, mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { defaultConfigPath } from "../config.js";
|
|
6
|
+
import { storedUserAuthorizationSchema } from "./types.js";
|
|
7
|
+
const execFileAsync = promisify(execFile);
|
|
8
|
+
const KEYCHAIN_SERVICE = "wiki.sift.conductor.user";
|
|
9
|
+
const KEYCHAIN_ACCOUNT = "default";
|
|
10
|
+
const storedUserMetadataSchema = storedUserAuthorizationSchema.omit({ token: true });
|
|
11
|
+
export function createUserCredentialStore(input = {}) {
|
|
12
|
+
const platform = input.platform ?? process.platform;
|
|
13
|
+
const metadataPath = input.metadataPath ?? defaultUserMetadataPath();
|
|
14
|
+
if (platform === "darwin")
|
|
15
|
+
return new MacKeychainUserCredentialStore(metadataPath);
|
|
16
|
+
if (platform === "win32") {
|
|
17
|
+
return new WindowsDpapiUserCredentialStore(metadataPath, input.secretPath ?? defaultUserSecretPath());
|
|
18
|
+
}
|
|
19
|
+
return new RestrictedFileUserCredentialStore(metadataPath);
|
|
20
|
+
}
|
|
21
|
+
export class RestrictedFileUserCredentialStore {
|
|
22
|
+
path;
|
|
23
|
+
storageKind = "restricted-file";
|
|
24
|
+
constructor(path = defaultUserMetadataPath()) {
|
|
25
|
+
this.path = path;
|
|
26
|
+
}
|
|
27
|
+
async read() {
|
|
28
|
+
const value = await readJsonIfPresent(this.path);
|
|
29
|
+
return value === undefined ? undefined : storedUserAuthorizationSchema.parse(value);
|
|
30
|
+
}
|
|
31
|
+
async write(value) {
|
|
32
|
+
await atomicPrivateJsonWrite(this.path, storedUserAuthorizationSchema.parse(value));
|
|
33
|
+
}
|
|
34
|
+
delete() {
|
|
35
|
+
return rm(this.path, { force: true });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class MacKeychainUserCredentialStore {
|
|
39
|
+
metadataPath;
|
|
40
|
+
runCommand;
|
|
41
|
+
storageKind = "macos-keychain";
|
|
42
|
+
constructor(metadataPath = defaultUserMetadataPath(), runCommand = runExecFile) {
|
|
43
|
+
this.metadataPath = metadataPath;
|
|
44
|
+
this.runCommand = runCommand;
|
|
45
|
+
}
|
|
46
|
+
async read() {
|
|
47
|
+
const metadata = await readMetadata(this.metadataPath);
|
|
48
|
+
if (metadata === undefined)
|
|
49
|
+
return undefined;
|
|
50
|
+
let token;
|
|
51
|
+
try {
|
|
52
|
+
token = (await this.runCommand("security", ["find-generic-password", "-a", KEYCHAIN_ACCOUNT, "-s", KEYCHAIN_SERVICE, "-w"])).stdout.trim();
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
throw new Error("Sift Conductor user authorization is missing from macOS Keychain. Sign in again.");
|
|
56
|
+
}
|
|
57
|
+
return storedUserAuthorizationSchema.parse({ ...metadata, token });
|
|
58
|
+
}
|
|
59
|
+
async write(value) {
|
|
60
|
+
const parsed = storedUserAuthorizationSchema.parse(value);
|
|
61
|
+
const metadata = withoutToken(parsed);
|
|
62
|
+
await this.runCommand("security", ["add-generic-password", "-U", "-a", KEYCHAIN_ACCOUNT, "-s", KEYCHAIN_SERVICE, "-w", parsed.token]);
|
|
63
|
+
await atomicPrivateJsonWrite(this.metadataPath, metadata);
|
|
64
|
+
}
|
|
65
|
+
async delete() {
|
|
66
|
+
await this.runCommand("security", ["delete-generic-password", "-a", KEYCHAIN_ACCOUNT, "-s", KEYCHAIN_SERVICE]).catch(() => undefined);
|
|
67
|
+
await rm(this.metadataPath, { force: true });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export class WindowsDpapiUserCredentialStore {
|
|
71
|
+
metadataPath;
|
|
72
|
+
secretPath;
|
|
73
|
+
dpapi;
|
|
74
|
+
storageKind = "windows-dpapi";
|
|
75
|
+
constructor(metadataPath = defaultUserMetadataPath(), secretPath = defaultUserSecretPath(), dpapi = runDpapi) {
|
|
76
|
+
this.metadataPath = metadataPath;
|
|
77
|
+
this.secretPath = secretPath;
|
|
78
|
+
this.dpapi = dpapi;
|
|
79
|
+
}
|
|
80
|
+
async read() {
|
|
81
|
+
const metadata = await readMetadata(this.metadataPath);
|
|
82
|
+
if (metadata === undefined)
|
|
83
|
+
return undefined;
|
|
84
|
+
const encrypted = await readFile(this.secretPath, "utf8").catch(() => undefined);
|
|
85
|
+
if (encrypted === undefined)
|
|
86
|
+
throw new Error("Sift Conductor user authorization is missing from Windows credential storage. Sign in again.");
|
|
87
|
+
const token = await this.dpapi("unprotect", encrypted.trim());
|
|
88
|
+
return storedUserAuthorizationSchema.parse({ ...metadata, token });
|
|
89
|
+
}
|
|
90
|
+
async write(value) {
|
|
91
|
+
const parsed = storedUserAuthorizationSchema.parse(value);
|
|
92
|
+
const metadata = withoutToken(parsed);
|
|
93
|
+
const encrypted = await this.dpapi("protect", parsed.token);
|
|
94
|
+
await atomicPrivateTextWrite(this.secretPath, `${encrypted}\n`);
|
|
95
|
+
await atomicPrivateJsonWrite(this.metadataPath, metadata);
|
|
96
|
+
}
|
|
97
|
+
async delete() {
|
|
98
|
+
await Promise.all([rm(this.metadataPath, { force: true }), rm(this.secretPath, { force: true })]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export function defaultUserMetadataPath(env = process.env) {
|
|
102
|
+
return path.join(path.dirname(defaultConfigPath(env)), "user-authorization.json");
|
|
103
|
+
}
|
|
104
|
+
export function defaultUserSecretPath(env = process.env) {
|
|
105
|
+
return path.join(path.dirname(defaultConfigPath(env)), "user-authorization.dpapi");
|
|
106
|
+
}
|
|
107
|
+
async function runDpapi(operation, value) {
|
|
108
|
+
const script = operation === "protect"
|
|
109
|
+
? "$b=[Text.Encoding]::UTF8.GetBytes($env:SIFT_CONDUCTOR_SECRET);$e=[Security.Cryptography.ProtectedData]::Protect($b,$null,[Security.Cryptography.DataProtectionScope]::CurrentUser);[Convert]::ToBase64String($e)"
|
|
110
|
+
: "$e=[Convert]::FromBase64String($env:SIFT_CONDUCTOR_SECRET);$b=[Security.Cryptography.ProtectedData]::Unprotect($e,$null,[Security.Cryptography.DataProtectionScope]::CurrentUser);[Text.Encoding]::UTF8.GetString($b)";
|
|
111
|
+
const result = await execFileAsync("powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", script], {
|
|
112
|
+
windowsHide: true,
|
|
113
|
+
env: { ...process.env, SIFT_CONDUCTOR_SECRET: value },
|
|
114
|
+
});
|
|
115
|
+
const output = result.stdout.trim();
|
|
116
|
+
if (output.length === 0)
|
|
117
|
+
throw new Error("Windows credential protection returned no data.");
|
|
118
|
+
return output;
|
|
119
|
+
}
|
|
120
|
+
async function readMetadata(filePath) {
|
|
121
|
+
const value = await readJsonIfPresent(filePath);
|
|
122
|
+
if (value === undefined)
|
|
123
|
+
return undefined;
|
|
124
|
+
return storedUserMetadataSchema.parse(value);
|
|
125
|
+
}
|
|
126
|
+
async function runExecFile(file, args) {
|
|
127
|
+
const result = await execFileAsync(file, args);
|
|
128
|
+
return { stdout: result.stdout, stderr: result.stderr };
|
|
129
|
+
}
|
|
130
|
+
async function readJsonIfPresent(filePath) {
|
|
131
|
+
try {
|
|
132
|
+
return JSON.parse(await readFile(filePath, "utf8"));
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (isNodeError(error) && error.code === "ENOENT")
|
|
136
|
+
return undefined;
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function atomicPrivateJsonWrite(filePath, value) {
|
|
141
|
+
await atomicPrivateTextWrite(filePath, `${JSON.stringify(value, null, 2)}\n`);
|
|
142
|
+
}
|
|
143
|
+
async function atomicPrivateTextWrite(filePath, value) {
|
|
144
|
+
await mkdir(path.dirname(filePath), { recursive: true });
|
|
145
|
+
const temporary = `${filePath}.${String(process.pid)}.tmp`;
|
|
146
|
+
await writeFile(temporary, value, { mode: 0o600 });
|
|
147
|
+
await chmod(temporary, 0o600);
|
|
148
|
+
await rename(temporary, filePath);
|
|
149
|
+
await chmod(filePath, 0o600);
|
|
150
|
+
}
|
|
151
|
+
function withoutToken(value) {
|
|
152
|
+
const { token, ...metadata } = storedUserAuthorizationSchema.parse(value);
|
|
153
|
+
if (token.length === 0)
|
|
154
|
+
throw new Error("Stored Sift user token is empty.");
|
|
155
|
+
return storedUserMetadataSchema.parse(metadata);
|
|
156
|
+
}
|
|
157
|
+
function isNodeError(error) {
|
|
158
|
+
return error instanceof Error && "code" in error;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/userAuth/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,6BAA6B,EAA0D,MAAM,YAAY,CAAC;AAEnH,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AACpD,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACnC,MAAM,wBAAwB,GAAG,6BAA6B,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAOrF,MAAM,UAAU,yBAAyB,CAAC,QAItC,EAAE;IACJ,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACpD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,uBAAuB,EAAE,CAAC;IACrE,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,8BAA8B,CAAC,YAAY,CAAC,CAAC;IACnF,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,+BAA+B,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,IAAI,qBAAqB,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,IAAI,iCAAiC,CAAC,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,OAAO,iCAAiC;IAGvB;IAFZ,WAAW,GAAG,iBAA0B,CAAC;IAElD,YAAqB,OAAO,uBAAuB,EAAE;QAAhC,SAAI,GAAJ,IAAI,CAA4B;IAAG,CAAC;IAEzD,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAA8B;QACxC,MAAM,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,8BAA8B;IAI9B;IACQ;IAJV,WAAW,GAAG,gBAAyB,CAAC;IAEjD,YACW,eAAe,uBAAuB,EAAE,EAChC,aAA4B,WAAW;QAD/C,iBAAY,GAAZ,YAAY,CAA4B;QAChC,eAAU,GAAV,UAAU,CAA6B;IACvD,CAAC;IAEJ,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC7C,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,uBAAuB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7I,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,6BAA6B,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAA8B;QACxC,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtI,MAAM,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtI,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,+BAA+B;IAI/B;IACA;IACQ;IALV,WAAW,GAAG,eAAwB,CAAC;IAEhD,YACW,eAAe,uBAAuB,EAAE,EACxC,aAAa,qBAAqB,EAAE,EAC5B,QAAqB,QAAQ;QAFrC,iBAAY,GAAZ,YAAY,CAA4B;QACxC,eAAU,GAAV,UAAU,CAA0B;QAC5B,UAAK,GAAL,KAAK,CAAwB;IAC7C,CAAC;IAEJ,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACjF,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC;QAC7I,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,OAAO,6BAA6B,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAA8B;QACxC,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC;QAChE,MAAM,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,SAAkC,EAAE,KAAa;IACvE,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS;QACpC,CAAC,CAAC,kNAAkN;QACpN,CAAC,CAAC,uNAAuN,CAAC;IAC5N,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE;QAC1G,WAAW,EAAE,IAAI;QACjB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE;KACtD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC5F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,IAAc;IACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAY,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACpE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,QAAgB,EAAE,KAAc;IACpE,MAAM,sBAAsB,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,QAAgB,EAAE,KAAa;IACnE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3D,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,MAAM,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClC,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,YAAY,CAAC,KAA8B;IAClD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,OAAO,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const userCapabilitySchema: z.ZodEnum<{
|
|
3
|
+
"source:write": "source:write";
|
|
4
|
+
"source:manage": "source:manage";
|
|
5
|
+
"record:read": "record:read";
|
|
6
|
+
"record:write": "record:write";
|
|
7
|
+
"skill:update": "skill:update";
|
|
8
|
+
"event:audit:read": "event:audit:read";
|
|
9
|
+
"workspace:govern": "workspace:govern";
|
|
10
|
+
"workspace:own": "workspace:own";
|
|
11
|
+
}>;
|
|
12
|
+
export type UserCapability = z.infer<typeof userCapabilitySchema>;
|
|
13
|
+
export declare const storedUserAuthorizationSchema: z.ZodObject<{
|
|
14
|
+
apiBaseUrl: z.ZodURL;
|
|
15
|
+
appBaseUrl: z.ZodURL;
|
|
16
|
+
token: z.ZodString;
|
|
17
|
+
tokenId: z.ZodString;
|
|
18
|
+
tokenLabel: z.ZodString;
|
|
19
|
+
tokenExpiresAt: z.ZodISODateTime;
|
|
20
|
+
workspaceId: z.ZodString;
|
|
21
|
+
brainId: z.ZodString;
|
|
22
|
+
principalId: z.ZodString;
|
|
23
|
+
capabilities: z.ZodArray<z.ZodEnum<{
|
|
24
|
+
"source:write": "source:write";
|
|
25
|
+
"source:manage": "source:manage";
|
|
26
|
+
"record:read": "record:read";
|
|
27
|
+
"record:write": "record:write";
|
|
28
|
+
"skill:update": "skill:update";
|
|
29
|
+
"event:audit:read": "event:audit:read";
|
|
30
|
+
"workspace:govern": "workspace:govern";
|
|
31
|
+
"workspace:own": "workspace:own";
|
|
32
|
+
}>>;
|
|
33
|
+
}, z.core.$strict>;
|
|
34
|
+
export type StoredUserAuthorization = z.infer<typeof storedUserAuthorizationSchema>;
|
|
35
|
+
export type UserCredentialStore = {
|
|
36
|
+
readonly storageKind: "macos-keychain" | "windows-dpapi" | "restricted-file" | "memory";
|
|
37
|
+
read(): Promise<StoredUserAuthorization | undefined>;
|
|
38
|
+
write(value: StoredUserAuthorization): Promise<void>;
|
|
39
|
+
delete(): Promise<void>;
|
|
40
|
+
};
|
|
41
|
+
export type UserAuthorizationStatus = {
|
|
42
|
+
state: "signed_out";
|
|
43
|
+
storageKind: UserCredentialStore["storageKind"];
|
|
44
|
+
message?: string | undefined;
|
|
45
|
+
} | {
|
|
46
|
+
state: "pending";
|
|
47
|
+
storageKind: UserCredentialStore["storageKind"];
|
|
48
|
+
verificationUri: string;
|
|
49
|
+
userCode: string;
|
|
50
|
+
expiresAt: string;
|
|
51
|
+
} | {
|
|
52
|
+
state: "authorized";
|
|
53
|
+
storageKind: UserCredentialStore["storageKind"];
|
|
54
|
+
apiBaseUrl: string;
|
|
55
|
+
appBaseUrl: string;
|
|
56
|
+
workspaceId: string;
|
|
57
|
+
brainId: string;
|
|
58
|
+
principalId: string;
|
|
59
|
+
tokenLabel: string;
|
|
60
|
+
tokenExpiresAt: string;
|
|
61
|
+
capabilities: UserCapability[];
|
|
62
|
+
};
|
|
63
|
+
export declare const userAuthorizationStatusSchema: z.ZodType<UserAuthorizationStatus>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const userCapabilitySchema = z.enum([
|
|
3
|
+
"source:write",
|
|
4
|
+
"source:manage",
|
|
5
|
+
"record:read",
|
|
6
|
+
"record:write",
|
|
7
|
+
"skill:update",
|
|
8
|
+
"event:audit:read",
|
|
9
|
+
"workspace:govern",
|
|
10
|
+
"workspace:own",
|
|
11
|
+
]);
|
|
12
|
+
export const storedUserAuthorizationSchema = z.object({
|
|
13
|
+
apiBaseUrl: z.url(),
|
|
14
|
+
appBaseUrl: z.url(),
|
|
15
|
+
token: z.string().min(1),
|
|
16
|
+
tokenId: z.string().min(1),
|
|
17
|
+
tokenLabel: z.string().min(1),
|
|
18
|
+
tokenExpiresAt: z.iso.datetime(),
|
|
19
|
+
workspaceId: z.string().min(1),
|
|
20
|
+
brainId: z.string().min(1),
|
|
21
|
+
principalId: z.string().min(1),
|
|
22
|
+
capabilities: z.array(userCapabilitySchema),
|
|
23
|
+
}).strict();
|
|
24
|
+
export const userAuthorizationStatusSchema = z.discriminatedUnion("state", [
|
|
25
|
+
z.object({ state: z.literal("signed_out"), storageKind: z.enum(["macos-keychain", "windows-dpapi", "restricted-file", "memory"]), message: z.string().optional() }).strict(),
|
|
26
|
+
z.object({ state: z.literal("pending"), storageKind: z.enum(["macos-keychain", "windows-dpapi", "restricted-file", "memory"]), verificationUri: z.url(), userCode: z.string(), expiresAt: z.iso.datetime() }).strict(),
|
|
27
|
+
z.object({ state: z.literal("authorized"), storageKind: z.enum(["macos-keychain", "windows-dpapi", "restricted-file", "memory"]), apiBaseUrl: z.url(), appBaseUrl: z.url(), workspaceId: z.string(), brainId: z.string(), principalId: z.string(), tokenLabel: z.string(), tokenExpiresAt: z.iso.datetime(), capabilities: z.array(userCapabilitySchema) }).strict(),
|
|
28
|
+
]);
|
|
29
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/userAuth/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,cAAc;IACd,eAAe;IACf,aAAa;IACb,cAAc;IACd,cAAc;IACd,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;CAChB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;CAC5C,CAAC,CAAC,MAAM,EAAE,CAAC;AAiCZ,MAAM,CAAC,MAAM,6BAA6B,GAAuC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;IAC7G,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5K,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACtN,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;CACrW,CAAC,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CONDUCTOR_VERSION = "0.
|
|
1
|
+
export declare const CONDUCTOR_VERSION = "0.2.0-beta.1";
|
|
2
2
|
export declare const PROTOCOL_VERSION = "v1";
|
package/dist/version.js
CHANGED
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC"}
|
package/dist/workTypes.d.ts
CHANGED
|
@@ -100,6 +100,147 @@ export declare const workUsageDecisionSchema: z.ZodObject<{
|
|
|
100
100
|
}, z.core.$strip>;
|
|
101
101
|
hardStop: z.ZodBoolean;
|
|
102
102
|
}, z.core.$strip>;
|
|
103
|
+
export declare const workProjectSchema: z.ZodObject<{
|
|
104
|
+
id: z.ZodString;
|
|
105
|
+
name: z.ZodString;
|
|
106
|
+
description: z.ZodOptional<z.ZodString>;
|
|
107
|
+
status: z.ZodEnum<{
|
|
108
|
+
cancelled: "cancelled";
|
|
109
|
+
planned: "planned";
|
|
110
|
+
active: "active";
|
|
111
|
+
completed: "completed";
|
|
112
|
+
}>;
|
|
113
|
+
leadPrincipalId: z.ZodOptional<z.ZodString>;
|
|
114
|
+
contextRefs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
115
|
+
members: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
116
|
+
principalId: z.ZodString;
|
|
117
|
+
role: z.ZodEnum<{
|
|
118
|
+
lead: "lead";
|
|
119
|
+
member: "member";
|
|
120
|
+
reviewer: "reviewer";
|
|
121
|
+
}>;
|
|
122
|
+
}, z.core.$loose>>>;
|
|
123
|
+
updatedAt: z.ZodString;
|
|
124
|
+
}, z.core.$loose>;
|
|
125
|
+
export declare const workActivitySchema: z.ZodObject<{
|
|
126
|
+
id: z.ZodString;
|
|
127
|
+
action: z.ZodString;
|
|
128
|
+
entityType: z.ZodString;
|
|
129
|
+
entityId: z.ZodString;
|
|
130
|
+
taskId: z.ZodOptional<z.ZodString>;
|
|
131
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
132
|
+
occurredAt: z.ZodString;
|
|
133
|
+
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
134
|
+
}, z.core.$loose>;
|
|
135
|
+
export declare const workTaskDetailSchema: z.ZodObject<{
|
|
136
|
+
task: z.ZodObject<{
|
|
137
|
+
id: z.ZodString;
|
|
138
|
+
workspaceId: z.ZodString;
|
|
139
|
+
brainId: z.ZodString;
|
|
140
|
+
projectId: z.ZodOptional<z.ZodString>;
|
|
141
|
+
parentTaskId: z.ZodOptional<z.ZodString>;
|
|
142
|
+
title: z.ZodString;
|
|
143
|
+
bodyMarkdown: z.ZodString;
|
|
144
|
+
versionNumber: z.ZodNumber;
|
|
145
|
+
status: z.ZodEnum<{
|
|
146
|
+
backlog: "backlog";
|
|
147
|
+
todo: "todo";
|
|
148
|
+
in_progress: "in_progress";
|
|
149
|
+
in_review: "in_review";
|
|
150
|
+
blocked: "blocked";
|
|
151
|
+
done: "done";
|
|
152
|
+
cancelled: "cancelled";
|
|
153
|
+
}>;
|
|
154
|
+
priority: z.ZodEnum<{
|
|
155
|
+
critical: "critical";
|
|
156
|
+
high: "high";
|
|
157
|
+
medium: "medium";
|
|
158
|
+
low: "low";
|
|
159
|
+
}>;
|
|
160
|
+
assigneePrincipalId: z.ZodOptional<z.ZodString>;
|
|
161
|
+
checkoutRunId: z.ZodOptional<z.ZodString>;
|
|
162
|
+
contextRefs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
163
|
+
createdAt: z.ZodString;
|
|
164
|
+
updatedAt: z.ZodString;
|
|
165
|
+
}, z.core.$loose>;
|
|
166
|
+
comments: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
167
|
+
id: z.ZodString;
|
|
168
|
+
taskId: z.ZodString;
|
|
169
|
+
authorPrincipalId: z.ZodString;
|
|
170
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
171
|
+
bodyMarkdown: z.ZodString;
|
|
172
|
+
createdAt: z.ZodString;
|
|
173
|
+
}, z.core.$loose>>>;
|
|
174
|
+
artifacts: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
175
|
+
id: z.ZodString;
|
|
176
|
+
taskId: z.ZodString;
|
|
177
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
178
|
+
type: z.ZodString;
|
|
179
|
+
provider: z.ZodString;
|
|
180
|
+
title: z.ZodString;
|
|
181
|
+
url: z.ZodOptional<z.ZodString>;
|
|
182
|
+
brainRecordId: z.ZodOptional<z.ZodString>;
|
|
183
|
+
status: z.ZodEnum<{
|
|
184
|
+
pending: "pending";
|
|
185
|
+
ready: "ready";
|
|
186
|
+
failed: "failed";
|
|
187
|
+
superseded: "superseded";
|
|
188
|
+
}>;
|
|
189
|
+
reviewState: z.ZodEnum<{
|
|
190
|
+
pending: "pending";
|
|
191
|
+
none: "none";
|
|
192
|
+
approved: "approved";
|
|
193
|
+
rejected: "rejected";
|
|
194
|
+
revision_requested: "revision_requested";
|
|
195
|
+
}>;
|
|
196
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
197
|
+
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
198
|
+
}, z.core.$loose>>>;
|
|
199
|
+
approvals: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
200
|
+
id: z.ZodString;
|
|
201
|
+
taskId: z.ZodString;
|
|
202
|
+
type: z.ZodString;
|
|
203
|
+
status: z.ZodEnum<{
|
|
204
|
+
pending: "pending";
|
|
205
|
+
approved: "approved";
|
|
206
|
+
rejected: "rejected";
|
|
207
|
+
revision_requested: "revision_requested";
|
|
208
|
+
}>;
|
|
209
|
+
payload: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
210
|
+
decisionNote: z.ZodOptional<z.ZodString>;
|
|
211
|
+
}, z.core.$loose>>>;
|
|
212
|
+
blockers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
213
|
+
id: z.ZodString;
|
|
214
|
+
workspaceId: z.ZodString;
|
|
215
|
+
brainId: z.ZodString;
|
|
216
|
+
projectId: z.ZodOptional<z.ZodString>;
|
|
217
|
+
parentTaskId: z.ZodOptional<z.ZodString>;
|
|
218
|
+
title: z.ZodString;
|
|
219
|
+
bodyMarkdown: z.ZodString;
|
|
220
|
+
versionNumber: z.ZodNumber;
|
|
221
|
+
status: z.ZodEnum<{
|
|
222
|
+
backlog: "backlog";
|
|
223
|
+
todo: "todo";
|
|
224
|
+
in_progress: "in_progress";
|
|
225
|
+
in_review: "in_review";
|
|
226
|
+
blocked: "blocked";
|
|
227
|
+
done: "done";
|
|
228
|
+
cancelled: "cancelled";
|
|
229
|
+
}>;
|
|
230
|
+
priority: z.ZodEnum<{
|
|
231
|
+
critical: "critical";
|
|
232
|
+
high: "high";
|
|
233
|
+
medium: "medium";
|
|
234
|
+
low: "low";
|
|
235
|
+
}>;
|
|
236
|
+
assigneePrincipalId: z.ZodOptional<z.ZodString>;
|
|
237
|
+
checkoutRunId: z.ZodOptional<z.ZodString>;
|
|
238
|
+
contextRefs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
239
|
+
createdAt: z.ZodString;
|
|
240
|
+
updatedAt: z.ZodString;
|
|
241
|
+
}, z.core.$loose>>>;
|
|
242
|
+
projectContextRefs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
243
|
+
}, z.core.$loose>;
|
|
103
244
|
export type WorkTask = z.infer<typeof workTaskSchema>;
|
|
104
245
|
export type WorkTaskStatus = z.infer<typeof workTaskStatusSchema>;
|
|
105
246
|
export type WorkTaskComment = z.infer<typeof workTaskCommentSchema>;
|
|
@@ -129,19 +270,7 @@ export type WorkArtifactInput = {
|
|
|
129
270
|
metadata?: Record<string, unknown> | undefined;
|
|
130
271
|
idempotencyKey?: string | undefined;
|
|
131
272
|
};
|
|
132
|
-
export type WorkProject =
|
|
133
|
-
id: string;
|
|
134
|
-
name: string;
|
|
135
|
-
description?: string | undefined;
|
|
136
|
-
status: "planned" | "active" | "completed" | "cancelled";
|
|
137
|
-
leadPrincipalId?: string | undefined;
|
|
138
|
-
contextRefs: string[];
|
|
139
|
-
members: Array<{
|
|
140
|
-
principalId: string;
|
|
141
|
-
role: "lead" | "member" | "reviewer";
|
|
142
|
-
}>;
|
|
143
|
-
updatedAt: string;
|
|
144
|
-
};
|
|
273
|
+
export type WorkProject = z.infer<typeof workProjectSchema>;
|
|
145
274
|
export type WorkRoutine = {
|
|
146
275
|
id: string;
|
|
147
276
|
projectId?: string | undefined;
|
|
@@ -162,21 +291,23 @@ export type WorkPolicy = {
|
|
|
162
291
|
hardStopEnabled: boolean;
|
|
163
292
|
isActive: boolean;
|
|
164
293
|
};
|
|
165
|
-
export type WorkActivity =
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
294
|
+
export type WorkActivity = z.infer<typeof workActivitySchema>;
|
|
295
|
+
export type WorkTaskDetail = z.infer<typeof workTaskDetailSchema>;
|
|
296
|
+
export type CreateWorkTaskRequest = {
|
|
297
|
+
projectId?: string | undefined;
|
|
298
|
+
parentTaskId?: string | undefined;
|
|
299
|
+
title: string;
|
|
300
|
+
bodyMarkdown?: string | undefined;
|
|
301
|
+
status?: WorkTaskStatus | undefined;
|
|
302
|
+
priority?: WorkTask["priority"] | undefined;
|
|
303
|
+
assigneePrincipalId?: string | undefined;
|
|
304
|
+
contextRefs?: string[] | undefined;
|
|
174
305
|
};
|
|
175
|
-
export type
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
306
|
+
export type UpdateWorkTaskRequest = {
|
|
307
|
+
taskId: string;
|
|
308
|
+
title?: string | undefined;
|
|
309
|
+
bodyMarkdown?: string | undefined;
|
|
310
|
+
status?: WorkTaskStatus | undefined;
|
|
311
|
+
priority?: WorkTask["priority"] | undefined;
|
|
312
|
+
assigneePrincipalId?: string | undefined;
|
|
182
313
|
};
|
package/dist/workTypes.js
CHANGED
|
@@ -72,4 +72,35 @@ export const workUsageDecisionSchema = z.object({
|
|
|
72
72
|
}),
|
|
73
73
|
hardStop: z.boolean(),
|
|
74
74
|
});
|
|
75
|
+
export const workProjectSchema = z.looseObject({
|
|
76
|
+
id: z.string(),
|
|
77
|
+
name: z.string(),
|
|
78
|
+
description: z.string().optional(),
|
|
79
|
+
status: z.enum(["planned", "active", "completed", "cancelled"]),
|
|
80
|
+
leadPrincipalId: z.string().optional(),
|
|
81
|
+
contextRefs: z.array(z.string()).default([]),
|
|
82
|
+
members: z.array(z.looseObject({
|
|
83
|
+
principalId: z.string(),
|
|
84
|
+
role: z.enum(["lead", "member", "reviewer"]),
|
|
85
|
+
})).default([]),
|
|
86
|
+
updatedAt: z.string(),
|
|
87
|
+
});
|
|
88
|
+
export const workActivitySchema = z.looseObject({
|
|
89
|
+
id: z.string(),
|
|
90
|
+
action: z.string(),
|
|
91
|
+
entityType: z.string(),
|
|
92
|
+
entityId: z.string(),
|
|
93
|
+
taskId: z.string().optional(),
|
|
94
|
+
runId: z.string().optional(),
|
|
95
|
+
occurredAt: z.string(),
|
|
96
|
+
metadata: jsonObjectSchema.default({}),
|
|
97
|
+
});
|
|
98
|
+
export const workTaskDetailSchema = z.object({
|
|
99
|
+
task: workTaskSchema,
|
|
100
|
+
comments: z.array(workTaskCommentSchema).default([]),
|
|
101
|
+
artifacts: z.array(workArtifactSchema).default([]),
|
|
102
|
+
approvals: z.array(workApprovalSchema).default([]),
|
|
103
|
+
blockers: z.array(workTaskSchema).default([]),
|
|
104
|
+
projectContextRefs: z.array(z.string()).default([]),
|
|
105
|
+
}).loose();
|
|
75
106
|
//# sourceMappingURL=workTypes.js.map
|
package/dist/workTypes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workTypes.js","sourceRoot":"","sources":["../src/workTypes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workTypes.js","sourceRoot":"","sources":["../src/workTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,SAAS;IACT,MAAM;IACN,aAAa;IACb,WAAW;IACX,SAAS;IACT,MAAM;IACN,WAAW;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,MAAM,EAAE,oBAAoB;IAC5B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC;IACjD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5D,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACtF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACzE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC;QACxB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC;IACF,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC;QACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC1C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;KACtB,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC;QAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;KAC7C,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAClD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACpD,CAAC,CAAC,KAAK,EAAE,CAAC"}
|