@boboddy/sdk 0.1.1-alpha → 0.1.3-alpha
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.
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ZodObject, ZodRawShape } from "zod";
|
|
2
|
+
type FeatureSignalSpec = {
|
|
3
|
+
key: string;
|
|
4
|
+
sourcePath: string;
|
|
5
|
+
type: "string" | "number" | "boolean" | "object" | "array";
|
|
6
|
+
required?: boolean;
|
|
7
|
+
availableWhenResultStatusIn?: string[] | null;
|
|
8
|
+
};
|
|
9
|
+
export type StepFeature<TResultExtension extends Record<string, unknown> = Record<string, unknown>, TSignalKeys extends string = string> = {
|
|
10
|
+
readonly _resultExtension: ZodObject<ZodRawShape>;
|
|
11
|
+
readonly _promptAddition: string;
|
|
12
|
+
readonly _signals: FeatureSignalSpec[];
|
|
13
|
+
readonly __resultExtension?: TResultExtension;
|
|
14
|
+
readonly __signalKeys?: TSignalKeys;
|
|
15
|
+
};
|
|
16
|
+
export type AnyStepFeature = StepFeature<Record<string, unknown>, string>;
|
|
17
|
+
type UnionToIntersection<U> = (U extends unknown ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
|
|
18
|
+
export type FeatureResultExtensions<TFeatures extends readonly AnyStepFeature[]> = [
|
|
19
|
+
TFeatures[number]
|
|
20
|
+
] extends [never] ? Record<never, never> : UnionToIntersection<TFeatures[number] extends StepFeature<infer R, string> ? R : never>;
|
|
21
|
+
export type FeatureSignalKeys<TFeatures extends readonly AnyStepFeature[]> = TFeatures[number] extends StepFeature<Record<string, unknown>, infer K> ? K : never;
|
|
22
|
+
export type FeedbackRequestItem = {
|
|
23
|
+
question: string;
|
|
24
|
+
category: string;
|
|
25
|
+
suggestedKey?: string;
|
|
26
|
+
};
|
|
27
|
+
declare const FEEDBACK_REQUEST_SIGNAL_KEY: "$boboddy_feedback_request_v1";
|
|
28
|
+
type FeedbackRequestsFeature = StepFeature<{
|
|
29
|
+
feedbackRequests?: FeedbackRequestItem[];
|
|
30
|
+
}, typeof FEEDBACK_REQUEST_SIGNAL_KEY>;
|
|
31
|
+
export declare const Features: {
|
|
32
|
+
readonly feedbackRequests: (() => FeedbackRequestsFeature) & {
|
|
33
|
+
signal: {
|
|
34
|
+
key: "$boboddy_feedback_request_v1";
|
|
35
|
+
find(signals: Array<{
|
|
36
|
+
key: string;
|
|
37
|
+
valueJson: unknown;
|
|
38
|
+
}>): FeedbackRequestItem[] | undefined;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export {};
|
package/dist/index.js
CHANGED
|
@@ -13301,6 +13301,20 @@ function deriveSignalType(schema, path) {
|
|
|
13301
13301
|
}
|
|
13302
13302
|
}
|
|
13303
13303
|
function defineStep(config2) {
|
|
13304
|
+
const features = config2.features ?? [];
|
|
13305
|
+
let effectiveResult = config2.result;
|
|
13306
|
+
for (const feature of features) {
|
|
13307
|
+
effectiveResult = effectiveResult ? effectiveResult.extend(feature._resultExtension.shape) : feature._resultExtension;
|
|
13308
|
+
}
|
|
13309
|
+
let effectivePrompt = config2.prompt ?? null;
|
|
13310
|
+
for (const feature of features) {
|
|
13311
|
+
if (feature._promptAddition) {
|
|
13312
|
+
effectivePrompt = effectivePrompt ? `${effectivePrompt}
|
|
13313
|
+
|
|
13314
|
+
${feature._promptAddition}` : feature._promptAddition;
|
|
13315
|
+
}
|
|
13316
|
+
}
|
|
13317
|
+
const featureSignals = features.flatMap((f) => f._signals);
|
|
13304
13318
|
const spec = {
|
|
13305
13319
|
key: config2.key,
|
|
13306
13320
|
name: config2.name,
|
|
@@ -13308,16 +13322,25 @@ function defineStep(config2) {
|
|
|
13308
13322
|
version: config2.version ?? 1,
|
|
13309
13323
|
kind: "user_defined",
|
|
13310
13324
|
status: config2.status ?? "active",
|
|
13311
|
-
prompt:
|
|
13325
|
+
prompt: effectivePrompt,
|
|
13312
13326
|
inputSchemaJson: config2.input ? toJSONSchema(config2.input) : null,
|
|
13313
|
-
resultSchemaJson:
|
|
13314
|
-
signalExtractorDefinitions:
|
|
13315
|
-
|
|
13316
|
-
|
|
13317
|
-
|
|
13318
|
-
|
|
13319
|
-
|
|
13320
|
-
|
|
13327
|
+
resultSchemaJson: effectiveResult ? toJSONSchema(effectiveResult) : null,
|
|
13328
|
+
signalExtractorDefinitions: [
|
|
13329
|
+
...(config2.signals ?? []).map((s) => ({
|
|
13330
|
+
key: s.key ?? s.sourcePath,
|
|
13331
|
+
sourcePath: s.sourcePath,
|
|
13332
|
+
type: s.type ?? deriveSignalType(config2.result, s.sourcePath),
|
|
13333
|
+
required: s.required ?? true,
|
|
13334
|
+
availableWhenResultStatusIn: s.availableWhenResultStatusIn ?? null
|
|
13335
|
+
})),
|
|
13336
|
+
...featureSignals.map((s) => ({
|
|
13337
|
+
key: s.key,
|
|
13338
|
+
sourcePath: s.sourcePath,
|
|
13339
|
+
type: s.type,
|
|
13340
|
+
required: s.required ?? true,
|
|
13341
|
+
availableWhenResultStatusIn: s.availableWhenResultStatusIn ?? null
|
|
13342
|
+
}))
|
|
13343
|
+
],
|
|
13321
13344
|
computedSignalDefinitions: (config2.computedSignals ?? []).map((cs) => ({
|
|
13322
13345
|
key: cs.key,
|
|
13323
13346
|
type: cs.type,
|
|
@@ -13366,166 +13389,6 @@ var buildStepDefinitionsClient = (stepDefinitions) => {
|
|
|
13366
13389
|
}
|
|
13367
13390
|
};
|
|
13368
13391
|
};
|
|
13369
|
-
// src/definitions/advancement-policies/define-advancement-policy.ts
|
|
13370
|
-
function signal(signal2, operator, value) {
|
|
13371
|
-
return { _tag: "signal", signal: signal2, operator, value };
|
|
13372
|
-
}
|
|
13373
|
-
function all(conditions, outcome) {
|
|
13374
|
-
if (outcome === undefined) {
|
|
13375
|
-
return { _tag: "all", conditions };
|
|
13376
|
-
}
|
|
13377
|
-
return { _tag: "rule", mode: "all", conditions, outcome };
|
|
13378
|
-
}
|
|
13379
|
-
function any(conditions, outcome) {
|
|
13380
|
-
if (outcome === undefined) {
|
|
13381
|
-
return { _tag: "any", conditions };
|
|
13382
|
-
}
|
|
13383
|
-
return { _tag: "rule", mode: "any", conditions, outcome };
|
|
13384
|
-
}
|
|
13385
|
-
function when(signal2, operator, value, outcome) {
|
|
13386
|
-
return {
|
|
13387
|
-
_tag: "rule",
|
|
13388
|
-
mode: "all",
|
|
13389
|
-
conditions: [{ _tag: "signal", signal: signal2, operator, value }],
|
|
13390
|
-
outcome
|
|
13391
|
-
};
|
|
13392
|
-
}
|
|
13393
|
-
var Rule = { signal, all, any, when };
|
|
13394
|
-
function resolveOutcome(outcome) {
|
|
13395
|
-
if (typeof outcome === "string") {
|
|
13396
|
-
return { type: outcome, params: null };
|
|
13397
|
-
}
|
|
13398
|
-
return { type: outcome.outcome, params: outcome.outcomeJson ?? null };
|
|
13399
|
-
}
|
|
13400
|
-
function serializeCondition(condition) {
|
|
13401
|
-
if (condition._tag === "signal") {
|
|
13402
|
-
return {
|
|
13403
|
-
fact: condition.signal,
|
|
13404
|
-
operator: condition.operator,
|
|
13405
|
-
value: condition.value
|
|
13406
|
-
};
|
|
13407
|
-
}
|
|
13408
|
-
if (condition._tag === "all") {
|
|
13409
|
-
return { all: condition.conditions.map(serializeCondition) };
|
|
13410
|
-
}
|
|
13411
|
-
return { any: condition.conditions.map(serializeCondition) };
|
|
13412
|
-
}
|
|
13413
|
-
function serializeRule(rule) {
|
|
13414
|
-
const resolved = resolveOutcome(rule.outcome);
|
|
13415
|
-
return {
|
|
13416
|
-
conditions: { [rule.mode]: rule.conditions.map(serializeCondition) },
|
|
13417
|
-
event: {
|
|
13418
|
-
type: resolved.type,
|
|
13419
|
-
...resolved.params ? { params: resolved.params } : {}
|
|
13420
|
-
}
|
|
13421
|
-
};
|
|
13422
|
-
}
|
|
13423
|
-
function serializeAdvancementPolicy(policy) {
|
|
13424
|
-
if (!policy) {
|
|
13425
|
-
return {
|
|
13426
|
-
rulesJson: { rules: [] },
|
|
13427
|
-
defaultEventType: "continue",
|
|
13428
|
-
defaultEventParamsJson: null,
|
|
13429
|
-
allowedEventTypes: ["continue"]
|
|
13430
|
-
};
|
|
13431
|
-
}
|
|
13432
|
-
const defaultResolved = resolveOutcome(policy.defaultOutcome);
|
|
13433
|
-
const outcomeSet = new Set([defaultResolved.type]);
|
|
13434
|
-
const serializedRules = (policy.rules ?? []).map((rule) => {
|
|
13435
|
-
outcomeSet.add(resolveOutcome(rule.outcome).type);
|
|
13436
|
-
return serializeRule(rule);
|
|
13437
|
-
});
|
|
13438
|
-
return {
|
|
13439
|
-
rulesJson: { rules: serializedRules },
|
|
13440
|
-
defaultEventType: defaultResolved.type,
|
|
13441
|
-
defaultEventParamsJson: defaultResolved.params,
|
|
13442
|
-
allowedEventTypes: [...outcomeSet]
|
|
13443
|
-
};
|
|
13444
|
-
}
|
|
13445
|
-
|
|
13446
|
-
// src/definitions/pipelines/define-pipeline.ts
|
|
13447
|
-
function fromPipelineInput(_schema, path) {
|
|
13448
|
-
return { source: "pipeline_input", path };
|
|
13449
|
-
}
|
|
13450
|
-
function fromSignal(step, signalKey) {
|
|
13451
|
-
return { source: "step_signal", step, signalKey };
|
|
13452
|
-
}
|
|
13453
|
-
function stepOutput(step) {
|
|
13454
|
-
return { source: "step_output", step };
|
|
13455
|
-
}
|
|
13456
|
-
function serializeBinding(binding) {
|
|
13457
|
-
if (binding.source === "pipeline_input") {
|
|
13458
|
-
return { source: "pipeline_input", path: binding.path };
|
|
13459
|
-
}
|
|
13460
|
-
if (binding.source === "step_signal") {
|
|
13461
|
-
return {
|
|
13462
|
-
source: "step_signal",
|
|
13463
|
-
stepKey: binding.step.key,
|
|
13464
|
-
signalKey: binding.signalKey
|
|
13465
|
-
};
|
|
13466
|
-
}
|
|
13467
|
-
return { source: "step_output", stepKey: binding.step.key };
|
|
13468
|
-
}
|
|
13469
|
-
function definePipeline(config2) {
|
|
13470
|
-
const steps = config2.steps;
|
|
13471
|
-
return {
|
|
13472
|
-
key: config2.key,
|
|
13473
|
-
name: config2.name,
|
|
13474
|
-
description: config2.description ?? null,
|
|
13475
|
-
version: config2.version ?? 1,
|
|
13476
|
-
status: config2.status ?? "active",
|
|
13477
|
-
steps: steps.map((stepConfig, index) => ({
|
|
13478
|
-
stepKey: stepConfig.step.key,
|
|
13479
|
-
stepName: stepConfig.step.name,
|
|
13480
|
-
stepDescription: stepConfig.step.description,
|
|
13481
|
-
position: index + 1,
|
|
13482
|
-
inputBindingsJson: Object.fromEntries(Object.entries(stepConfig.input ?? {}).filter((entry) => entry[1] !== undefined).map(([key, binding]) => [key, serializeBinding(binding)])),
|
|
13483
|
-
timeoutSeconds: stepConfig.timeout ?? null,
|
|
13484
|
-
advancementPolicyDefinition: serializeAdvancementPolicy(stepConfig.advancement)
|
|
13485
|
-
}))
|
|
13486
|
-
};
|
|
13487
|
-
}
|
|
13488
|
-
// src/definitions/pipelines/pipeline-definitions-client.ts
|
|
13489
|
-
function createPipelineDefinitionsClient(baseUrl) {
|
|
13490
|
-
const base = baseUrl.replace(/\/$/, "");
|
|
13491
|
-
async function doFetch(path, method, headers, body) {
|
|
13492
|
-
const requestHeaders = { ...headers };
|
|
13493
|
-
if (body !== undefined) {
|
|
13494
|
-
requestHeaders["Content-Type"] = "application/json";
|
|
13495
|
-
}
|
|
13496
|
-
const response = await fetch(`${base}${path}`, {
|
|
13497
|
-
method,
|
|
13498
|
-
headers: requestHeaders,
|
|
13499
|
-
...body !== undefined ? { body: JSON.stringify(body) } : {}
|
|
13500
|
-
});
|
|
13501
|
-
if (!response.ok) {
|
|
13502
|
-
const err = await response.json().catch(() => null);
|
|
13503
|
-
throw new Error(err?.title ?? `HTTP ${String(response.status)} ${method} ${path}`);
|
|
13504
|
-
}
|
|
13505
|
-
return response.json().catch(() => null);
|
|
13506
|
-
}
|
|
13507
|
-
return buildPipelineDefinitionsClient(base, doFetch);
|
|
13508
|
-
}
|
|
13509
|
-
var buildPipelineDefinitionsClient = (_base, doFetch) => ({
|
|
13510
|
-
listByProjectId: async (projectId, options) => {
|
|
13511
|
-
const path = `/api/linear-pipeline-definitions?projectId=${encodeURIComponent(projectId)}`;
|
|
13512
|
-
const result = await doFetch(path, "GET", options?.headers ?? {});
|
|
13513
|
-
return result ?? [];
|
|
13514
|
-
},
|
|
13515
|
-
create: async (body, options) => {
|
|
13516
|
-
const result = await doFetch("/api/linear-pipeline-definitions", "POST", options?.headers ?? {}, body);
|
|
13517
|
-
return result;
|
|
13518
|
-
},
|
|
13519
|
-
update: async (pipelineId, body, options) => {
|
|
13520
|
-
await doFetch(`/api/linear-pipeline-definitions/${pipelineId}`, "PUT", options?.headers ?? {}, body);
|
|
13521
|
-
},
|
|
13522
|
-
addStep: async (pipelineId, body, options) => {
|
|
13523
|
-
await doFetch(`/api/linear-pipeline-definitions/${pipelineId}/steps`, "POST", options?.headers ?? {}, body);
|
|
13524
|
-
},
|
|
13525
|
-
removeStep: async (pipelineId, stepId, options) => {
|
|
13526
|
-
await doFetch(`/api/linear-pipeline-definitions/${pipelineId}/steps/${stepId}`, "DELETE", options?.headers ?? {});
|
|
13527
|
-
}
|
|
13528
|
-
});
|
|
13529
13392
|
// ../../../node_modules/.bun/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
13530
13393
|
var exports_external = {};
|
|
13531
13394
|
__export(exports_external, {
|
|
@@ -13681,7 +13544,7 @@ __export(exports_external, {
|
|
|
13681
13544
|
base64url: () => base64url2,
|
|
13682
13545
|
base64: () => base642,
|
|
13683
13546
|
array: () => array,
|
|
13684
|
-
any: () =>
|
|
13547
|
+
any: () => any,
|
|
13685
13548
|
_function: () => _function,
|
|
13686
13549
|
_default: () => _default2,
|
|
13687
13550
|
_ZodString: () => _ZodString,
|
|
@@ -13865,7 +13728,7 @@ __export(exports_schemas2, {
|
|
|
13865
13728
|
base64url: () => base64url2,
|
|
13866
13729
|
base64: () => base642,
|
|
13867
13730
|
array: () => array,
|
|
13868
|
-
any: () =>
|
|
13731
|
+
any: () => any,
|
|
13869
13732
|
_function: () => _function,
|
|
13870
13733
|
_default: () => _default2,
|
|
13871
13734
|
_ZodString: () => _ZodString,
|
|
@@ -14654,7 +14517,7 @@ var ZodAny = /* @__PURE__ */ $constructor("ZodAny", (inst, def) => {
|
|
|
14654
14517
|
ZodType.init(inst, def);
|
|
14655
14518
|
inst._zod.processJSONSchema = (ctx, json, params) => anyProcessor(inst, ctx, json, params);
|
|
14656
14519
|
});
|
|
14657
|
-
function
|
|
14520
|
+
function any() {
|
|
14658
14521
|
return _any(ZodAny);
|
|
14659
14522
|
}
|
|
14660
14523
|
var ZodUnknown = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => {
|
|
@@ -15869,6 +15732,209 @@ function date4(params) {
|
|
|
15869
15732
|
|
|
15870
15733
|
// ../../../node_modules/.bun/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
15871
15734
|
config(en_default());
|
|
15735
|
+
// src/definitions/steps/step-features.ts
|
|
15736
|
+
var FEEDBACK_REQUEST_SIGNAL_KEY = "$boboddy_feedback_request_v1";
|
|
15737
|
+
var feedbackRequestItemSchema = exports_external.object({
|
|
15738
|
+
question: exports_external.string(),
|
|
15739
|
+
category: exports_external.string(),
|
|
15740
|
+
suggestedKey: exports_external.string().optional()
|
|
15741
|
+
});
|
|
15742
|
+
var feedbackRequestsFeature = {
|
|
15743
|
+
_resultExtension: exports_external.object({
|
|
15744
|
+
feedbackRequests: exports_external.array(feedbackRequestItemSchema).optional()
|
|
15745
|
+
}),
|
|
15746
|
+
_promptAddition: [
|
|
15747
|
+
"## Feedback Requests",
|
|
15748
|
+
"",
|
|
15749
|
+
"If you encounter anything that warrants human review, populate the `feedbackRequests` array:",
|
|
15750
|
+
"- **question**: The specific question to pose to a human reviewer",
|
|
15751
|
+
'- **category**: A grouping label for the feedback (e.g. `"accuracy"`, `"completeness"`)',
|
|
15752
|
+
"- **suggestedKey** *(optional)*: A suggested answer key for reference"
|
|
15753
|
+
].join(`
|
|
15754
|
+
`),
|
|
15755
|
+
_signals: [
|
|
15756
|
+
{
|
|
15757
|
+
key: FEEDBACK_REQUEST_SIGNAL_KEY,
|
|
15758
|
+
sourcePath: "feedbackRequests",
|
|
15759
|
+
type: "array",
|
|
15760
|
+
required: false
|
|
15761
|
+
}
|
|
15762
|
+
]
|
|
15763
|
+
};
|
|
15764
|
+
var Features = {
|
|
15765
|
+
feedbackRequests: Object.assign(() => feedbackRequestsFeature, {
|
|
15766
|
+
signal: {
|
|
15767
|
+
key: FEEDBACK_REQUEST_SIGNAL_KEY,
|
|
15768
|
+
find(signals) {
|
|
15769
|
+
const match = signals.find((s) => s.key === FEEDBACK_REQUEST_SIGNAL_KEY);
|
|
15770
|
+
if (!match)
|
|
15771
|
+
return;
|
|
15772
|
+
const parsed = exports_external.array(feedbackRequestItemSchema).safeParse(match.valueJson);
|
|
15773
|
+
return parsed.success ? parsed.data : undefined;
|
|
15774
|
+
}
|
|
15775
|
+
}
|
|
15776
|
+
})
|
|
15777
|
+
};
|
|
15778
|
+
// src/definitions/advancement-policies/define-advancement-policy.ts
|
|
15779
|
+
function signal(signal2, operator, value) {
|
|
15780
|
+
return { _tag: "signal", signal: signal2, operator, value };
|
|
15781
|
+
}
|
|
15782
|
+
function all(conditions, outcome) {
|
|
15783
|
+
if (outcome === undefined) {
|
|
15784
|
+
return { _tag: "all", conditions };
|
|
15785
|
+
}
|
|
15786
|
+
return { _tag: "rule", mode: "all", conditions, outcome };
|
|
15787
|
+
}
|
|
15788
|
+
function any2(conditions, outcome) {
|
|
15789
|
+
if (outcome === undefined) {
|
|
15790
|
+
return { _tag: "any", conditions };
|
|
15791
|
+
}
|
|
15792
|
+
return { _tag: "rule", mode: "any", conditions, outcome };
|
|
15793
|
+
}
|
|
15794
|
+
function when(signal2, operator, value, outcome) {
|
|
15795
|
+
return {
|
|
15796
|
+
_tag: "rule",
|
|
15797
|
+
mode: "all",
|
|
15798
|
+
conditions: [{ _tag: "signal", signal: signal2, operator, value }],
|
|
15799
|
+
outcome
|
|
15800
|
+
};
|
|
15801
|
+
}
|
|
15802
|
+
var Rule = { signal, all, any: any2, when };
|
|
15803
|
+
function resolveOutcome(outcome) {
|
|
15804
|
+
if (typeof outcome === "string") {
|
|
15805
|
+
return { type: outcome, params: null };
|
|
15806
|
+
}
|
|
15807
|
+
return { type: outcome.outcome, params: outcome.outcomeJson ?? null };
|
|
15808
|
+
}
|
|
15809
|
+
function serializeCondition(condition) {
|
|
15810
|
+
if (condition._tag === "signal") {
|
|
15811
|
+
return {
|
|
15812
|
+
fact: condition.signal,
|
|
15813
|
+
operator: condition.operator,
|
|
15814
|
+
value: condition.value
|
|
15815
|
+
};
|
|
15816
|
+
}
|
|
15817
|
+
if (condition._tag === "all") {
|
|
15818
|
+
return { all: condition.conditions.map(serializeCondition) };
|
|
15819
|
+
}
|
|
15820
|
+
return { any: condition.conditions.map(serializeCondition) };
|
|
15821
|
+
}
|
|
15822
|
+
function serializeRule(rule) {
|
|
15823
|
+
const resolved = resolveOutcome(rule.outcome);
|
|
15824
|
+
return {
|
|
15825
|
+
conditions: { [rule.mode]: rule.conditions.map(serializeCondition) },
|
|
15826
|
+
event: {
|
|
15827
|
+
type: resolved.type,
|
|
15828
|
+
...resolved.params ? { params: resolved.params } : {}
|
|
15829
|
+
}
|
|
15830
|
+
};
|
|
15831
|
+
}
|
|
15832
|
+
function serializeAdvancementPolicy(policy) {
|
|
15833
|
+
if (!policy) {
|
|
15834
|
+
return {
|
|
15835
|
+
rulesJson: { rules: [] },
|
|
15836
|
+
defaultEventType: "continue",
|
|
15837
|
+
defaultEventParamsJson: null,
|
|
15838
|
+
allowedEventTypes: ["continue"]
|
|
15839
|
+
};
|
|
15840
|
+
}
|
|
15841
|
+
const defaultResolved = resolveOutcome(policy.defaultOutcome);
|
|
15842
|
+
const outcomeSet = new Set([defaultResolved.type]);
|
|
15843
|
+
const serializedRules = (policy.rules ?? []).map((rule) => {
|
|
15844
|
+
outcomeSet.add(resolveOutcome(rule.outcome).type);
|
|
15845
|
+
return serializeRule(rule);
|
|
15846
|
+
});
|
|
15847
|
+
return {
|
|
15848
|
+
rulesJson: { rules: serializedRules },
|
|
15849
|
+
defaultEventType: defaultResolved.type,
|
|
15850
|
+
defaultEventParamsJson: defaultResolved.params,
|
|
15851
|
+
allowedEventTypes: [...outcomeSet]
|
|
15852
|
+
};
|
|
15853
|
+
}
|
|
15854
|
+
|
|
15855
|
+
// src/definitions/pipelines/define-pipeline.ts
|
|
15856
|
+
function fromPipelineInput(_schema, path) {
|
|
15857
|
+
return { source: "pipeline_input", path };
|
|
15858
|
+
}
|
|
15859
|
+
function fromSignal(step, signalKey) {
|
|
15860
|
+
return { source: "step_signal", step, signalKey };
|
|
15861
|
+
}
|
|
15862
|
+
function stepOutput(step) {
|
|
15863
|
+
return { source: "step_output", step };
|
|
15864
|
+
}
|
|
15865
|
+
function serializeBinding(binding) {
|
|
15866
|
+
if (binding.source === "pipeline_input") {
|
|
15867
|
+
return { source: "pipeline_input", path: binding.path };
|
|
15868
|
+
}
|
|
15869
|
+
if (binding.source === "step_signal") {
|
|
15870
|
+
return {
|
|
15871
|
+
source: "step_signal",
|
|
15872
|
+
stepKey: binding.step.key,
|
|
15873
|
+
signalKey: binding.signalKey
|
|
15874
|
+
};
|
|
15875
|
+
}
|
|
15876
|
+
return { source: "step_output", stepKey: binding.step.key };
|
|
15877
|
+
}
|
|
15878
|
+
function definePipeline(config2) {
|
|
15879
|
+
const steps = config2.steps;
|
|
15880
|
+
return {
|
|
15881
|
+
key: config2.key,
|
|
15882
|
+
name: config2.name,
|
|
15883
|
+
description: config2.description ?? null,
|
|
15884
|
+
version: config2.version ?? 1,
|
|
15885
|
+
status: config2.status ?? "active",
|
|
15886
|
+
steps: steps.map((stepConfig, index) => ({
|
|
15887
|
+
stepKey: stepConfig.step.key,
|
|
15888
|
+
stepName: stepConfig.step.name,
|
|
15889
|
+
stepDescription: stepConfig.step.description,
|
|
15890
|
+
position: index + 1,
|
|
15891
|
+
inputBindingsJson: Object.fromEntries(Object.entries(stepConfig.input ?? {}).filter((entry) => entry[1] !== undefined).map(([key, binding]) => [key, serializeBinding(binding)])),
|
|
15892
|
+
timeoutSeconds: stepConfig.timeout ?? null,
|
|
15893
|
+
advancementPolicyDefinition: serializeAdvancementPolicy(stepConfig.advancement)
|
|
15894
|
+
}))
|
|
15895
|
+
};
|
|
15896
|
+
}
|
|
15897
|
+
// src/definitions/pipelines/pipeline-definitions-client.ts
|
|
15898
|
+
function createPipelineDefinitionsClient(baseUrl) {
|
|
15899
|
+
const base = baseUrl.replace(/\/$/, "");
|
|
15900
|
+
async function doFetch(path, method, headers, body) {
|
|
15901
|
+
const requestHeaders = { ...headers };
|
|
15902
|
+
if (body !== undefined) {
|
|
15903
|
+
requestHeaders["Content-Type"] = "application/json";
|
|
15904
|
+
}
|
|
15905
|
+
const response = await fetch(`${base}${path}`, {
|
|
15906
|
+
method,
|
|
15907
|
+
headers: requestHeaders,
|
|
15908
|
+
...body !== undefined ? { body: JSON.stringify(body) } : {}
|
|
15909
|
+
});
|
|
15910
|
+
if (!response.ok) {
|
|
15911
|
+
const err = await response.json().catch(() => null);
|
|
15912
|
+
throw new Error(err?.title ?? `HTTP ${String(response.status)} ${method} ${path}`);
|
|
15913
|
+
}
|
|
15914
|
+
return response.json().catch(() => null);
|
|
15915
|
+
}
|
|
15916
|
+
return buildPipelineDefinitionsClient(base, doFetch);
|
|
15917
|
+
}
|
|
15918
|
+
var buildPipelineDefinitionsClient = (_base, doFetch) => ({
|
|
15919
|
+
listByProjectId: async (projectId, options) => {
|
|
15920
|
+
const path = `/api/linear-pipeline-definitions?projectId=${encodeURIComponent(projectId)}`;
|
|
15921
|
+
const result = await doFetch(path, "GET", options?.headers ?? {});
|
|
15922
|
+
return result ?? [];
|
|
15923
|
+
},
|
|
15924
|
+
create: async (body, options) => {
|
|
15925
|
+
const result = await doFetch("/api/linear-pipeline-definitions", "POST", options?.headers ?? {}, body);
|
|
15926
|
+
return result;
|
|
15927
|
+
},
|
|
15928
|
+
update: async (pipelineId, body, options) => {
|
|
15929
|
+
await doFetch(`/api/linear-pipeline-definitions/${pipelineId}`, "PUT", options?.headers ?? {}, body);
|
|
15930
|
+
},
|
|
15931
|
+
addStep: async (pipelineId, body, options) => {
|
|
15932
|
+
await doFetch(`/api/linear-pipeline-definitions/${pipelineId}/steps`, "POST", options?.headers ?? {}, body);
|
|
15933
|
+
},
|
|
15934
|
+
removeStep: async (pipelineId, stepId, options) => {
|
|
15935
|
+
await doFetch(`/api/linear-pipeline-definitions/${pipelineId}/steps/${stepId}`, "DELETE", options?.headers ?? {});
|
|
15936
|
+
}
|
|
15937
|
+
});
|
|
15872
15938
|
// src/opencode-mcp.ts
|
|
15873
15939
|
var nonEmptyStringSchema = exports_external.string().trim().min(1);
|
|
15874
15940
|
var mcpStringMapSchema = exports_external.record(exports_external.string(), exports_external.string());
|
|
@@ -16538,6 +16604,7 @@ export {
|
|
|
16538
16604
|
PipelineExecutions,
|
|
16539
16605
|
PipelineDefinitions,
|
|
16540
16606
|
FeedbackRequests,
|
|
16607
|
+
Features,
|
|
16541
16608
|
BoboddyClient,
|
|
16542
16609
|
BOBODDY_CONFIG_RELATIVE_PATH,
|
|
16543
16610
|
Api
|
package/package.json
CHANGED
|
@@ -1,56 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@boboddy/sdk",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.3-alpha",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"import": "./src/index.ts",
|
|
11
|
-
"default": "./src/index.ts"
|
|
8
|
+
"import": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts"
|
|
12
10
|
},
|
|
13
11
|
"./client": {
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"import": "./src/client.ts",
|
|
17
|
-
"default": "./src/client.ts"
|
|
12
|
+
"import": "./dist/client.js",
|
|
13
|
+
"types": "./dist/client.d.ts"
|
|
18
14
|
},
|
|
19
15
|
"./definitions/steps": {
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"import": "./src/definitions/steps/index.ts",
|
|
23
|
-
"default": "./src/definitions/steps/index.ts"
|
|
16
|
+
"import": "./dist/definitions/steps/index.js",
|
|
17
|
+
"types": "./dist/definitions/steps/index.d.ts"
|
|
24
18
|
},
|
|
25
19
|
"./definitions/pipelines": {
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"import": "./src/definitions/pipelines/index.ts",
|
|
29
|
-
"default": "./src/definitions/pipelines/index.ts"
|
|
20
|
+
"import": "./dist/definitions/pipelines/index.js",
|
|
21
|
+
"types": "./dist/definitions/pipelines/index.d.ts"
|
|
30
22
|
},
|
|
31
23
|
"./definitions/advancement-policies": {
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"import": "./src/definitions/advancement-policies/index.ts",
|
|
35
|
-
"default": "./src/definitions/advancement-policies/index.ts"
|
|
24
|
+
"import": "./dist/definitions/advancement-policies/index.js",
|
|
25
|
+
"types": "./dist/definitions/advancement-policies/index.d.ts"
|
|
36
26
|
},
|
|
37
27
|
"./opencode-mcp": {
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"import": "./src/opencode-mcp.ts",
|
|
41
|
-
"default": "./src/opencode-mcp.ts"
|
|
28
|
+
"import": "./dist/opencode-mcp.js",
|
|
29
|
+
"types": "./dist/opencode-mcp.d.ts"
|
|
42
30
|
},
|
|
43
31
|
"./jsonc": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"import": "./src/jsonc.ts",
|
|
47
|
-
"default": "./src/jsonc.ts"
|
|
32
|
+
"import": "./dist/jsonc.js",
|
|
33
|
+
"types": "./dist/jsonc.d.ts"
|
|
48
34
|
},
|
|
49
35
|
"./boboddy-config-parser": {
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"import": "./src/boboddy-config-parser.ts",
|
|
53
|
-
"default": "./src/boboddy-config-parser.ts"
|
|
36
|
+
"import": "./dist/boboddy-config-parser.js",
|
|
37
|
+
"types": "./dist/boboddy-config-parser.d.ts"
|
|
54
38
|
}
|
|
55
39
|
},
|
|
56
40
|
"files": [
|
|
@@ -61,55 +45,10 @@
|
|
|
61
45
|
"type": "git",
|
|
62
46
|
"url": "https://github.com/connorivy/boboddy"
|
|
63
47
|
},
|
|
64
|
-
"publishConfig": {
|
|
65
|
-
"access": "public",
|
|
66
|
-
"exports": {
|
|
67
|
-
".": {
|
|
68
|
-
"types": "./dist/index.d.ts",
|
|
69
|
-
"import": "./dist/index.js",
|
|
70
|
-
"default": "./dist/index.js"
|
|
71
|
-
},
|
|
72
|
-
"./client": {
|
|
73
|
-
"types": "./dist/client.d.ts",
|
|
74
|
-
"import": "./dist/client.js",
|
|
75
|
-
"default": "./dist/client.js"
|
|
76
|
-
},
|
|
77
|
-
"./definitions/steps": {
|
|
78
|
-
"types": "./dist/definitions/steps/index.d.ts",
|
|
79
|
-
"import": "./dist/definitions/steps/index.js",
|
|
80
|
-
"default": "./dist/definitions/steps/index.js"
|
|
81
|
-
},
|
|
82
|
-
"./definitions/pipelines": {
|
|
83
|
-
"types": "./dist/definitions/pipelines/index.d.ts",
|
|
84
|
-
"import": "./dist/definitions/pipelines/index.js",
|
|
85
|
-
"default": "./dist/definitions/pipelines/index.js"
|
|
86
|
-
},
|
|
87
|
-
"./definitions/advancement-policies": {
|
|
88
|
-
"types": "./dist/definitions/advancement-policies/index.d.ts",
|
|
89
|
-
"import": "./dist/definitions/advancement-policies/index.js",
|
|
90
|
-
"default": "./dist/definitions/advancement-policies/index.js"
|
|
91
|
-
},
|
|
92
|
-
"./opencode-mcp": {
|
|
93
|
-
"types": "./dist/opencode-mcp.d.ts",
|
|
94
|
-
"import": "./dist/opencode-mcp.js",
|
|
95
|
-
"default": "./dist/opencode-mcp.js"
|
|
96
|
-
},
|
|
97
|
-
"./jsonc": {
|
|
98
|
-
"types": "./dist/jsonc.d.ts",
|
|
99
|
-
"import": "./dist/jsonc.js",
|
|
100
|
-
"default": "./dist/jsonc.js"
|
|
101
|
-
},
|
|
102
|
-
"./boboddy-config-parser": {
|
|
103
|
-
"types": "./dist/boboddy-config-parser.d.ts",
|
|
104
|
-
"import": "./dist/boboddy-config-parser.js",
|
|
105
|
-
"default": "./dist/boboddy-config-parser.js"
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
48
|
"scripts": {
|
|
110
49
|
"generate": "openapi-ts",
|
|
111
50
|
"build": "bun run script/build.ts",
|
|
112
|
-
"
|
|
51
|
+
"link:local": "bun link",
|
|
113
52
|
"test": "bun test test",
|
|
114
53
|
"typecheck": "tsgo -p tsconfig.json --noEmit"
|
|
115
54
|
},
|