@serviceme/devtools-protocol 0.0.6 → 0.1.3

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