@on-mission/sdk 0.1.3 → 0.1.8
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/chunk-N26TYEUP.js +50 -0
- package/dist/chunk-N26TYEUP.js.map +1 -0
- package/dist/debug-log-SHNBLZWL.js +9 -0
- package/dist/debug-log-SHNBLZWL.js.map +1 -0
- package/dist/index.d.ts +863 -15
- package/dist/index.js +15731 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
- package/dist/api.d.ts +0 -20
- package/dist/api.d.ts.map +0 -1
- package/dist/api.js +0 -39
- package/dist/api.js.map +0 -1
- package/dist/auth.d.ts +0 -65
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -45
- package/dist/auth.js.map +0 -1
- package/dist/config.d.ts +0 -39
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -28
- package/dist/config.js.map +0 -1
- package/dist/context.d.ts +0 -24
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -22
- package/dist/context.js.map +0 -1
- package/dist/events.d.ts +0 -62
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -30
- package/dist/events.js.map +0 -1
- package/dist/http-server.d.ts +0 -51
- package/dist/http-server.d.ts.map +0 -1
- package/dist/http-server.js +0 -163
- package/dist/http-server.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/ingress.d.ts +0 -133
- package/dist/ingress.d.ts.map +0 -1
- package/dist/ingress.js +0 -89
- package/dist/ingress.js.map +0 -1
- package/dist/logging.d.ts +0 -62
- package/dist/logging.d.ts.map +0 -1
- package/dist/logging.js +0 -163
- package/dist/logging.js.map +0 -1
- package/dist/sdk.d.ts +0 -119
- package/dist/sdk.d.ts.map +0 -1
- package/dist/sdk.js +0 -335
- package/dist/sdk.js.map +0 -1
- package/dist/tool-registry.d.ts +0 -29
- package/dist/tool-registry.d.ts.map +0 -1
- package/dist/tool-registry.js +0 -37
- package/dist/tool-registry.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/http-server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,sBAAsB,EACtB,QAAQ,EACT,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC1D,YAAY,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,UAAU,EACX,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACxC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/ingress.d.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ingress Module
|
|
3
|
-
*
|
|
4
|
-
* Handles inbound traffic from external services (webhooks, WebSocket streams).
|
|
5
|
-
* Skills register handlers per endpoint name; the HTTP server routes traffic
|
|
6
|
-
* to them.
|
|
7
|
-
*
|
|
8
|
-
* Traffic flow (HTTP-native, no WebSocket control plane):
|
|
9
|
-
*
|
|
10
|
-
* Tool calls from Mission API:
|
|
11
|
-
* Mission API → Daytona Standard Preview URL → HTTP server → tool handler
|
|
12
|
-
*
|
|
13
|
-
* Webhooks from external services:
|
|
14
|
-
* External service → Daytona Signed Preview URL → HTTP server → ingress handler
|
|
15
|
-
*
|
|
16
|
-
* WebSocket streams (e.g., Twilio media):
|
|
17
|
-
* External service → Daytona Signed Preview URL → HTTP server → stream handler
|
|
18
|
-
*
|
|
19
|
-
* The HTTP server (started by mission.connect()) dispatches to the registered
|
|
20
|
-
* handler and sends the response back as a standard HTTP response.
|
|
21
|
-
*
|
|
22
|
-
* For WebSocket endpoints: event-based model (connect, message, disconnect).
|
|
23
|
-
* WebSocket support depends on Daytona Preview URL proxy supporting upgrades.
|
|
24
|
-
*
|
|
25
|
-
* Endpoint names are chosen by the skill author at registration time.
|
|
26
|
-
* There is no need to pre-declare them in mission.json — the SDK registers
|
|
27
|
-
* them dynamically and reports them to the control plane at ready().
|
|
28
|
-
*
|
|
29
|
-
* See docs/technical-designs/skill-architecture.md §4.4.
|
|
30
|
-
* See docs/technical-designs/daytona-sandbox-runtime.md §2-3.
|
|
31
|
-
*/
|
|
32
|
-
import type { ApiClient } from './api';
|
|
33
|
-
export type IngressRequest = {
|
|
34
|
-
/** HTTP method (GET, POST, etc.). */
|
|
35
|
-
method: string;
|
|
36
|
-
/** Request path (relative to the ingress endpoint). */
|
|
37
|
-
path: string;
|
|
38
|
-
/** Request headers (lowercased keys). */
|
|
39
|
-
headers: Record<string, string>;
|
|
40
|
-
/** Raw request body as a string. */
|
|
41
|
-
body: string;
|
|
42
|
-
/** Parsed query parameters. */
|
|
43
|
-
query: Record<string, string>;
|
|
44
|
-
};
|
|
45
|
-
export type IngressResponse = {
|
|
46
|
-
/** HTTP status code. */
|
|
47
|
-
status: number;
|
|
48
|
-
/** Response headers. */
|
|
49
|
-
headers?: Record<string, string>;
|
|
50
|
-
/** Response body. */
|
|
51
|
-
body?: string;
|
|
52
|
-
};
|
|
53
|
-
export type IngressHandler = (request: IngressRequest) => Promise<IngressResponse>;
|
|
54
|
-
export type IngressStreamEvents = {
|
|
55
|
-
/** Called when a new WebSocket connection is established. */
|
|
56
|
-
onConnect: (streamId: string, metadata: Record<string, string>) => void;
|
|
57
|
-
/** Called when a message is received on the WebSocket. */
|
|
58
|
-
onMessage: (streamId: string, data: string) => void;
|
|
59
|
-
/** Called when the WebSocket disconnects. */
|
|
60
|
-
onDisconnect: (streamId: string) => void;
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* Result from requesting a public ingress URL.
|
|
64
|
-
* The URL is a Daytona Signed Preview URL with a configurable TTL.
|
|
65
|
-
* The skill is responsible for monitoring expiry and re-requesting.
|
|
66
|
-
*/
|
|
67
|
-
export type IngressUrl = {
|
|
68
|
-
/** The public URL to register with external services. */
|
|
69
|
-
url: string;
|
|
70
|
-
/** ISO 8601 timestamp when this URL expires. */
|
|
71
|
-
expiresAt: string;
|
|
72
|
-
};
|
|
73
|
-
export type IngressModule = {
|
|
74
|
-
/**
|
|
75
|
-
* Register a handler for an HTTP ingress endpoint.
|
|
76
|
-
* The endpoint name is chosen by the skill author.
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* ```ts
|
|
80
|
-
* mission.ingress.on('webhook', async (request) => {
|
|
81
|
-
* const payload = JSON.parse(request.body)
|
|
82
|
-
* // process webhook...
|
|
83
|
-
* return { status: 200 }
|
|
84
|
-
* })
|
|
85
|
-
* ```
|
|
86
|
-
*/
|
|
87
|
-
on: (endpointName: string, handler: IngressHandler) => void;
|
|
88
|
-
/**
|
|
89
|
-
* Register handlers for a WebSocket ingress endpoint.
|
|
90
|
-
* The endpoint name is chosen by the skill author.
|
|
91
|
-
*
|
|
92
|
-
* @example
|
|
93
|
-
* ```ts
|
|
94
|
-
* mission.ingress.onStream('media', {
|
|
95
|
-
* onConnect: (streamId, meta) => { startSession(streamId) },
|
|
96
|
-
* onMessage: (streamId, data) => { processAudio(streamId, data) },
|
|
97
|
-
* onDisconnect: (streamId) => { endSession(streamId) }
|
|
98
|
-
* })
|
|
99
|
-
* ```
|
|
100
|
-
*/
|
|
101
|
-
onStream: (endpointName: string, handlers: IngressStreamEvents) => void;
|
|
102
|
-
/**
|
|
103
|
-
* Get a public URL for a named ingress endpoint.
|
|
104
|
-
*
|
|
105
|
-
* The control plane generates a Daytona Signed Preview URL with a
|
|
106
|
-
* configurable TTL. The skill is responsible for:
|
|
107
|
-
* 1. Registering this URL with the external service.
|
|
108
|
-
* 2. Monitoring `expiresAt` and calling this again before expiry.
|
|
109
|
-
* 3. Re-registering the new URL with the external service.
|
|
110
|
-
*
|
|
111
|
-
* On sandbox restart, skill processes restart and naturally
|
|
112
|
-
* re-register during their startup sequence.
|
|
113
|
-
*
|
|
114
|
-
* @example
|
|
115
|
-
* ```ts
|
|
116
|
-
* const { url, expiresAt } = await mission.ingress.getPublicUrl('webhook')
|
|
117
|
-
* await twilio.incomingPhoneNumbers(sid).update({ voiceUrl: url })
|
|
118
|
-
* ```
|
|
119
|
-
*/
|
|
120
|
-
getPublicUrl: (endpointName: string) => Promise<IngressUrl>;
|
|
121
|
-
};
|
|
122
|
-
export type IngressRegistry = IngressModule & {
|
|
123
|
-
/** Dispatch an HTTP request to the registered handler. */
|
|
124
|
-
dispatch: (endpointName: string, request: IngressRequest) => Promise<IngressResponse>;
|
|
125
|
-
/** Dispatch WebSocket events to the registered stream handlers. */
|
|
126
|
-
dispatchStreamEvent: (endpointName: string, event: 'connect' | 'message' | 'disconnect', streamId: string, data?: string, metadata?: Record<string, string>) => void;
|
|
127
|
-
/** Get all registered HTTP endpoint names. */
|
|
128
|
-
getHttpEndpointNames: () => string[];
|
|
129
|
-
/** Get all registered stream endpoint names. */
|
|
130
|
-
getStreamEndpointNames: () => string[];
|
|
131
|
-
};
|
|
132
|
-
export declare function createIngressRegistry(api: ApiClient): IngressRegistry;
|
|
133
|
-
//# sourceMappingURL=ingress.d.ts.map
|
package/dist/ingress.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingress.d.ts","sourceRoot":"","sources":["../src/ingress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,MAAM,MAAM,cAAc,GAAG;IAC3B,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,eAAe,CAAC,CAAA;AAI7B,MAAM,MAAM,mBAAmB,GAAG;IAChC,6DAA6D;IAC7D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IACvE,0DAA0D;IAC1D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,6CAA6C;IAC7C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CACzC,CAAA;AAID;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAA;IACX,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;;;;;;;;OAYG;IACH,EAAE,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IAE3D;;;;;;;;;;;;OAYG;IACH,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAEvE;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CAC5D,CAAA;AAID,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG;IAC5C,0DAA0D;IAC1D,QAAQ,EAAE,CACR,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,eAAe,CAAC,CAAA;IAC7B,mEAAmE;IACnE,mBAAmB,EAAE,CACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,EAC3C,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,IAAI,CAAA;IACT,8CAA8C;IAC9C,oBAAoB,EAAE,MAAM,MAAM,EAAE,CAAA;IACpC,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,MAAM,EAAE,CAAA;CACvC,CAAA;AAID,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe,CA+ErE"}
|
package/dist/ingress.js
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ingress Module
|
|
3
|
-
*
|
|
4
|
-
* Handles inbound traffic from external services (webhooks, WebSocket streams).
|
|
5
|
-
* Skills register handlers per endpoint name; the HTTP server routes traffic
|
|
6
|
-
* to them.
|
|
7
|
-
*
|
|
8
|
-
* Traffic flow (HTTP-native, no WebSocket control plane):
|
|
9
|
-
*
|
|
10
|
-
* Tool calls from Mission API:
|
|
11
|
-
* Mission API → Daytona Standard Preview URL → HTTP server → tool handler
|
|
12
|
-
*
|
|
13
|
-
* Webhooks from external services:
|
|
14
|
-
* External service → Daytona Signed Preview URL → HTTP server → ingress handler
|
|
15
|
-
*
|
|
16
|
-
* WebSocket streams (e.g., Twilio media):
|
|
17
|
-
* External service → Daytona Signed Preview URL → HTTP server → stream handler
|
|
18
|
-
*
|
|
19
|
-
* The HTTP server (started by mission.connect()) dispatches to the registered
|
|
20
|
-
* handler and sends the response back as a standard HTTP response.
|
|
21
|
-
*
|
|
22
|
-
* For WebSocket endpoints: event-based model (connect, message, disconnect).
|
|
23
|
-
* WebSocket support depends on Daytona Preview URL proxy supporting upgrades.
|
|
24
|
-
*
|
|
25
|
-
* Endpoint names are chosen by the skill author at registration time.
|
|
26
|
-
* There is no need to pre-declare them in mission.json — the SDK registers
|
|
27
|
-
* them dynamically and reports them to the control plane at ready().
|
|
28
|
-
*
|
|
29
|
-
* See docs/technical-designs/skill-architecture.md §4.4.
|
|
30
|
-
* See docs/technical-designs/daytona-sandbox-runtime.md §2-3.
|
|
31
|
-
*/
|
|
32
|
-
// ─── Factory ─────────────────────────────────────────────────────────────────
|
|
33
|
-
export function createIngressRegistry(api) {
|
|
34
|
-
const httpHandlers = new Map();
|
|
35
|
-
const streamHandlers = new Map();
|
|
36
|
-
return {
|
|
37
|
-
on(endpointName, handler) {
|
|
38
|
-
if (httpHandlers.has(endpointName)) {
|
|
39
|
-
console.error(`[Ingress] Warning: overwriting handler for '${endpointName}'`);
|
|
40
|
-
}
|
|
41
|
-
httpHandlers.set(endpointName, handler);
|
|
42
|
-
},
|
|
43
|
-
onStream(endpointName, handlers) {
|
|
44
|
-
if (streamHandlers.has(endpointName)) {
|
|
45
|
-
console.error(`[Ingress] Warning: overwriting stream handlers for '${endpointName}'`);
|
|
46
|
-
}
|
|
47
|
-
streamHandlers.set(endpointName, handlers);
|
|
48
|
-
},
|
|
49
|
-
getPublicUrl: async (endpointName) => {
|
|
50
|
-
const result = (await api.trpc.skill.getIngressUrl.query({
|
|
51
|
-
name: endpointName
|
|
52
|
-
}));
|
|
53
|
-
return result;
|
|
54
|
-
},
|
|
55
|
-
async dispatch(endpointName, request) {
|
|
56
|
-
const handler = httpHandlers.get(endpointName);
|
|
57
|
-
if (!handler) {
|
|
58
|
-
console.error(`[Ingress] No handler registered for endpoint '${endpointName}'`);
|
|
59
|
-
return { status: 404, body: `No handler for endpoint: ${endpointName}` };
|
|
60
|
-
}
|
|
61
|
-
return handler(request);
|
|
62
|
-
},
|
|
63
|
-
dispatchStreamEvent(endpointName, event, streamId, data, metadata) {
|
|
64
|
-
const handlers = streamHandlers.get(endpointName);
|
|
65
|
-
if (!handlers) {
|
|
66
|
-
console.error(`[Ingress] No stream handlers for endpoint '${endpointName}'`);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
switch (event) {
|
|
70
|
-
case 'connect':
|
|
71
|
-
handlers.onConnect(streamId, metadata ?? {});
|
|
72
|
-
break;
|
|
73
|
-
case 'message':
|
|
74
|
-
handlers.onMessage(streamId, data ?? '');
|
|
75
|
-
break;
|
|
76
|
-
case 'disconnect':
|
|
77
|
-
handlers.onDisconnect(streamId);
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
getHttpEndpointNames() {
|
|
82
|
-
return Array.from(httpHandlers.keys());
|
|
83
|
-
},
|
|
84
|
-
getStreamEndpointNames() {
|
|
85
|
-
return Array.from(streamHandlers.keys());
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=ingress.js.map
|
package/dist/ingress.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingress.js","sourceRoot":"","sources":["../src/ingress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAmIH,gFAAgF;AAEhF,MAAM,UAAU,qBAAqB,CAAC,GAAc;IAClD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAA;IACtD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA+B,CAAA;IAE7D,OAAO;QACL,EAAE,CAAC,YAAoB,EAAE,OAAuB;YAC9C,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CACX,+CAA+C,YAAY,GAAG,CAC/D,CAAA;YACH,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QACzC,CAAC;QAED,QAAQ,CAAC,YAAoB,EAAE,QAA6B;YAC1D,IAAI,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,KAAK,CACX,uDAAuD,YAAY,GAAG,CACvE,CAAA;YACH,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QAC5C,CAAC;QAED,YAAY,EAAE,KAAK,EAAE,YAAoB,EAAuB,EAAE;YAChE,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;gBACvD,IAAI,EAAE,YAAY;aACnB,CAAC,CAAe,CAAA;YACjB,OAAO,MAAM,CAAA;QACf,CAAC;QAED,KAAK,CAAC,QAAQ,CACZ,YAAoB,EACpB,OAAuB;YAEvB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CACX,iDAAiD,YAAY,GAAG,CACjE,CAAA;gBACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,4BAA4B,YAAY,EAAE,EAAE,CAAA;YAC1E,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;QACzB,CAAC;QAED,mBAAmB,CACjB,YAAoB,EACpB,KAA2C,EAC3C,QAAgB,EAChB,IAAa,EACb,QAAiC;YAEjC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CACX,8CAA8C,YAAY,GAAG,CAC9D,CAAA;gBACD,OAAM;YACR,CAAC;YACD,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,SAAS;oBACZ,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAA;oBAC5C,MAAK;gBACP,KAAK,SAAS;oBACZ,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;oBACxC,MAAK;gBACP,KAAK,YAAY;oBACf,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;oBAC/B,MAAK;YACT,CAAC;QACH,CAAC;QAED,oBAAoB;YAClB,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAA;QACxC,CAAC;QAED,sBAAsB;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1C,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/logging.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logging Module
|
|
3
|
-
*
|
|
4
|
-
* Provides two logging mechanisms:
|
|
5
|
-
*
|
|
6
|
-
* 1. Console capture — overrides the global `console` object so that
|
|
7
|
-
* skill authors who use `console.log()` naturally get their logs
|
|
8
|
-
* forwarded to the Mission logging pipeline.
|
|
9
|
-
*
|
|
10
|
-
* 2. Structured logger — `mission.log.info(message, data?)` for skills
|
|
11
|
-
* that want explicit, structured logging with context.
|
|
12
|
-
*
|
|
13
|
-
* Both paths feed into the same batched transport. Log entries are
|
|
14
|
-
* buffered in memory and flushed every few seconds (or on threshold)
|
|
15
|
-
* to the Gateway via `skill.ingestLogs`. The Gateway enriches entries
|
|
16
|
-
* with installation metadata and forwards them to Better Stack.
|
|
17
|
-
*
|
|
18
|
-
* Transport: skill.ingestLogs tRPC mutation (batched, fire-and-forget).
|
|
19
|
-
*/
|
|
20
|
-
import type { ApiClient } from './api';
|
|
21
|
-
type LogLevel = 'log' | 'error' | 'warn' | 'info' | 'debug';
|
|
22
|
-
export type LogEntry = {
|
|
23
|
-
level: LogLevel;
|
|
24
|
-
message: string;
|
|
25
|
-
data?: Record<string, unknown>;
|
|
26
|
-
timestamp: string;
|
|
27
|
-
};
|
|
28
|
-
export type LogModule = {
|
|
29
|
-
/** Log at info level. */
|
|
30
|
-
info: (message: string, data?: Record<string, unknown>) => void;
|
|
31
|
-
/** Log at warn level. */
|
|
32
|
-
warn: (message: string, data?: Record<string, unknown>) => void;
|
|
33
|
-
/** Log at error level. */
|
|
34
|
-
error: (message: string, data?: Record<string, unknown>) => void;
|
|
35
|
-
/** Log at debug level. */
|
|
36
|
-
debug: (message: string, data?: Record<string, unknown>) => void;
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Override the global console to capture and forward all log output.
|
|
40
|
-
*
|
|
41
|
-
* This should be called once during SDK initialization (in connect()).
|
|
42
|
-
* After this call, all console.log/error/warn/info/debug calls will
|
|
43
|
-
* be intercepted, enriched with metadata, and batched for shipping.
|
|
44
|
-
*/
|
|
45
|
-
export declare function installLogging(api: ApiClient): void;
|
|
46
|
-
/**
|
|
47
|
-
* Create a structured log module.
|
|
48
|
-
*
|
|
49
|
-
* Unlike the console override (which captures string output), this
|
|
50
|
-
* provides a typed API with structured data:
|
|
51
|
-
*
|
|
52
|
-
* mission.log.info('Searching inbox', { query, maxResults })
|
|
53
|
-
* mission.log.error('Gmail API failed', { status: 401 })
|
|
54
|
-
*/
|
|
55
|
-
export declare function createLogModule(): LogModule;
|
|
56
|
-
/**
|
|
57
|
-
* Flush any remaining logs and stop the timer.
|
|
58
|
-
* Called during graceful shutdown.
|
|
59
|
-
*/
|
|
60
|
-
export declare function flushAndStop(): Promise<void>;
|
|
61
|
-
export {};
|
|
62
|
-
//# sourceMappingURL=logging.d.ts.map
|
package/dist/logging.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,KAAK,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE3D,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,yBAAyB;IACzB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC/D,yBAAyB;IACzB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC/D,0BAA0B;IAC1B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAChE,0BAA0B;IAC1B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CACjE,CAAA;AA6DD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAiDnD;AAID;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,SAAS,CA4B3C;AAID;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD"}
|
package/dist/logging.js
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logging Module
|
|
3
|
-
*
|
|
4
|
-
* Provides two logging mechanisms:
|
|
5
|
-
*
|
|
6
|
-
* 1. Console capture — overrides the global `console` object so that
|
|
7
|
-
* skill authors who use `console.log()` naturally get their logs
|
|
8
|
-
* forwarded to the Mission logging pipeline.
|
|
9
|
-
*
|
|
10
|
-
* 2. Structured logger — `mission.log.info(message, data?)` for skills
|
|
11
|
-
* that want explicit, structured logging with context.
|
|
12
|
-
*
|
|
13
|
-
* Both paths feed into the same batched transport. Log entries are
|
|
14
|
-
* buffered in memory and flushed every few seconds (or on threshold)
|
|
15
|
-
* to the Gateway via `skill.ingestLogs`. The Gateway enriches entries
|
|
16
|
-
* with installation metadata and forwards them to Better Stack.
|
|
17
|
-
*
|
|
18
|
-
* Transport: skill.ingestLogs tRPC mutation (batched, fire-and-forget).
|
|
19
|
-
*/
|
|
20
|
-
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
21
|
-
/** How often to flush the log buffer (ms). */
|
|
22
|
-
const FLUSH_INTERVAL_MS = 5_000;
|
|
23
|
-
/** Max entries before triggering an early flush. */
|
|
24
|
-
const FLUSH_THRESHOLD = 50;
|
|
25
|
-
// ─── Buffer ──────────────────────────────────────────────────────────────────
|
|
26
|
-
let buffer = [];
|
|
27
|
-
let flushTimer = null;
|
|
28
|
-
let apiRef = null;
|
|
29
|
-
let originalConsole = null;
|
|
30
|
-
function getOriginal() {
|
|
31
|
-
// Return saved originals if we've installed console override,
|
|
32
|
-
// otherwise return the current console (pre-install).
|
|
33
|
-
return (originalConsole ?? {
|
|
34
|
-
log: console.log.bind(console),
|
|
35
|
-
error: console.error.bind(console),
|
|
36
|
-
warn: console.warn.bind(console),
|
|
37
|
-
info: console.info.bind(console),
|
|
38
|
-
debug: console.debug.bind(console)
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
function enqueue(entry) {
|
|
42
|
-
buffer.push(entry);
|
|
43
|
-
if (buffer.length >= FLUSH_THRESHOLD) {
|
|
44
|
-
void flush();
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
async function flush() {
|
|
48
|
-
if (buffer.length === 0 || !apiRef)
|
|
49
|
-
return;
|
|
50
|
-
const entries = buffer;
|
|
51
|
-
buffer = [];
|
|
52
|
-
try {
|
|
53
|
-
await apiRef.trpc.skill.ingestLogs.mutate({ entries });
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
getOriginal().error('[Logging] Flush failed:', err);
|
|
57
|
-
// Re-enqueue failed entries (drop if buffer is huge to avoid OOM)
|
|
58
|
-
if (buffer.length < 500) {
|
|
59
|
-
buffer.unshift(...entries);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// ─── Console Override ────────────────────────────────────────────────────────
|
|
64
|
-
/**
|
|
65
|
-
* Override the global console to capture and forward all log output.
|
|
66
|
-
*
|
|
67
|
-
* This should be called once during SDK initialization (in connect()).
|
|
68
|
-
* After this call, all console.log/error/warn/info/debug calls will
|
|
69
|
-
* be intercepted, enriched with metadata, and batched for shipping.
|
|
70
|
-
*/
|
|
71
|
-
export function installLogging(api) {
|
|
72
|
-
apiRef = api;
|
|
73
|
-
// Preserve original console methods
|
|
74
|
-
originalConsole = {
|
|
75
|
-
log: console.log.bind(console),
|
|
76
|
-
error: console.error.bind(console),
|
|
77
|
-
warn: console.warn.bind(console),
|
|
78
|
-
info: console.info.bind(console),
|
|
79
|
-
debug: console.debug.bind(console)
|
|
80
|
-
};
|
|
81
|
-
const levels = ['log', 'error', 'warn', 'info', 'debug'];
|
|
82
|
-
for (const level of levels) {
|
|
83
|
-
console[level] = (...args) => {
|
|
84
|
-
// 1. Still output to stdout/stderr for local visibility
|
|
85
|
-
originalConsole[level](...args);
|
|
86
|
-
// 2. Format the message
|
|
87
|
-
const message = args
|
|
88
|
-
.map(arg => {
|
|
89
|
-
if (typeof arg === 'string')
|
|
90
|
-
return arg;
|
|
91
|
-
if (arg instanceof Error)
|
|
92
|
-
return `${arg.name}: ${arg.message}`;
|
|
93
|
-
try {
|
|
94
|
-
return JSON.stringify(arg);
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
return String(arg);
|
|
98
|
-
}
|
|
99
|
-
})
|
|
100
|
-
.join(' ');
|
|
101
|
-
// 3. Enqueue for batched shipping
|
|
102
|
-
enqueue({
|
|
103
|
-
level,
|
|
104
|
-
message,
|
|
105
|
-
timestamp: new Date().toISOString()
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
// Start the flush timer
|
|
110
|
-
flushTimer = setInterval(() => {
|
|
111
|
-
void flush();
|
|
112
|
-
}, FLUSH_INTERVAL_MS);
|
|
113
|
-
if (flushTimer.unref) {
|
|
114
|
-
flushTimer.unref();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
// ─── Structured Logger ───────────────────────────────────────────────────────
|
|
118
|
-
/**
|
|
119
|
-
* Create a structured log module.
|
|
120
|
-
*
|
|
121
|
-
* Unlike the console override (which captures string output), this
|
|
122
|
-
* provides a typed API with structured data:
|
|
123
|
-
*
|
|
124
|
-
* mission.log.info('Searching inbox', { query, maxResults })
|
|
125
|
-
* mission.log.error('Gmail API failed', { status: 401 })
|
|
126
|
-
*/
|
|
127
|
-
export function createLogModule() {
|
|
128
|
-
const log = (level, message, data) => {
|
|
129
|
-
// Also output to local console for sandbox visibility
|
|
130
|
-
const orig = getOriginal();
|
|
131
|
-
if (data) {
|
|
132
|
-
orig[level](`[${level.toUpperCase()}]`, message, data);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
orig[level](`[${level.toUpperCase()}]`, message);
|
|
136
|
-
}
|
|
137
|
-
enqueue({
|
|
138
|
-
level,
|
|
139
|
-
message,
|
|
140
|
-
data,
|
|
141
|
-
timestamp: new Date().toISOString()
|
|
142
|
-
});
|
|
143
|
-
};
|
|
144
|
-
return {
|
|
145
|
-
info: (message, data) => log('info', message, data),
|
|
146
|
-
warn: (message, data) => log('warn', message, data),
|
|
147
|
-
error: (message, data) => log('error', message, data),
|
|
148
|
-
debug: (message, data) => log('debug', message, data)
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
// ─── Lifecycle ───────────────────────────────────────────────────────────────
|
|
152
|
-
/**
|
|
153
|
-
* Flush any remaining logs and stop the timer.
|
|
154
|
-
* Called during graceful shutdown.
|
|
155
|
-
*/
|
|
156
|
-
export async function flushAndStop() {
|
|
157
|
-
if (flushTimer) {
|
|
158
|
-
clearInterval(flushTimer);
|
|
159
|
-
flushTimer = null;
|
|
160
|
-
}
|
|
161
|
-
await flush();
|
|
162
|
-
}
|
|
163
|
-
//# sourceMappingURL=logging.js.map
|
package/dist/logging.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA8BH,gFAAgF;AAEhF,8CAA8C;AAC9C,MAAM,iBAAiB,GAAG,KAAK,CAAA;AAE/B,oDAAoD;AACpD,MAAM,eAAe,GAAG,EAAE,CAAA;AAE1B,gFAAgF;AAEhF,IAAI,MAAM,GAAe,EAAE,CAAA;AAC3B,IAAI,UAAU,GAA0C,IAAI,CAAA;AAC5D,IAAI,MAAM,GAAqB,IAAI,CAAA;AACnC,IAAI,eAAe,GAA2B,IAAI,CAAA;AAElD,SAAS,WAAW;IAClB,8DAA8D;IAC9D,sDAAsD;IACtD,OAAO,CACL,eAAe,IAAI;QACjB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;KACnC,CACF,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAe;IAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClB,IAAI,MAAM,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,KAAK,KAAK,EAAE,CAAA;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,KAAK;IAClB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM;QAAE,OAAM;IAE1C,MAAM,OAAO,GAAG,MAAM,CAAA;IACtB,MAAM,GAAG,EAAE,CAAA;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACxD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,WAAW,EAAE,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAA;QACnD,kEAAkE;QAClE,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAc;IAC3C,MAAM,GAAG,GAAG,CAAA;IAEZ,oCAAoC;IACpC,eAAe,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;KACnC,CAAA;IAED,MAAM,MAAM,GAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAEpE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YACtC,wDAAwD;YACxD,eAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;YAEhC,wBAAwB;YACxB,MAAM,OAAO,GAAG,IAAI;iBACjB,GAAG,CAAC,GAAG,CAAC,EAAE;gBACT,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,OAAO,GAAG,CAAA;gBACvC,IAAI,GAAG,YAAY,KAAK;oBAAE,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAA;gBAC9D,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;gBAC5B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CAAA;YAEZ,kCAAkC;YAClC,OAAO,CAAC;gBACN,KAAK;gBACL,OAAO;gBACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAA;QACJ,CAAC,CAAA;IACH,CAAC;IAED,wBAAwB;IACxB,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,KAAK,KAAK,EAAE,CAAA;IACd,CAAC,EAAE,iBAAiB,CAAC,CAAA;IAErB,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,UAAU,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,CACV,KAAe,EACf,OAAe,EACf,IAA8B,EACxB,EAAE;QACR,sDAAsD;QACtD,MAAM,IAAI,GAAG,WAAW,EAAE,CAAA;QAC1B,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;QAClD,CAAC;QAED,OAAO,CAAC;YACN,KAAK;YACL,OAAO;YACP,IAAI;YACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,IAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QACpD,IAAI,EAAE,CAAC,OAAO,EAAE,IAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QACpD,KAAK,EAAE,CAAC,OAAO,EAAE,IAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;QACtD,KAAK,EAAE,CAAC,OAAO,EAAE,IAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;KACvD,CAAA;AACH,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,CAAC,UAAU,CAAC,CAAA;QACzB,UAAU,GAAG,IAAI,CAAA;IACnB,CAAC;IACD,MAAM,KAAK,EAAE,CAAA;AACf,CAAC"}
|
package/dist/sdk.d.ts
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mission SDK — Main Entry
|
|
3
|
-
*
|
|
4
|
-
* Creates the SDK instance that a skill uses to interact with the
|
|
5
|
-
* Mission platform. Communication is HTTP-native:
|
|
6
|
-
*
|
|
7
|
-
* Outbound (Skill → Mission API):
|
|
8
|
-
* Standard REST calls via the API client.
|
|
9
|
-
*
|
|
10
|
-
* Inbound (Mission API → Skill):
|
|
11
|
-
* HTTP requests to the skill's HTTP server, exposed via
|
|
12
|
-
* Daytona Preview URLs.
|
|
13
|
-
*
|
|
14
|
-
* Lifecycle:
|
|
15
|
-
* 1. const mission = createMissionSDK() — create SDK (no connection yet)
|
|
16
|
-
* 2. await mission.connect() — start HTTP server, install logging
|
|
17
|
-
* 3. // auth, config, events are now usable
|
|
18
|
-
* 4. mission.tools.registerAll(handlers) — register tool handlers
|
|
19
|
-
* 5. mission.ingress.on('name', handler) — register ingress handlers
|
|
20
|
-
* 6. mission.onShutdown(() => cleanup()) — register shutdown hooks
|
|
21
|
-
* 7. await mission.ready() — signal readiness, accept traffic
|
|
22
|
-
*
|
|
23
|
-
* See docs/technical-designs/skill-architecture.md §4 and §6.
|
|
24
|
-
* See docs/technical-designs/daytona-sandbox-runtime.md.
|
|
25
|
-
*/
|
|
26
|
-
import { type AuthModule } from './auth';
|
|
27
|
-
import { type ConfigModule } from './config';
|
|
28
|
-
import { type SkillContext } from './context';
|
|
29
|
-
import { type EventsModule } from './events';
|
|
30
|
-
import { type IngressModule } from './ingress';
|
|
31
|
-
import { type LogModule } from './logging';
|
|
32
|
-
import { type ToolsModule } from './tool-registry';
|
|
33
|
-
export type MissionSDKOptions = {
|
|
34
|
-
/**
|
|
35
|
-
* Override the skill context instead of reading from env.
|
|
36
|
-
* Useful for testing or local development.
|
|
37
|
-
*/
|
|
38
|
-
context?: Partial<SkillContext>;
|
|
39
|
-
/**
|
|
40
|
-
* Override the skill HTTP server port. Normally read from
|
|
41
|
-
* MISSION_SKILL_PORT (assigned by the control plane).
|
|
42
|
-
* Must be in the Daytona Preview URL range (3000-9999).
|
|
43
|
-
*/
|
|
44
|
-
port?: number;
|
|
45
|
-
};
|
|
46
|
-
export type MissionSDK = {
|
|
47
|
-
/** The resolved skill context. */
|
|
48
|
-
context: SkillContext;
|
|
49
|
-
/** Get authentication credentials (user-provided secrets and/or OAuth tokens). */
|
|
50
|
-
auth: AuthModule;
|
|
51
|
-
/** Fetch per-installation configuration. */
|
|
52
|
-
config: ConfigModule;
|
|
53
|
-
/** Send messages to the agent about external events. */
|
|
54
|
-
events: EventsModule;
|
|
55
|
-
/** Register ingress handlers and discover public URLs. */
|
|
56
|
-
ingress: IngressModule;
|
|
57
|
-
/** Structured logger — logs are batched and shipped to the Mission platform. */
|
|
58
|
-
log: LogModule;
|
|
59
|
-
/** Register tool handlers that the platform can invoke. */
|
|
60
|
-
tools: ToolsModule;
|
|
61
|
-
/**
|
|
62
|
-
* Connect to the Mission platform.
|
|
63
|
-
*
|
|
64
|
-
* This starts the skill's HTTP server (for inbound tool calls and
|
|
65
|
-
* ingress traffic), installs the console override for structured
|
|
66
|
-
* logging, and begins the keep-alive heartbeat loop.
|
|
67
|
-
*
|
|
68
|
-
* After this call, `auth`, `config`, `events`, and `ingress.getPublicUrl`
|
|
69
|
-
* are usable.
|
|
70
|
-
*/
|
|
71
|
-
connect: () => Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* Signal readiness and start accepting tool calls and ingress traffic.
|
|
74
|
-
*
|
|
75
|
-
* Call this AFTER registering all tools and ingress handlers.
|
|
76
|
-
* The returned promise resolves when the process receives a shutdown
|
|
77
|
-
* signal (SIGTERM/SIGINT) and graceful shutdown completes.
|
|
78
|
-
*/
|
|
79
|
-
ready: () => Promise<void>;
|
|
80
|
-
/**
|
|
81
|
-
* Register a callback to run during graceful shutdown.
|
|
82
|
-
* Multiple handlers can be registered; they run in order.
|
|
83
|
-
*
|
|
84
|
-
* Shutdown is triggered by SIGTERM or SIGINT (standard container signals).
|
|
85
|
-
* The SDK stops the HTTP server, drains in-flight requests, runs
|
|
86
|
-
* shutdown handlers, then exits.
|
|
87
|
-
*
|
|
88
|
-
* @example
|
|
89
|
-
* ```ts
|
|
90
|
-
* mission.onShutdown(async () => {
|
|
91
|
-
* await database.close()
|
|
92
|
-
* await cache.flush()
|
|
93
|
-
* })
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
onShutdown: (handler: () => Promise<void> | void) => void;
|
|
97
|
-
};
|
|
98
|
-
/**
|
|
99
|
-
* Create a Mission SDK instance.
|
|
100
|
-
*
|
|
101
|
-
* @example
|
|
102
|
-
* ```ts
|
|
103
|
-
* import { createMissionSDK } from '@mission/sdk'
|
|
104
|
-
*
|
|
105
|
-
* const mission = createMissionSDK()
|
|
106
|
-
* await mission.connect()
|
|
107
|
-
*
|
|
108
|
-
* const auth = await mission.auth.get()
|
|
109
|
-
* const config = await mission.config.get<MyConfig>(defaults)
|
|
110
|
-
*
|
|
111
|
-
* mission.tools.registerAll(handlers)
|
|
112
|
-
* mission.ingress.on('webhook', handler)
|
|
113
|
-
* mission.onShutdown(() => cleanup())
|
|
114
|
-
*
|
|
115
|
-
* await mission.ready()
|
|
116
|
-
* ```
|
|
117
|
-
*/
|
|
118
|
-
export declare function createMissionSDK(options?: MissionSDKOptions): MissionSDK;
|
|
119
|
-
//# sourceMappingURL=sdk.d.ts.map
|
package/dist/sdk.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,KAAK,UAAU,EAAoB,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,UAAU,CAAA;AAChE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA;AAEhE,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,WAAW,CAAA;AAClB,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,WAAW,CAAA;AAClB,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAA;AAIxB,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC/B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,kCAAkC;IAClC,OAAO,EAAE,YAAY,CAAA;IACrB,kFAAkF;IAClF,IAAI,EAAE,UAAU,CAAA;IAChB,4CAA4C;IAC5C,MAAM,EAAE,YAAY,CAAA;IACpB,wDAAwD;IACxD,MAAM,EAAE,YAAY,CAAA;IACpB,0DAA0D;IAC1D,OAAO,EAAE,aAAa,CAAA;IACtB,gFAAgF;IAChF,GAAG,EAAE,SAAS,CAAA;IACd,2DAA2D;IAC3D,KAAK,EAAE,WAAW,CAAA;IAElB;;;;;;;;;OASG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAE5B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1B;;;;;;;;;;;;;;;OAeG;IACH,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;CAC1D,CAAA;AAaD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CA6TxE"}
|