@serviceme/devtools-protocol 0.0.5 → 0.1.2

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/dist/index.js CHANGED
@@ -22,6 +22,7 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  BRIDGE_EVENTS: () => BRIDGE_EVENTS,
24
24
  BRIDGE_METHODS: () => BRIDGE_METHODS,
25
+ COPILOT_ERROR_CODES: () => COPILOT_ERROR_CODES,
25
26
  DEFAULT_JSON_SORT_OPTIONS: () => DEFAULT_JSON_SORT_OPTIONS,
26
27
  JSON_SORT_ALGORITHMS: () => JSON_SORT_ALGORITHMS,
27
28
  JSON_SORT_ORDERS: () => JSON_SORT_ORDERS,
@@ -54,20 +55,10 @@ __export(index_exports, {
54
55
  isJsonSortOrder: () => isJsonSortOrder,
55
56
  isJsonValidationResult: () => isJsonValidationResult,
56
57
  isKnownEnvironmentTool: () => isKnownEnvironmentTool,
57
- isOpenCodeAgentEvent: () => isOpenCodeAgentEvent,
58
- isOpenCodeServerState: () => isOpenCodeServerState,
59
- isOpenCodeSessionAbortResult: () => isOpenCodeSessionAbortResult,
60
- isOpenCodeSessionCompletedEvent: () => isOpenCodeSessionCompletedEvent,
61
- isOpenCodeSessionCreateResult: () => isOpenCodeSessionCreateResult,
62
- isOpenCodeSessionDisposeResult: () => isOpenCodeSessionDisposeResult,
63
- isOpenCodeSessionErrorEvent: () => isOpenCodeSessionErrorEvent,
64
- isOpenCodeSessionEventParams: () => isOpenCodeSessionEventParams,
65
- isOpenCodeSessionMessageEvent: () => isOpenCodeSessionMessageEvent,
66
- isOpenCodeSessionProgressEvent: () => isOpenCodeSessionProgressEvent,
67
- isOpenCodeSessionPromptResult: () => isOpenCodeSessionPromptResult,
68
- isOpenCodeSessionStatusEvent: () => isOpenCodeSessionStatusEvent,
69
- isOpenCodeSessionStatusResult: () => isOpenCodeSessionStatusResult,
70
58
  isRetryableErrorCode: () => isRetryableErrorCode,
59
+ isScheduledTask: () => isScheduledTask,
60
+ isScheduledTaskType: () => isScheduledTaskType,
61
+ isSchedulerStatus: () => isSchedulerStatus,
71
62
  isServiceMeImageCompressOptions: () => isServiceMeImageCompressOptions,
72
63
  isServiceMeImageCompressResult: () => isServiceMeImageCompressResult,
73
64
  isServiceMeImageFormat: () => isServiceMeImageFormat,
@@ -84,66 +75,104 @@ __export(index_exports, {
84
75
  isSystemHelloResult: () => isSystemHelloResult,
85
76
  isSystemPingResult: () => isSystemPingResult,
86
77
  isSystemShutdownResult: () => isSystemShutdownResult,
78
+ isTaskCancelResult: () => isTaskCancelResult,
79
+ isTaskCancelledEventParams: () => isTaskCancelledEventParams,
80
+ isTaskCompletedEventParams: () => isTaskCompletedEventParams,
81
+ isTaskExecuteResult: () => isTaskExecuteResult,
82
+ isTaskExecutionLog: () => isTaskExecutionLog,
83
+ isTaskFailedEventParams: () => isTaskFailedEventParams,
84
+ isTaskListRunningResult: () => isTaskListRunningResult,
85
+ isTaskOutputEventParams: () => isTaskOutputEventParams,
86
+ isTaskStartedEventParams: () => isTaskStartedEventParams,
87
87
  isToolCheckResult: () => isToolCheckResult,
88
88
  normalizeServicemeError: () => normalizeServicemeError
89
89
  });
90
90
  module.exports = __toCommonJS(index_exports);
91
91
 
92
- // src/opencode.ts
92
+ // src/scheduled-tasks.ts
93
+ var VALID_TASK_TYPES = [
94
+ "shell",
95
+ "http_request",
96
+ "github_copilot_cli"
97
+ ];
98
+ var VALID_SCHEDULE_TYPES = ["cron", "interval"];
99
+ var VALID_TERMINAL_STATUSES = ["success", "failure", "timeout", "cancelled"];
93
100
  function isRecord(value) {
94
101
  return typeof value === "object" && value !== null;
95
102
  }
96
- function isAgentSessionStatus(value) {
97
- return value === "idle" || value === "running" || value === "needs-input" || value === "completed" || value === "failed" || value === "aborted";
103
+ function isScheduledTaskType(value) {
104
+ return typeof value === "string" && VALID_TASK_TYPES.includes(value);
105
+ }
106
+ function isScheduledTask(value) {
107
+ if (!isRecord(value)) return false;
108
+ return typeof value.id === "string" && typeof value.name === "string" && typeof value.enabled === "boolean" && VALID_SCHEDULE_TYPES.includes(value.scheduleType) && typeof value.schedule === "string" && isScheduledTaskType(value.taskType) && isRecord(value.payload) && typeof value.createdAt === "string" && typeof value.updatedAt === "string";
109
+ }
110
+ function isTaskExecutionLog(value) {
111
+ if (!isRecord(value)) return false;
112
+ return typeof value.id === "string" && typeof value.taskId === "string" && typeof value.taskName === "string" && typeof value.startedAt === "string" && typeof value.finishedAt === "string" && VALID_TERMINAL_STATUSES.includes(
113
+ value.status
114
+ );
115
+ }
116
+ function isSchedulerStatus(value) {
117
+ if (!isRecord(value)) return false;
118
+ return typeof value.running === "boolean" && typeof value.tasksRegistered === "number" && typeof value.workspacePath === "string";
98
119
  }
99
- function isOpenCodeServerState(value) {
100
- return isRecord(value) && typeof value.available === "boolean" && typeof value.running === "boolean" && typeof value.healthy === "boolean" && typeof value.installUrl === "string" && (value.pid === void 0 || typeof value.pid === "number") && (value.port === void 0 || typeof value.port === "number");
120
+ function isTaskExecuteResult(value) {
121
+ return isRecord(value) && typeof value.executionId === "string" && value.accepted === true;
101
122
  }
102
- function isMetadata(value) {
103
- return value === void 0 || isRecord(value);
123
+ function isTaskCancelResult(value) {
124
+ return isRecord(value) && typeof value.executionId === "string" && typeof value.cancelled === "boolean";
104
125
  }
105
- function isOpenCodeSessionStatusEvent(value) {
106
- return isRecord(value) && value.type === "status" && isAgentSessionStatus(value.status) && isMetadata(value.metadata);
126
+ function isTaskListRunningResult(value) {
127
+ return isRecord(value) && Array.isArray(value.executions);
107
128
  }
108
- function isOpenCodeSessionProgressEvent(value) {
109
- return isRecord(value) && value.type === "progress" && typeof value.text === "string" && isMetadata(value.metadata);
129
+ function isTaskStartedEventParams(value) {
130
+ return isRecord(value) && typeof value.executionId === "string" && typeof value.taskId === "string" && typeof value.startedAt === "string";
110
131
  }
111
- function isOpenCodeSessionMessageEvent(value) {
112
- return isRecord(value) && value.type === "message" && typeof value.text === "string" && isMetadata(value.metadata);
132
+ function isTaskOutputEventParams(value) {
133
+ return isRecord(value) && typeof value.executionId === "string" && (value.stream === "stdout" || value.stream === "stderr") && typeof value.data === "string";
113
134
  }
114
- function isOpenCodeSessionErrorEvent(value) {
115
- return isRecord(value) && value.type === "error" && typeof value.text === "string" && isMetadata(value.metadata);
135
+ function isTaskCompletedEventParams(value) {
136
+ return isRecord(value) && typeof value.executionId === "string" && isTaskExecutionLog(value.log);
116
137
  }
117
- function isOpenCodeSessionCompletedEvent(value) {
118
- return isRecord(value) && value.type === "completed" && isMetadata(value.metadata);
138
+ function isTaskFailedEventParams(value) {
139
+ return isRecord(value) && typeof value.executionId === "string" && (value.status === "failure" || value.status === "timeout") && (value.reason === "error" || value.reason === "timeout") && isTaskExecutionLog(value.log);
119
140
  }
120
- function isOpenCodeAgentEvent(value) {
121
- return isOpenCodeSessionStatusEvent(value) || isOpenCodeSessionProgressEvent(value) || isOpenCodeSessionMessageEvent(value) || isOpenCodeSessionErrorEvent(value) || isOpenCodeSessionCompletedEvent(value);
141
+ function isTaskCancelledEventParams(value) {
142
+ return isRecord(value) && typeof value.executionId === "string" && isTaskExecutionLog(value.log);
143
+ }
144
+ function isAgentSessionStatus(value) {
145
+ return value === "idle" || value === "running" || value === "needs-input" || value === "completed" || value === "failed" || value === "aborted";
122
146
  }
123
147
 
124
148
  // src/bridge.ts
125
- var SERVICEME_PROTOCOL_VERSION = 1;
149
+ var SERVICEME_PROTOCOL_VERSION = 2;
126
150
  function isRecord2(value) {
127
151
  return typeof value === "object" && value !== null;
128
152
  }
153
+ function isValidProtocolVersion(value) {
154
+ return typeof value === "number" && Number.isInteger(value) && value >= 1 && value <= SERVICEME_PROTOCOL_VERSION;
155
+ }
129
156
  function isBridgeCapabilities(value) {
130
- return isRecord2(value) && value.bridge === true && value.opencode === 1 && value.json === 1 && value.env === 1;
157
+ return isRecord2(value) && value.bridge === true && value.json === 1 && value.env === 1 && (value.tasks === void 0 || value.tasks === 1);
131
158
  }
132
159
  var BRIDGE_METHODS = [
133
160
  "system.hello",
134
161
  "system.ping",
135
162
  "system.shutdown",
136
- "opencode.server.ensure",
137
- "opencode.server.status",
138
- "opencode.session.create",
139
- "opencode.session.prompt",
140
- "opencode.session.status",
141
- "opencode.session.abort",
142
- "opencode.session.dispose"
163
+ "task.execute",
164
+ "task.cancel",
165
+ "task.list-running"
166
+ ];
167
+ var BRIDGE_EVENTS = [
168
+ "task.started",
169
+ "task.output",
170
+ "task.completed",
171
+ "task.failed",
172
+ "task.cancelled"
143
173
  ];
144
- var BRIDGE_EVENTS = ["opencode.session.event"];
145
174
  function isSystemHelloResult(value) {
146
- return isRecord2(value) && typeof value.cliVersion === "string" && value.protocolVersion === SERVICEME_PROTOCOL_VERSION && isBridgeCapabilities(value.capabilities) && typeof value.pid === "number";
175
+ return isRecord2(value) && typeof value.cliVersion === "string" && isValidProtocolVersion(value.protocolVersion) && isBridgeCapabilities(value.capabilities) && typeof value.pid === "number";
147
176
  }
148
177
  function isSystemPingResult(value) {
149
178
  return isRecord2(value) && typeof value.now === "string";
@@ -151,21 +180,6 @@ function isSystemPingResult(value) {
151
180
  function isSystemShutdownResult(value) {
152
181
  return isRecord2(value) && value.shuttingDown === true;
153
182
  }
154
- function isOpenCodeSessionCreateResult(value) {
155
- return isRecord2(value) && typeof value.sessionId === "string" && (value.title === void 0 || typeof value.title === "string") && isAgentSessionStatus(value.status);
156
- }
157
- function isOpenCodeSessionPromptResult(value) {
158
- return isRecord2(value) && value.accepted === true && typeof value.sessionId === "string" && typeof value.promptId === "string";
159
- }
160
- function isOpenCodeSessionStatusResult(value) {
161
- return isRecord2(value) && typeof value.sessionId === "string" && isAgentSessionStatus(value.status);
162
- }
163
- function isOpenCodeSessionAbortResult(value) {
164
- return isRecord2(value) && value.aborted === true && typeof value.sessionId === "string";
165
- }
166
- function isOpenCodeSessionDisposeResult(value) {
167
- return isRecord2(value) && value.disposed === true && typeof value.sessionId === "string";
168
- }
169
183
  function getBridgeResultValidator(method) {
170
184
  switch (method) {
171
185
  case "system.hello":
@@ -174,30 +188,28 @@ function getBridgeResultValidator(method) {
174
188
  return isSystemPingResult;
175
189
  case "system.shutdown":
176
190
  return isSystemShutdownResult;
177
- case "opencode.server.ensure":
178
- case "opencode.server.status":
179
- return isOpenCodeServerState;
180
- case "opencode.session.create":
181
- return isOpenCodeSessionCreateResult;
182
- case "opencode.session.prompt":
183
- return isOpenCodeSessionPromptResult;
184
- case "opencode.session.status":
185
- return isOpenCodeSessionStatusResult;
186
- case "opencode.session.abort":
187
- return isOpenCodeSessionAbortResult;
188
- case "opencode.session.dispose":
189
- return isOpenCodeSessionDisposeResult;
191
+ case "task.execute":
192
+ return isTaskExecuteResult;
193
+ case "task.cancel":
194
+ return isTaskCancelResult;
195
+ case "task.list-running":
196
+ return isTaskListRunningResult;
190
197
  default:
191
198
  return void 0;
192
199
  }
193
200
  }
194
- function isOpenCodeSessionEventParams(value) {
195
- return isRecord2(value) && typeof value.sessionId === "string" && (value.promptId === void 0 || typeof value.promptId === "string") && isOpenCodeAgentEvent(value.payload);
196
- }
197
201
  function getBridgeEventParamsValidator(event) {
198
202
  switch (event) {
199
- case "opencode.session.event":
200
- return isOpenCodeSessionEventParams;
203
+ case "task.started":
204
+ return isTaskStartedEventParams;
205
+ case "task.output":
206
+ return isTaskOutputEventParams;
207
+ case "task.completed":
208
+ return isTaskCompletedEventParams;
209
+ case "task.failed":
210
+ return isTaskFailedEventParams;
211
+ case "task.cancelled":
212
+ return isTaskCancelledEventParams;
201
213
  default:
202
214
  return void 0;
203
215
  }
@@ -212,13 +224,13 @@ function isBridgeRequest(value) {
212
224
  if (!isRecord2(value)) {
213
225
  return false;
214
226
  }
215
- return value.protocolVersion === SERVICEME_PROTOCOL_VERSION && value.kind === "request" && typeof value.id === "string" && isBridgeMethod(value.method) && "params" in value;
227
+ return isValidProtocolVersion(value.protocolVersion) && value.kind === "request" && typeof value.id === "string" && isBridgeMethod(value.method) && "params" in value;
216
228
  }
217
229
  function isBridgeResponse(value) {
218
230
  if (!isRecord2(value)) {
219
231
  return false;
220
232
  }
221
- if (value.protocolVersion !== SERVICEME_PROTOCOL_VERSION || value.kind !== "response" || typeof value.id !== "string" || typeof value.ok !== "boolean") {
233
+ if (!isValidProtocolVersion(value.protocolVersion) || value.kind !== "response" || typeof value.id !== "string" || typeof value.ok !== "boolean") {
222
234
  return false;
223
235
  }
224
236
  if (value.ok) {
@@ -230,7 +242,7 @@ function isBridgeEvent(value) {
230
242
  if (!isRecord2(value)) {
231
243
  return false;
232
244
  }
233
- return value.protocolVersion === SERVICEME_PROTOCOL_VERSION && value.kind === "event" && isBridgeEventName(value.event) && "params" in value;
245
+ return isValidProtocolVersion(value.protocolVersion) && value.kind === "event" && isBridgeEventName(value.event) && "params" in value;
234
246
  }
235
247
 
236
248
  // src/cli.ts
@@ -265,6 +277,14 @@ function isCliEnvelope(value) {
265
277
  return "error" in value;
266
278
  }
267
279
 
280
+ // src/copilot.ts
281
+ var COPILOT_ERROR_CODES = {
282
+ NOT_INSTALLED: "copilot_not_installed",
283
+ AUTH_REQUIRED: "copilot_auth_required",
284
+ EXECUTION_FAILED: "copilot_execution_failed",
285
+ TIMEOUT: "copilot_timeout"
286
+ };
287
+
268
288
  // src/env.ts
269
289
  var KNOWN_ENVIRONMENT_TOOLS = [
270
290
  "git",
@@ -292,7 +312,9 @@ function isEnvironmentCheckResult(value) {
292
312
  if (!isRecord4(value)) {
293
313
  return false;
294
314
  }
295
- return KNOWN_ENVIRONMENT_TOOLS.every((tool) => isToolCheckResult(value[tool]));
315
+ return KNOWN_ENVIRONMENT_TOOLS.every(
316
+ (tool) => isToolCheckResult(value[tool])
317
+ );
296
318
  }
297
319
 
298
320
  // src/errors.ts
@@ -308,8 +330,22 @@ var SERVICEME_ERROR_CODES = [
308
330
  "opencode_request_failed",
309
331
  "opencode_backend_not_running",
310
332
  "opencode_session_not_found",
333
+ "copilot_not_installed",
334
+ "copilot_auth_required",
335
+ "copilot_execution_failed",
336
+ "copilot_timeout",
311
337
  "json_invalid_input",
312
338
  "env_tool_not_found",
339
+ "task_not_found",
340
+ "task_already_exists",
341
+ "invalid_schedule",
342
+ "invalid_payload",
343
+ "confirmation_required",
344
+ "workspace_not_found",
345
+ "daemon_not_running",
346
+ "executor_timeout",
347
+ "executor_error",
348
+ "task_already_running",
313
349
  "internal_error"
314
350
  ];
315
351
  var RETRYABLE_ERROR_CODES = /* @__PURE__ */ new Set([
@@ -318,6 +354,8 @@ var RETRYABLE_ERROR_CODES = /* @__PURE__ */ new Set([
318
354
  "opencode_startup_timeout",
319
355
  "opencode_request_failed",
320
356
  "opencode_backend_not_running",
357
+ "copilot_timeout",
358
+ "executor_timeout",
321
359
  "internal_error"
322
360
  ]);
323
361
  function isRecord5(value) {
@@ -393,7 +431,11 @@ function normalizeServicemeError(error, fallbackCode = "internal_error") {
393
431
  }
394
432
 
395
433
  // src/image.ts
396
- var SERVICEME_IMAGE_FORMATS = ["jpeg", "png", "webp"];
434
+ var SERVICEME_IMAGE_FORMATS = [
435
+ "jpeg",
436
+ "png",
437
+ "webp"
438
+ ];
397
439
  function isRecord6(value) {
398
440
  return typeof value === "object" && value !== null;
399
441
  }
@@ -430,7 +472,10 @@ var JSON_SORT_ALGORITHMS = [
430
472
  "values",
431
473
  "type"
432
474
  ];
433
- var JSON_SORT_ORDERS = ["asc", "desc"];
475
+ var JSON_SORT_ORDERS = [
476
+ "asc",
477
+ "desc"
478
+ ];
434
479
  var DEFAULT_JSON_SORT_OPTIONS = {
435
480
  sortOrder: "asc",
436
481
  sortAlgo: "default"
@@ -456,10 +501,10 @@ function isJsonOutputResult(value) {
456
501
 
457
502
  // src/metadata.ts
458
503
  var SERVICEME_CLI_NAME = "serviceme";
459
- var SERVICEME_CLI_VERSION = "0.0.5";
504
+ var SERVICEME_CLI_VERSION = "0.1.2";
460
505
  var SERVICEME_CLI_CAPABILITIES = {
461
506
  bridge: true,
462
- opencode: 1,
507
+ tasks: 1,
463
508
  json: 1,
464
509
  env: 1,
465
510
  image: 1,
@@ -498,6 +543,7 @@ function isServiceMeProjectExtractTemplateResult(value) {
498
543
  0 && (module.exports = {
499
544
  BRIDGE_EVENTS,
500
545
  BRIDGE_METHODS,
546
+ COPILOT_ERROR_CODES,
501
547
  DEFAULT_JSON_SORT_OPTIONS,
502
548
  JSON_SORT_ALGORITHMS,
503
549
  JSON_SORT_ORDERS,
@@ -530,20 +576,10 @@ function isServiceMeProjectExtractTemplateResult(value) {
530
576
  isJsonSortOrder,
531
577
  isJsonValidationResult,
532
578
  isKnownEnvironmentTool,
533
- isOpenCodeAgentEvent,
534
- isOpenCodeServerState,
535
- isOpenCodeSessionAbortResult,
536
- isOpenCodeSessionCompletedEvent,
537
- isOpenCodeSessionCreateResult,
538
- isOpenCodeSessionDisposeResult,
539
- isOpenCodeSessionErrorEvent,
540
- isOpenCodeSessionEventParams,
541
- isOpenCodeSessionMessageEvent,
542
- isOpenCodeSessionProgressEvent,
543
- isOpenCodeSessionPromptResult,
544
- isOpenCodeSessionStatusEvent,
545
- isOpenCodeSessionStatusResult,
546
579
  isRetryableErrorCode,
580
+ isScheduledTask,
581
+ isScheduledTaskType,
582
+ isSchedulerStatus,
547
583
  isServiceMeImageCompressOptions,
548
584
  isServiceMeImageCompressResult,
549
585
  isServiceMeImageFormat,
@@ -560,6 +596,15 @@ function isServiceMeProjectExtractTemplateResult(value) {
560
596
  isSystemHelloResult,
561
597
  isSystemPingResult,
562
598
  isSystemShutdownResult,
599
+ isTaskCancelResult,
600
+ isTaskCancelledEventParams,
601
+ isTaskCompletedEventParams,
602
+ isTaskExecuteResult,
603
+ isTaskExecutionLog,
604
+ isTaskFailedEventParams,
605
+ isTaskListRunningResult,
606
+ isTaskOutputEventParams,
607
+ isTaskStartedEventParams,
563
608
  isToolCheckResult,
564
609
  normalizeServicemeError
565
610
  });