@junctionpanel/server 0.1.81 → 0.1.83

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.
Files changed (35) hide show
  1. package/dist/server/server/agent/agent-manager.d.ts +2 -0
  2. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  3. package/dist/server/server/agent/agent-manager.js +115 -2
  4. package/dist/server/server/agent/agent-manager.js.map +1 -1
  5. package/dist/server/server/agent/agent-sdk-types.d.ts +2 -0
  6. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  7. package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
  8. package/dist/server/server/agent/harness/context.d.ts +21 -0
  9. package/dist/server/server/agent/harness/context.d.ts.map +1 -0
  10. package/dist/server/server/agent/harness/context.js +541 -0
  11. package/dist/server/server/agent/harness/context.js.map +1 -0
  12. package/dist/server/server/agent/harness/memory.d.ts +17 -0
  13. package/dist/server/server/agent/harness/memory.d.ts.map +1 -0
  14. package/dist/server/server/agent/harness/memory.js +261 -0
  15. package/dist/server/server/agent/harness/memory.js.map +1 -0
  16. package/dist/server/server/agent/harness/types.d.ts +114 -0
  17. package/dist/server/server/agent/harness/types.d.ts.map +1 -0
  18. package/dist/server/server/agent/harness/types.js +3 -0
  19. package/dist/server/server/agent/harness/types.js.map +1 -0
  20. package/dist/server/server/agent/providers/gemini-agent.d.ts +1 -1
  21. package/dist/server/server/agent/providers/gemini-agent.d.ts.map +1 -1
  22. package/dist/server/server/agent/providers/gemini-agent.js +26 -13
  23. package/dist/server/server/agent/providers/gemini-agent.js.map +1 -1
  24. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  25. package/dist/server/server/exports.d.ts +1 -0
  26. package/dist/server/server/exports.d.ts.map +1 -1
  27. package/dist/server/server/exports.js +1 -0
  28. package/dist/server/server/exports.js.map +1 -1
  29. package/dist/server/server/persisted-config.d.ts +4 -4
  30. package/dist/server/shared/messages.d.ts +20 -20
  31. package/dist/server/shared/switchboard.d.ts +174 -0
  32. package/dist/server/shared/switchboard.d.ts.map +1 -0
  33. package/dist/server/shared/switchboard.js +172 -0
  34. package/dist/server/shared/switchboard.js.map +1 -0
  35. package/package.json +2 -2
@@ -1825,10 +1825,10 @@ export declare const SubscribeCheckoutDiffRequestSchema: z.ZodObject<{
1825
1825
  mode: z.ZodEnum<["uncommitted", "base", "staged", "unstaged"]>;
1826
1826
  baseRef: z.ZodOptional<z.ZodString>;
1827
1827
  }, "strip", z.ZodTypeAny, {
1828
- mode: "uncommitted" | "base" | "staged" | "unstaged";
1828
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
1829
1829
  baseRef?: string | undefined;
1830
1830
  }, {
1831
- mode: "uncommitted" | "base" | "staged" | "unstaged";
1831
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
1832
1832
  baseRef?: string | undefined;
1833
1833
  }>;
1834
1834
  detail: z.ZodOptional<z.ZodEnum<["summary", "full"]>>;
@@ -1839,7 +1839,7 @@ export declare const SubscribeCheckoutDiffRequestSchema: z.ZodObject<{
1839
1839
  requestId: string;
1840
1840
  subscriptionId: string;
1841
1841
  compare: {
1842
- mode: "uncommitted" | "base" | "staged" | "unstaged";
1842
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
1843
1843
  baseRef?: string | undefined;
1844
1844
  };
1845
1845
  detail?: "summary" | "full" | undefined;
@@ -1849,7 +1849,7 @@ export declare const SubscribeCheckoutDiffRequestSchema: z.ZodObject<{
1849
1849
  requestId: string;
1850
1850
  subscriptionId: string;
1851
1851
  compare: {
1852
- mode: "uncommitted" | "base" | "staged" | "unstaged";
1852
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
1853
1853
  baseRef?: string | undefined;
1854
1854
  };
1855
1855
  detail?: "summary" | "full" | undefined;
@@ -3804,10 +3804,10 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<"type"
3804
3804
  mode: z.ZodEnum<["uncommitted", "base", "staged", "unstaged"]>;
3805
3805
  baseRef: z.ZodOptional<z.ZodString>;
3806
3806
  }, "strip", z.ZodTypeAny, {
3807
- mode: "uncommitted" | "base" | "staged" | "unstaged";
3807
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
3808
3808
  baseRef?: string | undefined;
3809
3809
  }, {
3810
- mode: "uncommitted" | "base" | "staged" | "unstaged";
3810
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
3811
3811
  baseRef?: string | undefined;
3812
3812
  }>;
3813
3813
  detail: z.ZodOptional<z.ZodEnum<["summary", "full"]>>;
@@ -3818,7 +3818,7 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<"type"
3818
3818
  requestId: string;
3819
3819
  subscriptionId: string;
3820
3820
  compare: {
3821
- mode: "uncommitted" | "base" | "staged" | "unstaged";
3821
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
3822
3822
  baseRef?: string | undefined;
3823
3823
  };
3824
3824
  detail?: "summary" | "full" | undefined;
@@ -3828,7 +3828,7 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<"type"
3828
3828
  requestId: string;
3829
3829
  subscriptionId: string;
3830
3830
  compare: {
3831
- mode: "uncommitted" | "base" | "staged" | "unstaged";
3831
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
3832
3832
  baseRef?: string | undefined;
3833
3833
  };
3834
3834
  detail?: "summary" | "full" | undefined;
@@ -31005,10 +31005,10 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
31005
31005
  mode: z.ZodEnum<["uncommitted", "base", "staged", "unstaged"]>;
31006
31006
  baseRef: z.ZodOptional<z.ZodString>;
31007
31007
  }, "strip", z.ZodTypeAny, {
31008
- mode: "uncommitted" | "base" | "staged" | "unstaged";
31008
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
31009
31009
  baseRef?: string | undefined;
31010
31010
  }, {
31011
- mode: "uncommitted" | "base" | "staged" | "unstaged";
31011
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
31012
31012
  baseRef?: string | undefined;
31013
31013
  }>;
31014
31014
  detail: z.ZodOptional<z.ZodEnum<["summary", "full"]>>;
@@ -31019,7 +31019,7 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
31019
31019
  requestId: string;
31020
31020
  subscriptionId: string;
31021
31021
  compare: {
31022
- mode: "uncommitted" | "base" | "staged" | "unstaged";
31022
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
31023
31023
  baseRef?: string | undefined;
31024
31024
  };
31025
31025
  detail?: "summary" | "full" | undefined;
@@ -31029,7 +31029,7 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
31029
31029
  requestId: string;
31030
31030
  subscriptionId: string;
31031
31031
  compare: {
31032
- mode: "uncommitted" | "base" | "staged" | "unstaged";
31032
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
31033
31033
  baseRef?: string | undefined;
31034
31034
  };
31035
31035
  detail?: "summary" | "full" | undefined;
@@ -32100,7 +32100,7 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
32100
32100
  requestId: string;
32101
32101
  subscriptionId: string;
32102
32102
  compare: {
32103
- mode: "uncommitted" | "base" | "staged" | "unstaged";
32103
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
32104
32104
  baseRef?: string | undefined;
32105
32105
  };
32106
32106
  detail?: "summary" | "full" | undefined;
@@ -32632,7 +32632,7 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
32632
32632
  requestId: string;
32633
32633
  subscriptionId: string;
32634
32634
  compare: {
32635
- mode: "uncommitted" | "base" | "staged" | "unstaged";
32635
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
32636
32636
  baseRef?: string | undefined;
32637
32637
  };
32638
32638
  detail?: "summary" | "full" | undefined;
@@ -48659,10 +48659,10 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<"type", [z.
48659
48659
  mode: z.ZodEnum<["uncommitted", "base", "staged", "unstaged"]>;
48660
48660
  baseRef: z.ZodOptional<z.ZodString>;
48661
48661
  }, "strip", z.ZodTypeAny, {
48662
- mode: "uncommitted" | "base" | "staged" | "unstaged";
48662
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
48663
48663
  baseRef?: string | undefined;
48664
48664
  }, {
48665
- mode: "uncommitted" | "base" | "staged" | "unstaged";
48665
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
48666
48666
  baseRef?: string | undefined;
48667
48667
  }>;
48668
48668
  detail: z.ZodOptional<z.ZodEnum<["summary", "full"]>>;
@@ -48673,7 +48673,7 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<"type", [z.
48673
48673
  requestId: string;
48674
48674
  subscriptionId: string;
48675
48675
  compare: {
48676
- mode: "uncommitted" | "base" | "staged" | "unstaged";
48676
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
48677
48677
  baseRef?: string | undefined;
48678
48678
  };
48679
48679
  detail?: "summary" | "full" | undefined;
@@ -48683,7 +48683,7 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<"type", [z.
48683
48683
  requestId: string;
48684
48684
  subscriptionId: string;
48685
48685
  compare: {
48686
- mode: "uncommitted" | "base" | "staged" | "unstaged";
48686
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
48687
48687
  baseRef?: string | undefined;
48688
48688
  };
48689
48689
  detail?: "summary" | "full" | undefined;
@@ -49754,7 +49754,7 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<"type", [z.
49754
49754
  requestId: string;
49755
49755
  subscriptionId: string;
49756
49756
  compare: {
49757
- mode: "uncommitted" | "base" | "staged" | "unstaged";
49757
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
49758
49758
  baseRef?: string | undefined;
49759
49759
  };
49760
49760
  detail?: "summary" | "full" | undefined;
@@ -50286,7 +50286,7 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<"type", [z.
50286
50286
  requestId: string;
50287
50287
  subscriptionId: string;
50288
50288
  compare: {
50289
- mode: "uncommitted" | "base" | "staged" | "unstaged";
50289
+ mode: "base" | "uncommitted" | "staged" | "unstaged";
50290
50290
  baseRef?: string | undefined;
50291
50291
  };
50292
50292
  detail?: "summary" | "full" | undefined;
@@ -0,0 +1,174 @@
1
+ import { z } from "zod";
2
+ export declare const SWITCHBOARD_WORKFLOW_FILE = "SWITCHBOARD.md";
3
+ export declare const SWITCHBOARD_MANAGED_BY_LABEL = "junction:managed-by";
4
+ export declare const SWITCHBOARD_MANAGED_BY_VALUE = "switchboard";
5
+ export declare const SWITCHBOARD_PROJECT_ID_LABEL = "junction:switchboard-project-id";
6
+ export declare const SWITCHBOARD_PROJECT_KEY_LABEL = "junction:switchboard-project-key";
7
+ export declare const SWITCHBOARD_RUN_ID_LABEL = "junction:switchboard-run-id";
8
+ export declare const SWITCHBOARD_ISSUE_LABEL = "junction:switchboard-issue";
9
+ export declare const SwitchboardWorkflowSchema: z.ZodObject<{
10
+ version: z.ZodLiteral<1>;
11
+ project: z.ZodDefault<z.ZodObject<{
12
+ name: z.ZodOptional<z.ZodString>;
13
+ tracker: z.ZodDefault<z.ZodObject<{
14
+ provider: z.ZodDefault<z.ZodEnum<["manual", "linear"]>>;
15
+ teamKey: z.ZodOptional<z.ZodString>;
16
+ projectId: z.ZodOptional<z.ZodString>;
17
+ defaultStateName: z.ZodOptional<z.ZodString>;
18
+ }, "strict", z.ZodTypeAny, {
19
+ provider: "manual" | "linear";
20
+ teamKey?: string | undefined;
21
+ projectId?: string | undefined;
22
+ defaultStateName?: string | undefined;
23
+ }, {
24
+ provider?: "manual" | "linear" | undefined;
25
+ teamKey?: string | undefined;
26
+ projectId?: string | undefined;
27
+ defaultStateName?: string | undefined;
28
+ }>>;
29
+ }, "strict", z.ZodTypeAny, {
30
+ tracker: {
31
+ provider: "manual" | "linear";
32
+ teamKey?: string | undefined;
33
+ projectId?: string | undefined;
34
+ defaultStateName?: string | undefined;
35
+ };
36
+ name?: string | undefined;
37
+ }, {
38
+ name?: string | undefined;
39
+ tracker?: {
40
+ provider?: "manual" | "linear" | undefined;
41
+ teamKey?: string | undefined;
42
+ projectId?: string | undefined;
43
+ defaultStateName?: string | undefined;
44
+ } | undefined;
45
+ }>>;
46
+ defaults: z.ZodDefault<z.ZodObject<{
47
+ agentProvider: z.ZodDefault<z.ZodString>;
48
+ baseBranch: z.ZodOptional<z.ZodString>;
49
+ remoteName: z.ZodOptional<z.ZodString>;
50
+ worktreePrefix: z.ZodDefault<z.ZodString>;
51
+ maxConcurrentRuns: z.ZodDefault<z.ZodNumber>;
52
+ }, "strict", z.ZodTypeAny, {
53
+ agentProvider: string;
54
+ worktreePrefix: string;
55
+ maxConcurrentRuns: number;
56
+ baseBranch?: string | undefined;
57
+ remoteName?: string | undefined;
58
+ }, {
59
+ baseBranch?: string | undefined;
60
+ remoteName?: string | undefined;
61
+ agentProvider?: string | undefined;
62
+ worktreePrefix?: string | undefined;
63
+ maxConcurrentRuns?: number | undefined;
64
+ }>>;
65
+ prompt: z.ZodObject<{
66
+ system: z.ZodString;
67
+ successDefinition: z.ZodOptional<z.ZodString>;
68
+ includeIssueDescription: z.ZodDefault<z.ZodBoolean>;
69
+ includeIssueIdentifier: z.ZodDefault<z.ZodBoolean>;
70
+ }, "strict", z.ZodTypeAny, {
71
+ system: string;
72
+ includeIssueDescription: boolean;
73
+ includeIssueIdentifier: boolean;
74
+ successDefinition?: string | undefined;
75
+ }, {
76
+ system: string;
77
+ successDefinition?: string | undefined;
78
+ includeIssueDescription?: boolean | undefined;
79
+ includeIssueIdentifier?: boolean | undefined;
80
+ }>;
81
+ labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
82
+ automation: z.ZodDefault<z.ZodObject<{
83
+ enabled: z.ZodDefault<z.ZodBoolean>;
84
+ autoStart: z.ZodDefault<z.ZodBoolean>;
85
+ pollIntervalSeconds: z.ZodDefault<z.ZodNumber>;
86
+ }, "strict", z.ZodTypeAny, {
87
+ enabled: boolean;
88
+ autoStart: boolean;
89
+ pollIntervalSeconds: number;
90
+ }, {
91
+ enabled?: boolean | undefined;
92
+ autoStart?: boolean | undefined;
93
+ pollIntervalSeconds?: number | undefined;
94
+ }>>;
95
+ }, "strict", z.ZodTypeAny, {
96
+ labels: Record<string, string>;
97
+ version: 1;
98
+ project: {
99
+ tracker: {
100
+ provider: "manual" | "linear";
101
+ teamKey?: string | undefined;
102
+ projectId?: string | undefined;
103
+ defaultStateName?: string | undefined;
104
+ };
105
+ name?: string | undefined;
106
+ };
107
+ prompt: {
108
+ system: string;
109
+ includeIssueDescription: boolean;
110
+ includeIssueIdentifier: boolean;
111
+ successDefinition?: string | undefined;
112
+ };
113
+ defaults: {
114
+ agentProvider: string;
115
+ worktreePrefix: string;
116
+ maxConcurrentRuns: number;
117
+ baseBranch?: string | undefined;
118
+ remoteName?: string | undefined;
119
+ };
120
+ automation: {
121
+ enabled: boolean;
122
+ autoStart: boolean;
123
+ pollIntervalSeconds: number;
124
+ };
125
+ }, {
126
+ version: 1;
127
+ prompt: {
128
+ system: string;
129
+ successDefinition?: string | undefined;
130
+ includeIssueDescription?: boolean | undefined;
131
+ includeIssueIdentifier?: boolean | undefined;
132
+ };
133
+ labels?: Record<string, string> | undefined;
134
+ project?: {
135
+ name?: string | undefined;
136
+ tracker?: {
137
+ provider?: "manual" | "linear" | undefined;
138
+ teamKey?: string | undefined;
139
+ projectId?: string | undefined;
140
+ defaultStateName?: string | undefined;
141
+ } | undefined;
142
+ } | undefined;
143
+ defaults?: {
144
+ baseBranch?: string | undefined;
145
+ remoteName?: string | undefined;
146
+ agentProvider?: string | undefined;
147
+ worktreePrefix?: string | undefined;
148
+ maxConcurrentRuns?: number | undefined;
149
+ } | undefined;
150
+ automation?: {
151
+ enabled?: boolean | undefined;
152
+ autoStart?: boolean | undefined;
153
+ pollIntervalSeconds?: number | undefined;
154
+ } | undefined;
155
+ }>;
156
+ export type SwitchboardWorkflow = z.infer<typeof SwitchboardWorkflowSchema>;
157
+ export type SwitchboardWorkflowParseResult = {
158
+ status: "valid";
159
+ workflow: SwitchboardWorkflow;
160
+ sourceBlock: string;
161
+ } | {
162
+ status: "missing_block" | "invalid_json" | "invalid_schema";
163
+ message: string;
164
+ };
165
+ export declare const SWITCHBOARD_WORKFLOW_TEMPLATE = "# Switchboard\n\nThis repository is operated by Junction Switchboard.\n\n```switchboard\n{\n \"version\": 1,\n \"project\": {\n \"tracker\": {\n \"provider\": \"manual\"\n }\n },\n \"defaults\": {\n \"agentProvider\": \"codex\",\n \"worktreePrefix\": \"switchboard\",\n \"maxConcurrentRuns\": 1\n },\n \"prompt\": {\n \"system\": \"Own the issue end-to-end. Make the code changes, run the relevant checks, and leave the branch ready for review.\",\n \"successDefinition\": \"The issue is implemented, relevant checks pass, and the branch is ready for a Junction code review.\",\n \"includeIssueDescription\": true,\n \"includeIssueIdentifier\": true\n },\n \"labels\": {},\n \"automation\": {\n \"enabled\": true,\n \"autoStart\": false,\n \"pollIntervalSeconds\": 300\n }\n}\n```\n";
166
+ export declare function parseSwitchboardWorkflowFile(content: string): SwitchboardWorkflowParseResult;
167
+ export declare function buildSwitchboardRunPrompt(input: {
168
+ workflow: SwitchboardWorkflow;
169
+ issueIdentifier?: string | null;
170
+ issueTitle: string;
171
+ issueDescription?: string | null;
172
+ }): string;
173
+ export declare function sanitizeSwitchboardSlugPart(value: string): string;
174
+ //# sourceMappingURL=switchboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switchboard.d.ts","sourceRoot":"","sources":["../../../src/shared/switchboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAC1D,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAClE,eAAO,MAAM,4BAA4B,gBAAgB,CAAC;AAC1D,eAAO,MAAM,4BAA4B,oCAAoC,CAAC;AAC9E,eAAO,MAAM,6BAA6B,qCAAqC,CAAC;AAChF,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AACtE,eAAO,MAAM,uBAAuB,+BAA+B,CAAC;AAsCpE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyB3B,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GACtC;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,gBAAgB,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,eAAO,MAAM,6BAA6B,s0BA+BzC,CAAC;AAUF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,8BAA8B,CAwChC;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,MAAM,CA4BT;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQjE"}
@@ -0,0 +1,172 @@
1
+ import { z } from "zod";
2
+ export const SWITCHBOARD_WORKFLOW_FILE = "SWITCHBOARD.md";
3
+ export const SWITCHBOARD_MANAGED_BY_LABEL = "junction:managed-by";
4
+ export const SWITCHBOARD_MANAGED_BY_VALUE = "switchboard";
5
+ export const SWITCHBOARD_PROJECT_ID_LABEL = "junction:switchboard-project-id";
6
+ export const SWITCHBOARD_PROJECT_KEY_LABEL = "junction:switchboard-project-key";
7
+ export const SWITCHBOARD_RUN_ID_LABEL = "junction:switchboard-run-id";
8
+ export const SWITCHBOARD_ISSUE_LABEL = "junction:switchboard-issue";
9
+ const SwitchboardTrackerSchema = z
10
+ .object({
11
+ provider: z.enum(["manual", "linear"]).default("manual"),
12
+ teamKey: z.string().trim().min(1).max(32).optional(),
13
+ projectId: z.string().trim().min(1).max(128).optional(),
14
+ defaultStateName: z.string().trim().min(1).max(100).optional(),
15
+ })
16
+ .strict();
17
+ const SwitchboardDefaultsSchema = z
18
+ .object({
19
+ agentProvider: z.string().trim().min(1).max(64).default("codex"),
20
+ baseBranch: z.string().trim().min(1).max(255).optional(),
21
+ remoteName: z.string().trim().min(1).max(255).optional(),
22
+ worktreePrefix: z.string().trim().min(1).max(64).default("switchboard"),
23
+ maxConcurrentRuns: z.number().int().min(1).max(20).default(1),
24
+ })
25
+ .strict();
26
+ const SwitchboardPromptSchema = z
27
+ .object({
28
+ system: z.string().trim().min(1),
29
+ successDefinition: z.string().trim().min(1).optional(),
30
+ includeIssueDescription: z.boolean().default(true),
31
+ includeIssueIdentifier: z.boolean().default(true),
32
+ })
33
+ .strict();
34
+ const SwitchboardAutomationSchema = z
35
+ .object({
36
+ enabled: z.boolean().default(true),
37
+ autoStart: z.boolean().default(false),
38
+ pollIntervalSeconds: z.number().int().min(30).max(3600).default(300),
39
+ })
40
+ .strict();
41
+ export const SwitchboardWorkflowSchema = z
42
+ .object({
43
+ version: z.literal(1),
44
+ project: z
45
+ .object({
46
+ name: z.string().trim().min(1).max(255).optional(),
47
+ tracker: SwitchboardTrackerSchema.default({ provider: "manual" }),
48
+ })
49
+ .strict()
50
+ .default({
51
+ tracker: { provider: "manual" },
52
+ }),
53
+ defaults: SwitchboardDefaultsSchema.default({
54
+ agentProvider: "codex",
55
+ worktreePrefix: "switchboard",
56
+ maxConcurrentRuns: 1,
57
+ }),
58
+ prompt: SwitchboardPromptSchema,
59
+ labels: z.record(z.string().trim().min(1).max(255)).default({}),
60
+ automation: SwitchboardAutomationSchema.default({
61
+ enabled: true,
62
+ autoStart: false,
63
+ pollIntervalSeconds: 300,
64
+ }),
65
+ })
66
+ .strict();
67
+ export const SWITCHBOARD_WORKFLOW_TEMPLATE = `# Switchboard
68
+
69
+ This repository is operated by Junction Switchboard.
70
+
71
+ \`\`\`switchboard
72
+ {
73
+ "version": 1,
74
+ "project": {
75
+ "tracker": {
76
+ "provider": "manual"
77
+ }
78
+ },
79
+ "defaults": {
80
+ "agentProvider": "codex",
81
+ "worktreePrefix": "switchboard",
82
+ "maxConcurrentRuns": 1
83
+ },
84
+ "prompt": {
85
+ "system": "Own the issue end-to-end. Make the code changes, run the relevant checks, and leave the branch ready for review.",
86
+ "successDefinition": "The issue is implemented, relevant checks pass, and the branch is ready for a Junction code review.",
87
+ "includeIssueDescription": true,
88
+ "includeIssueIdentifier": true
89
+ },
90
+ "labels": {},
91
+ "automation": {
92
+ "enabled": true,
93
+ "autoStart": false,
94
+ "pollIntervalSeconds": 300
95
+ }
96
+ }
97
+ \`\`\`
98
+ `;
99
+ function extractSwitchboardCodeBlock(content) {
100
+ const match = content.match(/```switchboard\s*\n([\s\S]*?)\n```/i);
101
+ if (!match) {
102
+ return null;
103
+ }
104
+ return match[1]?.trim() ?? null;
105
+ }
106
+ export function parseSwitchboardWorkflowFile(content) {
107
+ const sourceBlock = extractSwitchboardCodeBlock(content);
108
+ if (!sourceBlock) {
109
+ return {
110
+ status: "missing_block",
111
+ message: "`SWITCHBOARD.md` must contain a ```switchboard fenced code block with JSON workflow settings.",
112
+ };
113
+ }
114
+ let parsed;
115
+ try {
116
+ parsed = JSON.parse(sourceBlock);
117
+ }
118
+ catch (error) {
119
+ return {
120
+ status: "invalid_json",
121
+ message: error instanceof Error ? error.message : "Invalid JSON in `SWITCHBOARD.md`.",
122
+ };
123
+ }
124
+ const result = SwitchboardWorkflowSchema.safeParse(parsed);
125
+ if (!result.success) {
126
+ const issues = result.error.issues
127
+ .map((issue) => {
128
+ const path = issue.path.length > 0 ? issue.path.join(".") : "root";
129
+ return `${path}: ${issue.message}`;
130
+ })
131
+ .join("; ");
132
+ return {
133
+ status: "invalid_schema",
134
+ message: issues || "Invalid `SWITCHBOARD.md` workflow schema.",
135
+ };
136
+ }
137
+ return {
138
+ status: "valid",
139
+ workflow: result.data,
140
+ sourceBlock,
141
+ };
142
+ }
143
+ export function buildSwitchboardRunPrompt(input) {
144
+ const sections = [input.workflow.prompt.system.trim()];
145
+ const issueLines = [];
146
+ if (input.workflow.prompt.includeIssueIdentifier && input.issueIdentifier?.trim()) {
147
+ issueLines.push(`Issue: ${input.issueIdentifier.trim()}`);
148
+ }
149
+ issueLines.push(`Title: ${input.issueTitle.trim()}`);
150
+ if (input.workflow.prompt.includeIssueDescription) {
151
+ const description = input.issueDescription?.trim();
152
+ if (description) {
153
+ issueLines.push(`Description:\n${description}`);
154
+ }
155
+ }
156
+ sections.push(issueLines.join("\n"));
157
+ const successDefinition = input.workflow.prompt.successDefinition?.trim();
158
+ if (successDefinition) {
159
+ sections.push(`Success definition:\n${successDefinition}`);
160
+ }
161
+ sections.push("Use the repository's existing Junction configuration and keep the worktree ready for review when you finish.");
162
+ return sections.join("\n\n");
163
+ }
164
+ export function sanitizeSwitchboardSlugPart(value) {
165
+ const normalized = value
166
+ .trim()
167
+ .toLowerCase()
168
+ .replace(/[^a-z0-9]+/g, "-")
169
+ .replace(/^-+|-+$/g, "");
170
+ return normalized.length > 0 ? normalized.slice(0, 48) : "run";
171
+ }
172
+ //# sourceMappingURL=switchboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switchboard.js","sourceRoot":"","sources":["../../../src/shared/switchboard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@junctionpanel/server",
3
- "version": "0.1.81",
3
+ "version": "0.1.83",
4
4
  "description": "Junction backend server",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -70,7 +70,7 @@
70
70
  "ws": "^8.14.2",
71
71
  "zod": "^3.25.76",
72
72
  "zod-to-json-schema": "^3.25.1",
73
- "@junctionpanel/relay": "0.1.81"
73
+ "@junctionpanel/relay": "0.1.83"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@playwright/test": "^1.56.1",