@boboddy/sdk 0.1.0-alpha → 0.1.2-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: config2.prompt ?? null,
13325
+ prompt: effectivePrompt,
13312
13326
  inputSchemaJson: config2.input ? toJSONSchema(config2.input) : null,
13313
- resultSchemaJson: config2.result ? toJSONSchema(config2.result) : null,
13314
- signalExtractorDefinitions: (config2.signals ?? []).map((s) => ({
13315
- key: s.key ?? s.sourcePath,
13316
- sourcePath: s.sourcePath,
13317
- type: s.type ?? deriveSignalType(config2.result, s.sourcePath),
13318
- required: s.required ?? true,
13319
- availableWhenResultStatusIn: s.availableWhenResultStatusIn ?? null
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,125 +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
13392
  // ../../../node_modules/.bun/zod@4.4.3/node_modules/zod/v4/classic/external.js
13489
13393
  var exports_external = {};
13490
13394
  __export(exports_external, {
@@ -13640,7 +13544,7 @@ __export(exports_external, {
13640
13544
  base64url: () => base64url2,
13641
13545
  base64: () => base642,
13642
13546
  array: () => array,
13643
- any: () => any2,
13547
+ any: () => any,
13644
13548
  _function: () => _function,
13645
13549
  _default: () => _default2,
13646
13550
  _ZodString: () => _ZodString,
@@ -13824,7 +13728,7 @@ __export(exports_schemas2, {
13824
13728
  base64url: () => base64url2,
13825
13729
  base64: () => base642,
13826
13730
  array: () => array,
13827
- any: () => any2,
13731
+ any: () => any,
13828
13732
  _function: () => _function,
13829
13733
  _default: () => _default2,
13830
13734
  _ZodString: () => _ZodString,
@@ -14613,7 +14517,7 @@ var ZodAny = /* @__PURE__ */ $constructor("ZodAny", (inst, def) => {
14613
14517
  ZodType.init(inst, def);
14614
14518
  inst._zod.processJSONSchema = (ctx, json, params) => anyProcessor(inst, ctx, json, params);
14615
14519
  });
14616
- function any2() {
14520
+ function any() {
14617
14521
  return _any(ZodAny);
14618
14522
  }
14619
14523
  var ZodUnknown = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => {
@@ -15828,6 +15732,209 @@ function date4(params) {
15828
15732
 
15829
15733
  // ../../../node_modules/.bun/zod@4.4.3/node_modules/zod/v4/classic/external.js
15830
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
+ });
15831
15938
  // src/opencode-mcp.ts
15832
15939
  var nonEmptyStringSchema = exports_external.string().trim().min(1);
15833
15940
  var mcpStringMapSchema = exports_external.record(exports_external.string(), exports_external.string());
@@ -16485,6 +16592,7 @@ export {
16485
16592
  definePipeline,
16486
16593
  createStepExecutionPlaneClient,
16487
16594
  createStepDefinitionsClient,
16595
+ createPipelineDefinitionsClient,
16488
16596
  createBoboddyClient,
16489
16597
  WorkItems,
16490
16598
  StepExecutions,
@@ -16496,6 +16604,7 @@ export {
16496
16604
  PipelineExecutions,
16497
16605
  PipelineDefinitions,
16498
16606
  FeedbackRequests,
16607
+ Features,
16499
16608
  BoboddyClient,
16500
16609
  BOBODDY_CONFIG_RELATIVE_PATH,
16501
16610
  Api
package/package.json CHANGED
@@ -1,53 +1,53 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@boboddy/sdk",
4
- "version": "0.1.0-alpha",
4
+ "version": "0.1.2-alpha",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {
8
- "types": "./src/index.ts",
8
+ "types": "./dist/index.d.ts",
9
9
  "bun": "./src/index.ts",
10
10
  "import": "./src/index.ts",
11
11
  "default": "./src/index.ts"
12
12
  },
13
13
  "./client": {
14
- "types": "./src/client.ts",
14
+ "types": "./dist/client.d.ts",
15
15
  "bun": "./src/client.ts",
16
16
  "import": "./src/client.ts",
17
17
  "default": "./src/client.ts"
18
18
  },
19
19
  "./definitions/steps": {
20
- "types": "./src/definitions/steps/index.ts",
20
+ "types": "./dist/definitions/steps/index.d.ts",
21
21
  "bun": "./src/definitions/steps/index.ts",
22
22
  "import": "./src/definitions/steps/index.ts",
23
23
  "default": "./src/definitions/steps/index.ts"
24
24
  },
25
25
  "./definitions/pipelines": {
26
- "types": "./src/definitions/pipelines/index.ts",
26
+ "types": "./dist/definitions/pipelines/index.d.ts",
27
27
  "bun": "./src/definitions/pipelines/index.ts",
28
28
  "import": "./src/definitions/pipelines/index.ts",
29
29
  "default": "./src/definitions/pipelines/index.ts"
30
30
  },
31
31
  "./definitions/advancement-policies": {
32
- "types": "./src/definitions/advancement-policies/index.ts",
32
+ "types": "./dist/definitions/advancement-policies/index.d.ts",
33
33
  "bun": "./src/definitions/advancement-policies/index.ts",
34
34
  "import": "./src/definitions/advancement-policies/index.ts",
35
35
  "default": "./src/definitions/advancement-policies/index.ts"
36
36
  },
37
37
  "./opencode-mcp": {
38
- "types": "./src/opencode-mcp.ts",
38
+ "types": "./dist/opencode-mcp.d.ts",
39
39
  "bun": "./src/opencode-mcp.ts",
40
40
  "import": "./src/opencode-mcp.ts",
41
41
  "default": "./src/opencode-mcp.ts"
42
42
  },
43
43
  "./jsonc": {
44
- "types": "./src/jsonc.ts",
44
+ "types": "./dist/jsonc.d.ts",
45
45
  "bun": "./src/jsonc.ts",
46
46
  "import": "./src/jsonc.ts",
47
47
  "default": "./src/jsonc.ts"
48
48
  },
49
49
  "./boboddy-config-parser": {
50
- "types": "./src/boboddy-config-parser.ts",
50
+ "types": "./dist/boboddy-config-parser.d.ts",
51
51
  "bun": "./src/boboddy-config-parser.ts",
52
52
  "import": "./src/boboddy-config-parser.ts",
53
53
  "default": "./src/boboddy-config-parser.ts"
@@ -57,8 +57,54 @@
57
57
  "dist",
58
58
  "README.md"
59
59
  ],
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "https://github.com/connorivy/boboddy"
63
+ },
60
64
  "publishConfig": {
61
- "access": "public"
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
+ }
62
108
  },
63
109
  "scripts": {
64
110
  "generate": "openapi-ts",