@oxygen-agent/cli 1.45.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/dist/browser-login.d.ts +8 -0
- package/dist/browser-login.d.ts.map +1 -0
- package/dist/browser-login.js +181 -0
- package/dist/browser-login.js.map +1 -0
- package/dist/credentials.d.ts +28 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +470 -0
- package/dist/credentials.js.map +1 -0
- package/dist/http-client.d.ts +12 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +218 -0
- package/dist/http-client.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3523 -0
- package/dist/index.js.map +1 -0
- package/dist/local-custom-http-column.d.ts +9 -0
- package/dist/local-custom-http-column.d.ts.map +1 -0
- package/dist/local-custom-http-column.js +571 -0
- package/dist/local-custom-http-column.js.map +1 -0
- package/dist/session.d.ts +57 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +194 -0
- package/dist/session.js.map +1 -0
- package/node_modules/@oxygen/recipe-sdk/dist/index.d.ts +136 -0
- package/node_modules/@oxygen/recipe-sdk/dist/index.d.ts.map +1 -0
- package/node_modules/@oxygen/recipe-sdk/dist/index.js +43 -0
- package/node_modules/@oxygen/recipe-sdk/dist/index.js.map +1 -0
- package/node_modules/@oxygen/recipe-sdk/package.json +15 -0
- package/node_modules/@oxygen/shared/dist/billing.d.ts +124 -0
- package/node_modules/@oxygen/shared/dist/billing.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/billing.js +296 -0
- package/node_modules/@oxygen/shared/dist/billing.js.map +1 -0
- package/node_modules/@oxygen/shared/dist/column-types.d.ts +55 -0
- package/node_modules/@oxygen/shared/dist/column-types.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/column-types.js +161 -0
- package/node_modules/@oxygen/shared/dist/column-types.js.map +1 -0
- package/node_modules/@oxygen/shared/dist/credit-guidance.d.ts +15 -0
- package/node_modules/@oxygen/shared/dist/credit-guidance.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/credit-guidance.js +60 -0
- package/node_modules/@oxygen/shared/dist/credit-guidance.js.map +1 -0
- package/node_modules/@oxygen/shared/dist/file-import.d.ts +22 -0
- package/node_modules/@oxygen/shared/dist/file-import.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/file-import.js +232 -0
- package/node_modules/@oxygen/shared/dist/file-import.js.map +1 -0
- package/node_modules/@oxygen/shared/dist/index.d.ts +45 -0
- package/node_modules/@oxygen/shared/dist/index.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/index.js +49 -0
- package/node_modules/@oxygen/shared/dist/index.js.map +1 -0
- package/node_modules/@oxygen/shared/dist/log.d.ts +22 -0
- package/node_modules/@oxygen/shared/dist/log.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/log.js +58 -0
- package/node_modules/@oxygen/shared/dist/log.js.map +1 -0
- package/node_modules/@oxygen/shared/dist/redaction.d.ts +4 -0
- package/node_modules/@oxygen/shared/dist/redaction.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/redaction.js +106 -0
- package/node_modules/@oxygen/shared/dist/redaction.js.map +1 -0
- package/node_modules/@oxygen/shared/dist/telemetry.d.ts +9 -0
- package/node_modules/@oxygen/shared/dist/telemetry.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/telemetry.js +98 -0
- package/node_modules/@oxygen/shared/dist/telemetry.js.map +1 -0
- package/node_modules/@oxygen/shared/dist/version.d.ts +2 -0
- package/node_modules/@oxygen/shared/dist/version.d.ts.map +1 -0
- package/node_modules/@oxygen/shared/dist/version.js +2 -0
- package/node_modules/@oxygen/shared/dist/version.js.map +1 -0
- package/node_modules/@oxygen/shared/package.json +21 -0
- package/node_modules/@oxygen/workflows/dist/index.d.ts +680 -0
- package/node_modules/@oxygen/workflows/dist/index.d.ts.map +1 -0
- package/node_modules/@oxygen/workflows/dist/index.js +983 -0
- package/node_modules/@oxygen/workflows/dist/index.js.map +1 -0
- package/node_modules/@oxygen/workflows/package.json +15 -0
- package/package.json +44 -0
package/dist/session.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { OxygenError } from "@oxygen/shared";
|
|
6
|
+
export function startSession(input) {
|
|
7
|
+
const now = new Date().toISOString();
|
|
8
|
+
const session = {
|
|
9
|
+
id: randomUUID(),
|
|
10
|
+
userPrompt: input.userPrompt?.trim() || null,
|
|
11
|
+
steps: input.steps.map((label) => ({
|
|
12
|
+
label,
|
|
13
|
+
status: "pending",
|
|
14
|
+
startedAt: null,
|
|
15
|
+
completedAt: null,
|
|
16
|
+
})),
|
|
17
|
+
statuses: [],
|
|
18
|
+
outputs: [],
|
|
19
|
+
createdAt: now,
|
|
20
|
+
updatedAt: now,
|
|
21
|
+
};
|
|
22
|
+
writeSession(session);
|
|
23
|
+
writeCurrentSessionId(session.id);
|
|
24
|
+
return session;
|
|
25
|
+
}
|
|
26
|
+
export function updateSessionStep(input) {
|
|
27
|
+
const session = readSession(input.sessionId);
|
|
28
|
+
const step = session.steps[input.index];
|
|
29
|
+
if (!step) {
|
|
30
|
+
throw new OxygenError("session_step_not_found", `Session step ${input.index} was not found.`, {
|
|
31
|
+
details: { session_id: session.id, step_index: input.index },
|
|
32
|
+
exitCode: 1,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const now = new Date().toISOString();
|
|
36
|
+
step.status = input.status;
|
|
37
|
+
if (input.status === "running" && !step.startedAt)
|
|
38
|
+
step.startedAt = now;
|
|
39
|
+
if (input.status === "completed" || input.status === "error" || input.status === "skipped") {
|
|
40
|
+
step.completedAt = now;
|
|
41
|
+
}
|
|
42
|
+
session.updatedAt = now;
|
|
43
|
+
writeSession(session);
|
|
44
|
+
writeCurrentSessionId(session.id);
|
|
45
|
+
return session;
|
|
46
|
+
}
|
|
47
|
+
export function addSessionStatus(input) {
|
|
48
|
+
const session = readSession(input.sessionId);
|
|
49
|
+
const stepIndex = input.stepIndex ?? currentRunningStepIndex(session);
|
|
50
|
+
if (stepIndex !== null && !session.steps[stepIndex]) {
|
|
51
|
+
throw new OxygenError("session_step_not_found", `Session step ${stepIndex} was not found.`, {
|
|
52
|
+
details: { session_id: session.id, step_index: stepIndex },
|
|
53
|
+
exitCode: 1,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const now = new Date().toISOString();
|
|
57
|
+
session.statuses.push({
|
|
58
|
+
id: randomUUID(),
|
|
59
|
+
message: input.message,
|
|
60
|
+
stepIndex,
|
|
61
|
+
createdAt: now,
|
|
62
|
+
});
|
|
63
|
+
session.updatedAt = now;
|
|
64
|
+
writeSession(session);
|
|
65
|
+
writeCurrentSessionId(session.id);
|
|
66
|
+
return session;
|
|
67
|
+
}
|
|
68
|
+
export function addSessionOutput(input) {
|
|
69
|
+
const selected = [
|
|
70
|
+
input.csv ? "csv" : null,
|
|
71
|
+
input.file ? "file" : null,
|
|
72
|
+
input.table ? "table" : null,
|
|
73
|
+
].filter(Boolean);
|
|
74
|
+
if (selected.length !== 1) {
|
|
75
|
+
throw new OxygenError("invalid_session_output", "Pass exactly one of --csv, --file, or --table.", {
|
|
76
|
+
exitCode: 1,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const session = readSession(input.sessionId);
|
|
80
|
+
const now = new Date().toISOString();
|
|
81
|
+
session.outputs.push({
|
|
82
|
+
id: randomUUID(),
|
|
83
|
+
type: input.csv ? "csv" : input.file ? "file" : "table",
|
|
84
|
+
path: input.csv ?? input.file ?? null,
|
|
85
|
+
table: input.table ?? null,
|
|
86
|
+
label: input.label?.trim() || null,
|
|
87
|
+
meta: input.meta ?? null,
|
|
88
|
+
createdAt: now,
|
|
89
|
+
});
|
|
90
|
+
session.updatedAt = now;
|
|
91
|
+
writeSession(session);
|
|
92
|
+
writeCurrentSessionId(session.id);
|
|
93
|
+
return session;
|
|
94
|
+
}
|
|
95
|
+
export function getSessionUsage(input) {
|
|
96
|
+
const session = readSession(input.sessionId);
|
|
97
|
+
return {
|
|
98
|
+
sessionId: session.id,
|
|
99
|
+
startedAt: session.createdAt,
|
|
100
|
+
updatedAt: session.updatedAt,
|
|
101
|
+
steps: {
|
|
102
|
+
total: session.steps.length,
|
|
103
|
+
completed: session.steps.filter((step) => step.status === "completed").length,
|
|
104
|
+
running: session.steps.filter((step) => step.status === "running").length,
|
|
105
|
+
error: session.steps.filter((step) => step.status === "error").length,
|
|
106
|
+
skipped: session.steps.filter((step) => step.status === "skipped").length,
|
|
107
|
+
},
|
|
108
|
+
outputs: session.outputs.length,
|
|
109
|
+
credits: {
|
|
110
|
+
used: null,
|
|
111
|
+
note: "Session-local credit usage is not tracked yet. Use `oxygen billing usage --json` for org credit ledger events.",
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function readSession(sessionId) {
|
|
116
|
+
const id = sessionId?.trim() || readCurrentSessionId();
|
|
117
|
+
if (!id) {
|
|
118
|
+
throw new OxygenError("session_not_found", "No current Oxygen session exists. Run `oxygen session start --steps '[\"...\"]'`.", {
|
|
119
|
+
exitCode: 1,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const path = sessionPath(id);
|
|
123
|
+
if (!existsSync(path)) {
|
|
124
|
+
throw new OxygenError("session_not_found", `Oxygen session '${id}' was not found.`, {
|
|
125
|
+
details: { session_id: id },
|
|
126
|
+
exitCode: 1,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
130
|
+
if (!isSession(parsed)) {
|
|
131
|
+
throw new OxygenError("invalid_session_state", "Stored Oxygen session state is invalid.", {
|
|
132
|
+
details: { session_id: id },
|
|
133
|
+
exitCode: 1,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return parsed;
|
|
137
|
+
}
|
|
138
|
+
function writeSession(session) {
|
|
139
|
+
const path = sessionPath(session.id);
|
|
140
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
141
|
+
atomicWriteJson(path, session);
|
|
142
|
+
}
|
|
143
|
+
function writeCurrentSessionId(id) {
|
|
144
|
+
const path = currentSessionPath();
|
|
145
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
146
|
+
const tempPath = `${path}.${process.pid}.tmp`;
|
|
147
|
+
writeFileSync(tempPath, `${id}\n`, { mode: 0o600 });
|
|
148
|
+
chmodSync(tempPath, 0o600);
|
|
149
|
+
renameSync(tempPath, path);
|
|
150
|
+
chmodSync(path, 0o600);
|
|
151
|
+
}
|
|
152
|
+
function readCurrentSessionId() {
|
|
153
|
+
const path = currentSessionPath();
|
|
154
|
+
if (!existsSync(path))
|
|
155
|
+
return null;
|
|
156
|
+
const value = readFileSync(path, "utf8").trim();
|
|
157
|
+
return value || null;
|
|
158
|
+
}
|
|
159
|
+
function atomicWriteJson(path, value) {
|
|
160
|
+
const tempPath = `${path}.${process.pid}.tmp`;
|
|
161
|
+
writeFileSync(tempPath, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 });
|
|
162
|
+
chmodSync(tempPath, 0o600);
|
|
163
|
+
renameSync(tempPath, path);
|
|
164
|
+
chmodSync(path, 0o600);
|
|
165
|
+
}
|
|
166
|
+
function currentRunningStepIndex(session) {
|
|
167
|
+
const index = session.steps.findIndex((step) => step.status === "running");
|
|
168
|
+
return index >= 0 ? index : null;
|
|
169
|
+
}
|
|
170
|
+
function sessionPath(id) {
|
|
171
|
+
return join(sessionRoot(), `${id}.json`);
|
|
172
|
+
}
|
|
173
|
+
function currentSessionPath() {
|
|
174
|
+
return join(sessionRoot(), "current");
|
|
175
|
+
}
|
|
176
|
+
function sessionRoot() {
|
|
177
|
+
return join(configRoot(), "sessions");
|
|
178
|
+
}
|
|
179
|
+
function configRoot() {
|
|
180
|
+
return process.env.OXYGEN_CONFIG_DIR?.trim()
|
|
181
|
+
|| (process.platform === "win32"
|
|
182
|
+
? join(process.env.APPDATA || join(homedir(), "AppData", "Roaming"), "oxygen")
|
|
183
|
+
: join(homedir(), ".config", "oxygen"));
|
|
184
|
+
}
|
|
185
|
+
function isSession(value) {
|
|
186
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
187
|
+
return false;
|
|
188
|
+
const record = value;
|
|
189
|
+
return typeof record.id === "string"
|
|
190
|
+
&& Array.isArray(record.steps)
|
|
191
|
+
&& Array.isArray(record.statuses)
|
|
192
|
+
&& Array.isArray(record.outputs);
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { JsonSchema, WorkflowStepEffect, WorkflowMode, WorkflowStatus, WorkflowTriggerManifest } from "@oxygen/workflows";
|
|
2
|
+
export type { JsonSchema, WorkflowTriggerManifest, WorkflowMode, WorkflowStatus, WorkflowStepEffect };
|
|
3
|
+
export type RecipeLogLevel = "debug" | "info" | "warn" | "error";
|
|
4
|
+
export type RecipeRuntime = "durable";
|
|
5
|
+
export type RecipeToolRunOptions = {
|
|
6
|
+
key?: string;
|
|
7
|
+
};
|
|
8
|
+
export type RecipeToolApi = {
|
|
9
|
+
run: <T = unknown>(toolId: string, payload?: Record<string, unknown>, options?: RecipeToolRunOptions) => Promise<T>;
|
|
10
|
+
};
|
|
11
|
+
export type RecipeTableCreateInput = {
|
|
12
|
+
name: string;
|
|
13
|
+
columns: Array<{
|
|
14
|
+
key?: string;
|
|
15
|
+
label: string;
|
|
16
|
+
dataType?: string;
|
|
17
|
+
kind?: string;
|
|
18
|
+
semanticType?: string | null;
|
|
19
|
+
definition?: Record<string, unknown>;
|
|
20
|
+
}>;
|
|
21
|
+
project?: string | null;
|
|
22
|
+
metadata?: Record<string, unknown>;
|
|
23
|
+
};
|
|
24
|
+
export type RecipeColumnInput = {
|
|
25
|
+
key?: string;
|
|
26
|
+
label: string;
|
|
27
|
+
dataType?: string;
|
|
28
|
+
kind?: string;
|
|
29
|
+
semanticType?: string | null;
|
|
30
|
+
definition?: Record<string, unknown>;
|
|
31
|
+
};
|
|
32
|
+
export type RecipeRowSelection = {
|
|
33
|
+
mode: "all";
|
|
34
|
+
} | {
|
|
35
|
+
mode: "limit";
|
|
36
|
+
limit: number;
|
|
37
|
+
} | {
|
|
38
|
+
mode: "row_ids";
|
|
39
|
+
row_ids?: string[];
|
|
40
|
+
rowIds?: string[];
|
|
41
|
+
};
|
|
42
|
+
export type RecipeTablesApi = {
|
|
43
|
+
create: <T = unknown>(input: RecipeTableCreateInput, options?: RecipeToolRunOptions) => Promise<T>;
|
|
44
|
+
describe: <T = unknown>(table: string, options?: {
|
|
45
|
+
includeStats?: boolean;
|
|
46
|
+
includeProfile?: boolean;
|
|
47
|
+
includeDataQuality?: boolean;
|
|
48
|
+
key?: string;
|
|
49
|
+
}) => Promise<T>;
|
|
50
|
+
};
|
|
51
|
+
export type RecipeRowsApi = {
|
|
52
|
+
select: <T = unknown>(table: string, options?: {
|
|
53
|
+
filters?: unknown[];
|
|
54
|
+
fields?: string[];
|
|
55
|
+
limit?: number;
|
|
56
|
+
key?: string;
|
|
57
|
+
}) => Promise<T>;
|
|
58
|
+
upsert: <T = unknown>(table: string, rows: Record<string, unknown>[], options: {
|
|
59
|
+
key: string;
|
|
60
|
+
upsertKey: string;
|
|
61
|
+
return?: "summary" | "ids" | "rows";
|
|
62
|
+
}) => Promise<T>;
|
|
63
|
+
};
|
|
64
|
+
export type RecipeColumnsApi = {
|
|
65
|
+
add: <T = unknown>(table: string, column: RecipeColumnInput, options?: RecipeToolRunOptions) => Promise<T>;
|
|
66
|
+
run: <T = unknown>(table: string, column: string, options?: {
|
|
67
|
+
selection?: RecipeRowSelection;
|
|
68
|
+
force?: boolean;
|
|
69
|
+
maxConcurrency?: number;
|
|
70
|
+
maxCredits?: number;
|
|
71
|
+
max_credits?: number;
|
|
72
|
+
key?: string;
|
|
73
|
+
}) => Promise<T>;
|
|
74
|
+
};
|
|
75
|
+
export type RecipeContextProfileApi = {
|
|
76
|
+
get: <T = unknown>(options?: RecipeToolRunOptions) => Promise<T>;
|
|
77
|
+
};
|
|
78
|
+
export type RecipeContextApi = {
|
|
79
|
+
profile: RecipeContextProfileApi;
|
|
80
|
+
};
|
|
81
|
+
export type RecipeApprovalApi = {
|
|
82
|
+
require: <T = {
|
|
83
|
+
approved: boolean;
|
|
84
|
+
reason: string;
|
|
85
|
+
}>(input: Record<string, unknown>) => Promise<T>;
|
|
86
|
+
};
|
|
87
|
+
export type RecipeStepOptions<T> = {
|
|
88
|
+
effect?: WorkflowStepEffect;
|
|
89
|
+
run: () => T | Promise<T>;
|
|
90
|
+
};
|
|
91
|
+
export type RecipeContext = {
|
|
92
|
+
input: unknown;
|
|
93
|
+
mode: WorkflowMode;
|
|
94
|
+
organizationId: string;
|
|
95
|
+
tools: RecipeToolApi;
|
|
96
|
+
tables: RecipeTablesApi;
|
|
97
|
+
rows: RecipeRowsApi;
|
|
98
|
+
columns: RecipeColumnsApi;
|
|
99
|
+
context: RecipeContextApi;
|
|
100
|
+
approvals: RecipeApprovalApi;
|
|
101
|
+
log: (level: RecipeLogLevel, message: string, payload?: Record<string, unknown>) => void;
|
|
102
|
+
step: <T = unknown>(key: string, options: RecipeStepOptions<T>) => Promise<T>;
|
|
103
|
+
now: () => Promise<string>;
|
|
104
|
+
uuid: () => Promise<string>;
|
|
105
|
+
};
|
|
106
|
+
export type DurableRecipeContext = RecipeContext;
|
|
107
|
+
export type RecipeRunFunction = (ctx: RecipeContext) => unknown | Promise<unknown>;
|
|
108
|
+
export type DurableRecipeRunFunction = RecipeRunFunction;
|
|
109
|
+
export type RecipeDefinition = {
|
|
110
|
+
readonly __oxygen_recipe: true;
|
|
111
|
+
id: string;
|
|
112
|
+
name: string;
|
|
113
|
+
runtime: RecipeRuntime;
|
|
114
|
+
status?: WorkflowStatus;
|
|
115
|
+
trigger?: WorkflowTriggerManifest;
|
|
116
|
+
inputSchema?: JsonSchema;
|
|
117
|
+
tools: string[];
|
|
118
|
+
run: RecipeRunFunction;
|
|
119
|
+
};
|
|
120
|
+
export type DefineRecipeInput = {
|
|
121
|
+
id: string;
|
|
122
|
+
name: string;
|
|
123
|
+
runtime?: "durable";
|
|
124
|
+
tools: string[];
|
|
125
|
+
status?: WorkflowStatus;
|
|
126
|
+
trigger?: WorkflowTriggerManifest;
|
|
127
|
+
inputSchema?: JsonSchema;
|
|
128
|
+
run: RecipeRunFunction;
|
|
129
|
+
};
|
|
130
|
+
export type DurableRecipeDefinition = RecipeDefinition;
|
|
131
|
+
export type DefineDurableRecipeInput = DefineRecipeInput & {
|
|
132
|
+
runtime: "durable";
|
|
133
|
+
};
|
|
134
|
+
export declare function defineRecipe(input: DefineRecipeInput): RecipeDefinition;
|
|
135
|
+
export declare function isRecipeDefinition(value: unknown): value is RecipeDefinition;
|
|
136
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export function defineRecipe(input) {
|
|
2
|
+
if (!input || typeof input !== "object") {
|
|
3
|
+
throw new Error("defineRecipe requires an input object.");
|
|
4
|
+
}
|
|
5
|
+
if (typeof input.id !== "string" || !input.id.trim()) {
|
|
6
|
+
throw new Error("Recipe id is required.");
|
|
7
|
+
}
|
|
8
|
+
if (typeof input.name !== "string" || !input.name.trim()) {
|
|
9
|
+
throw new Error("Recipe name is required.");
|
|
10
|
+
}
|
|
11
|
+
if (typeof input.run !== "function") {
|
|
12
|
+
throw new Error("Recipe run must be a function.");
|
|
13
|
+
}
|
|
14
|
+
if (input.runtime !== undefined && input.runtime !== "durable") {
|
|
15
|
+
throw new Error("Recipe runtime must be durable.");
|
|
16
|
+
}
|
|
17
|
+
if (!Array.isArray(input.tools) || input.tools.length === 0) {
|
|
18
|
+
throw new Error("Durable recipes must declare at least one allowed tool.");
|
|
19
|
+
}
|
|
20
|
+
const tools = Array.from(new Set(input.tools.map((tool) => {
|
|
21
|
+
if (typeof tool !== "string" || !tool.trim()) {
|
|
22
|
+
throw new Error("Durable recipe tools must be non-empty strings.");
|
|
23
|
+
}
|
|
24
|
+
return tool.trim();
|
|
25
|
+
}))).sort();
|
|
26
|
+
return {
|
|
27
|
+
__oxygen_recipe: true,
|
|
28
|
+
id: input.id,
|
|
29
|
+
name: input.name,
|
|
30
|
+
runtime: "durable",
|
|
31
|
+
tools,
|
|
32
|
+
...(input.status ? { status: input.status } : {}),
|
|
33
|
+
...(input.trigger ? { trigger: input.trigger } : {}),
|
|
34
|
+
...(input.inputSchema ? { inputSchema: input.inputSchema } : {}),
|
|
35
|
+
run: input.run,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function isRecipeDefinition(value) {
|
|
39
|
+
return Boolean(value)
|
|
40
|
+
&& typeof value === "object"
|
|
41
|
+
&& value.__oxygen_recipe === true;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoJA,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,OAAO;QACL,eAAe,EAAE,IAAI;QACrB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,SAAS;QAClB,KAAK;QACL,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,CAAC,KAAK,CAAC;WAChB,OAAO,KAAK,KAAK,QAAQ;WACxB,KAAuC,CAAC,eAAe,KAAK,IAAI,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@oxygen/recipe-sdk",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {}
|
|
15
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
export declare const WEEKLY_USAGE_WINDOW_DAYS = 7;
|
|
2
|
+
export declare const BILLING_CURRENCIES: readonly ["usd"];
|
|
3
|
+
export type BillingCurrency = (typeof BILLING_CURRENCIES)[number];
|
|
4
|
+
export declare const DEFAULT_BILLING_CURRENCY: BillingCurrency;
|
|
5
|
+
export type SelfServePlanTier = "starter" | "pro" | "team";
|
|
6
|
+
export type ContactSalesPlanTier = "scale" | "enterprise";
|
|
7
|
+
export type PlanTier = "free" | SelfServePlanTier | ContactSalesPlanTier;
|
|
8
|
+
export type UsageLimitedPlanTier = Exclude<PlanTier, "enterprise">;
|
|
9
|
+
export type PricingPlanDefinition = {
|
|
10
|
+
tier: PlanTier;
|
|
11
|
+
name: string;
|
|
12
|
+
monthlyPriceCents: number | null;
|
|
13
|
+
monthlyCredits: number | null;
|
|
14
|
+
weeklyCreditsLimit: number | null;
|
|
15
|
+
rolloverCap: number | null;
|
|
16
|
+
byokEnabled: boolean;
|
|
17
|
+
description: string;
|
|
18
|
+
badge?: string;
|
|
19
|
+
highlighted?: boolean;
|
|
20
|
+
ctaLabel: string;
|
|
21
|
+
contactHref?: string;
|
|
22
|
+
features: readonly string[];
|
|
23
|
+
};
|
|
24
|
+
export type PricingPlanMetadata = Record<string, unknown> | null | undefined;
|
|
25
|
+
export declare const CONTACT_SALES_URL = "https://cal.com/tim-scheuer-mxbib9/45";
|
|
26
|
+
export declare const BASE_PRICING_PLANS: {
|
|
27
|
+
readonly free: {
|
|
28
|
+
readonly tier: "free";
|
|
29
|
+
readonly name: "Free";
|
|
30
|
+
readonly monthlyPriceCents: 0;
|
|
31
|
+
readonly monthlyCredits: 500;
|
|
32
|
+
readonly weeklyCreditsLimit: 500;
|
|
33
|
+
readonly rolloverCap: 500;
|
|
34
|
+
readonly byokEnabled: false;
|
|
35
|
+
readonly description: "Try OXYGEN with managed email, phone enrichment, and AI credits.";
|
|
36
|
+
readonly ctaLabel: "Start free";
|
|
37
|
+
readonly features: readonly ["All integrations", "Workflows", "No card required"];
|
|
38
|
+
};
|
|
39
|
+
readonly starter: {
|
|
40
|
+
readonly tier: "starter";
|
|
41
|
+
readonly name: "Starter";
|
|
42
|
+
readonly monthlyPriceCents: 9900;
|
|
43
|
+
readonly monthlyCredits: 5000;
|
|
44
|
+
readonly weeklyCreditsLimit: 2000;
|
|
45
|
+
readonly rolloverCap: 5000;
|
|
46
|
+
readonly byokEnabled: true;
|
|
47
|
+
readonly description: "For founders running focused managed enrichment and AI columns.";
|
|
48
|
+
readonly ctaLabel: "Choose Starter";
|
|
49
|
+
readonly features: readonly ["All integrations", "Bring your own keys", "Workflows", "Standard support"];
|
|
50
|
+
};
|
|
51
|
+
readonly pro: {
|
|
52
|
+
readonly tier: "pro";
|
|
53
|
+
readonly name: "Pro";
|
|
54
|
+
readonly monthlyPriceCents: 24900;
|
|
55
|
+
readonly monthlyCredits: 12500;
|
|
56
|
+
readonly weeklyCreditsLimit: 5000;
|
|
57
|
+
readonly rolloverCap: 12500;
|
|
58
|
+
readonly byokEnabled: true;
|
|
59
|
+
readonly description: "For recurring GTM enrichment and AI-column workflows on managed credits.";
|
|
60
|
+
readonly badge: "Most popular";
|
|
61
|
+
readonly highlighted: true;
|
|
62
|
+
readonly ctaLabel: "Choose Pro";
|
|
63
|
+
readonly features: readonly ["All integrations", "Bring your own keys", "Workflows", "Standard support"];
|
|
64
|
+
};
|
|
65
|
+
readonly team: {
|
|
66
|
+
readonly tier: "team";
|
|
67
|
+
readonly name: "Team";
|
|
68
|
+
readonly monthlyPriceCents: 74900;
|
|
69
|
+
readonly monthlyCredits: 37500;
|
|
70
|
+
readonly weeklyCreditsLimit: 15000;
|
|
71
|
+
readonly rolloverCap: 37500;
|
|
72
|
+
readonly byokEnabled: true;
|
|
73
|
+
readonly description: "For small GTM teams and agencies running shared workflows with their own AI keys.";
|
|
74
|
+
readonly ctaLabel: "Choose Team";
|
|
75
|
+
readonly features: readonly ["All integrations", "Bring your own keys", "Workflows", "Premium support"];
|
|
76
|
+
};
|
|
77
|
+
readonly scale: {
|
|
78
|
+
readonly tier: "scale";
|
|
79
|
+
readonly name: "Scale";
|
|
80
|
+
readonly monthlyPriceCents: null;
|
|
81
|
+
readonly monthlyCredits: 500000;
|
|
82
|
+
readonly weeklyCreditsLimit: 500000;
|
|
83
|
+
readonly rolloverCap: 500000;
|
|
84
|
+
readonly byokEnabled: true;
|
|
85
|
+
readonly description: "For high-volume GTM teams that need custom limits and rollout support.";
|
|
86
|
+
readonly ctaLabel: "Contact sales";
|
|
87
|
+
readonly contactHref: "https://cal.com/tim-scheuer-mxbib9/45";
|
|
88
|
+
readonly features: readonly ["500,000+ managed credits / month", "Phone number enrichment on managed credits", "Custom provider routing and BYOK policies", "Dedicated onboarding"];
|
|
89
|
+
};
|
|
90
|
+
readonly enterprise: {
|
|
91
|
+
readonly tier: "enterprise";
|
|
92
|
+
readonly name: "Enterprise";
|
|
93
|
+
readonly monthlyPriceCents: null;
|
|
94
|
+
readonly monthlyCredits: null;
|
|
95
|
+
readonly weeklyCreditsLimit: null;
|
|
96
|
+
readonly rolloverCap: null;
|
|
97
|
+
readonly byokEnabled: true;
|
|
98
|
+
readonly description: "Custom procurement, invoicing, limits, and rollout support.";
|
|
99
|
+
readonly ctaLabel: "Talk to us";
|
|
100
|
+
readonly contactHref: "https://cal.com/tim-scheuer-mxbib9/45";
|
|
101
|
+
readonly features: readonly ["Custom monthly usage pool", "Phone number enrichment", "Custom AI-key and provider routing policies", "SSO, invoicing, and procurement support"];
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
export declare const PUBLIC_PLAN_ORDER: readonly PlanTier[];
|
|
105
|
+
export declare const SELF_SERVE_PLAN_TIERS: readonly SelfServePlanTier[];
|
|
106
|
+
export declare const CONTACT_SALES_PLAN_TIERS: readonly ContactSalesPlanTier[];
|
|
107
|
+
export declare const ACTIVE_SUBSCRIPTION_STATUSES: readonly ["active", "trialing", "past_due"];
|
|
108
|
+
export type ActiveSubscriptionStatus = (typeof ACTIVE_SUBSCRIPTION_STATUSES)[number];
|
|
109
|
+
export type ResolvedPricingPlan = PricingPlanDefinition;
|
|
110
|
+
export declare function resolveBasePricingPlan(tier: string | null | undefined): ResolvedPricingPlan | null;
|
|
111
|
+
export declare function applyPricingPlanMetadataOverrides(plan: PricingPlanDefinition, metadata: PricingPlanMetadata): PricingPlanDefinition;
|
|
112
|
+
export declare function isSelfServePlanTier(value: string): value is SelfServePlanTier;
|
|
113
|
+
export declare function isBillingCurrency(value: string): value is BillingCurrency;
|
|
114
|
+
export declare function normalizeBillingCurrency(value: string | null | undefined): BillingCurrency;
|
|
115
|
+
export declare function getCurrentFreeTierCycleKey(date?: Date): string;
|
|
116
|
+
export declare function evaluateWeeklyQuota(usedCredits: number, requestedCredits: number, weeklyCreditsLimit: number): {
|
|
117
|
+
usedCredits: number;
|
|
118
|
+
requestedCredits: number;
|
|
119
|
+
weeklyCreditsLimit: number;
|
|
120
|
+
remainingCredits: number;
|
|
121
|
+
projectedRemainingCredits: number;
|
|
122
|
+
exceedsLimit: boolean;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=billing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,kBAAkB,kBAAmB,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,eAAO,MAAM,wBAAwB,EAAE,eAAuB,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAC3D,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,YAAY,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;AACzE,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAEnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAE7E,eAAO,MAAM,iBAAiB,0CAA0C,CAAC;AAEzE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0G6B,CAAC;AAE7D,eAAO,MAAM,iBAAiB,EAAE,SAAS,QAAQ,EAIvC,CAAC;AAEX,eAAO,MAAM,qBAAqB,EAAE,SAAS,iBAAiB,EAIpD,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,SAAS,oBAAoB,EAG1D,CAAC;AAEX,eAAO,MAAM,4BAA4B,6CAI/B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AA0ErF,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAExD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,mBAAmB,GAAG,IAAI,CAQ5B;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,EAAE,mBAAmB,GAC5B,qBAAqB,CAmDvB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,iBAAiB,CAE7E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,eAAe,CAEzE;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,eAAe,CAEjB;AAyCD,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAI1E;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM;;;;;;;EAc3B"}
|