@agentdock/wire 0.0.71 → 0.0.72

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 (110) hide show
  1. package/dist/activityPreferences.d.ts.map +1 -0
  2. package/dist/activityPreferences.js +2 -1
  3. package/dist/activityPreferences.js.map +1 -0
  4. package/dist/agentCapabilities.d.ts.map +1 -0
  5. package/dist/agentCapabilities.js +199 -1
  6. package/dist/agentCapabilities.js.map +1 -0
  7. package/dist/agentCommonEnv.d.ts.map +1 -0
  8. package/dist/agentCommonEnv.js +20 -1
  9. package/dist/agentCommonEnv.js.map +1 -0
  10. package/dist/agentInstallGuide.d.ts.map +1 -0
  11. package/dist/agentInstallGuide.js +81 -1
  12. package/dist/agentInstallGuide.js.map +1 -0
  13. package/dist/bgTask.d.ts.map +1 -0
  14. package/dist/bgTask.js +128 -1
  15. package/dist/bgTask.js.map +1 -0
  16. package/dist/checkpointSchemas.d.ts.map +1 -0
  17. package/dist/checkpointSchemas.js +46 -1
  18. package/dist/checkpointSchemas.js.map +1 -0
  19. package/dist/controlLevel.d.ts.map +1 -0
  20. package/dist/controlLevel.js +11 -1
  21. package/dist/controlLevel.js.map +1 -0
  22. package/dist/edition.d.ts.map +1 -0
  23. package/dist/edition.js +13 -1
  24. package/dist/edition.js.map +1 -0
  25. package/dist/envelope.d.ts.map +1 -0
  26. package/dist/envelope.js +77 -1
  27. package/dist/envelope.js.map +1 -0
  28. package/dist/errorMessage.d.ts.map +1 -0
  29. package/dist/errorMessage.js +6 -1
  30. package/dist/errorMessage.js.map +1 -0
  31. package/dist/events.d.ts.map +1 -0
  32. package/dist/events.js +107 -1
  33. package/dist/events.js.map +1 -0
  34. package/dist/features.d.ts.map +1 -0
  35. package/dist/features.js +123 -1
  36. package/dist/features.js.map +1 -0
  37. package/dist/feedback.d.ts.map +1 -0
  38. package/dist/feedback.js +61 -1
  39. package/dist/feedback.js.map +1 -0
  40. package/dist/fileWhitelist.d.ts.map +1 -0
  41. package/dist/fileWhitelist.js +189 -1
  42. package/dist/fileWhitelist.js.map +1 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +73 -1
  45. package/dist/index.js.map +1 -0
  46. package/dist/interactionEvents.d.ts.map +1 -0
  47. package/dist/interactionEvents.js +111 -1
  48. package/dist/interactionEvents.js.map +1 -0
  49. package/dist/legacyProtocol.d.ts.map +1 -0
  50. package/dist/legacyProtocol.js +30 -1
  51. package/dist/legacyProtocol.js.map +1 -0
  52. package/dist/license.d.ts.map +1 -0
  53. package/dist/license.js +28 -1
  54. package/dist/license.js.map +1 -0
  55. package/dist/machine.d.ts.map +1 -0
  56. package/dist/machine.js +66 -1
  57. package/dist/machine.js.map +1 -0
  58. package/dist/messageMeta.d.ts.map +1 -0
  59. package/dist/messageMeta.js +60 -1
  60. package/dist/messageMeta.js.map +1 -0
  61. package/dist/messages.d.ts.map +1 -0
  62. package/dist/messages.js +35 -1
  63. package/dist/messages.js.map +1 -0
  64. package/dist/ops.d.ts.map +1 -0
  65. package/dist/ops.js +74 -1
  66. package/dist/ops.js.map +1 -0
  67. package/dist/pairing.d.ts.map +1 -0
  68. package/dist/pairing.js +150 -1
  69. package/dist/pairing.js.map +1 -0
  70. package/dist/permissionSubject.d.ts.map +1 -0
  71. package/dist/permissionSubject.js +68 -1
  72. package/dist/permissionSubject.js.map +1 -0
  73. package/dist/protocol.d.ts.map +1 -0
  74. package/dist/protocol.js +7 -1
  75. package/dist/protocol.js.map +1 -0
  76. package/dist/rpc.d.ts.map +1 -0
  77. package/dist/rpc.js +269 -1
  78. package/dist/rpc.js.map +1 -0
  79. package/dist/scheduledTasks.d.ts.map +1 -0
  80. package/dist/scheduledTasks.js +188 -1
  81. package/dist/scheduledTasks.js.map +1 -0
  82. package/dist/semver.d.ts.map +1 -0
  83. package/dist/semver.js +60 -1
  84. package/dist/semver.js.map +1 -0
  85. package/dist/sessionResult.d.ts.map +1 -0
  86. package/dist/sessionResult.js +23 -1
  87. package/dist/sessionResult.js.map +1 -0
  88. package/dist/socketEvents.d.ts.map +1 -0
  89. package/dist/socketEvents.js +55 -1
  90. package/dist/socketEvents.js.map +1 -0
  91. package/dist/spawnError.d.ts.map +1 -0
  92. package/dist/spawnError.js +31 -1
  93. package/dist/spawnError.js.map +1 -0
  94. package/dist/stats.d.ts.map +1 -0
  95. package/dist/stats.js +117 -1
  96. package/dist/stats.js.map +1 -0
  97. package/dist/sync.d.ts.map +1 -0
  98. package/dist/sync.js +99 -1
  99. package/dist/sync.js.map +1 -0
  100. package/dist/taskResult.d.ts.map +1 -0
  101. package/dist/taskResult.js +113 -1
  102. package/dist/taskResult.js.map +1 -0
  103. package/dist/telemetry.d.ts +9 -9
  104. package/dist/telemetry.d.ts.map +1 -0
  105. package/dist/telemetry.js +115 -1
  106. package/dist/telemetry.js.map +1 -0
  107. package/dist/utils.d.ts.map +1 -0
  108. package/dist/utils.js +2 -1
  109. package/dist/utils.js.map +1 -0
  110. package/package.json +1 -1
package/dist/sync.js CHANGED
@@ -1 +1,99 @@
1
- "use strict";import{z as e}from"zod";import{SessionMessageSchema as t}from"./messages.js";import{PlatformSchema as o}from"./machine.js";export const VersionedEncryptedValueSchema=e.object({version:e.number(),value:e.string()}),VersionedNullableEncryptedValueSchema=e.object({version:e.number(),value:e.string().nullable()}),VersionedMachineEncryptedValueSchema=e.object({version:e.number(),value:e.string()}),UpdateNewMessageBodySchema=e.object({t:e.literal("new-message"),sid:e.string(),message:t}),UpdateSessionBodySchema=e.object({t:e.literal("update-session"),id:e.string(),tag:e.string().optional(),displayName:e.string().nullish(),machineId:e.string().optional(),metadata:VersionedEncryptedValueSchema.nullish(),agentState:VersionedNullableEncryptedValueSchema.nullish(),active:e.boolean().optional(),source:e.enum(["managed","history","scheduled"]).optional(),dataEncryptionKey:e.string().nullish()}),UpdateMachineBodySchema=e.object({t:e.literal("update-machine"),machineId:e.string(),metadata:VersionedMachineEncryptedValueSchema.nullish(),daemonState:VersionedMachineEncryptedValueSchema.nullish(),active:e.boolean().optional(),activeAt:e.number().optional(),hostname:e.string().optional(),platform:o.optional(),arch:e.string().optional(),daemonVersion:e.string().optional(),displayName:e.string().optional(),availableAgents:e.array(e.string()).optional(),supportedMethods:e.array(e.string()).optional(),disconnectReason:e.enum(["normal","upgrade-required"]).optional(),upgradeStatus:e.enum(["idle","preflight","downloading","ready","switching","failed"]).optional(),upgradeError:e.string().optional(),superseded:e.boolean().optional(),derivationVersion:e.number().int().min(0).optional(),autoUpgradeDaemon:e.boolean().optional(),agentModels:e.record(e.string(),e.array(e.object({id:e.string(),displayName:e.string(),isDefault:e.boolean(),hidden:e.boolean(),source:e.enum(["builtin","acp","env","custom"]).optional().default("acp")}))).optional(),agentModes:e.record(e.string(),e.array(e.object({id:e.string(),label:e.string()}))).optional()}),UpdateSessionResetBodySchema=e.object({t:e.literal("session-reset"),sessionId:e.string()}),UpdateDeleteSessionBodySchema=e.object({t:e.literal("delete-session"),id:e.string()}),CoreUpdateBodySchema=e.discriminatedUnion("t",[UpdateNewMessageBodySchema,UpdateSessionBodySchema,UpdateMachineBodySchema,UpdateSessionResetBodySchema,UpdateDeleteSessionBodySchema]),CoreUpdateContainerSchema=e.object({id:e.string(),seq:e.number(),body:CoreUpdateBodySchema,createdAt:e.number()});
1
+ /**
2
+ * Sync update protocol.
3
+ *
4
+ * Defines CoreUpdateContainer and its body types for real-time state sync.
5
+ */
6
+ import { z } from 'zod';
7
+ import { SessionMessageSchema } from './messages.js';
8
+ import { PlatformSchema } from './machine.js';
9
+ // ── Versioned encrypted values ──────────────────────────────────────
10
+ export const VersionedEncryptedValueSchema = z.object({
11
+ version: z.number(),
12
+ value: z.string(),
13
+ });
14
+ export const VersionedNullableEncryptedValueSchema = z.object({
15
+ version: z.number(),
16
+ value: z.string().nullable(),
17
+ });
18
+ export const VersionedMachineEncryptedValueSchema = z.object({
19
+ version: z.number(),
20
+ value: z.string(),
21
+ });
22
+ // ── Update body types ───────────────────────────────────────────────
23
+ export const UpdateNewMessageBodySchema = z.object({
24
+ t: z.literal('new-message'),
25
+ sid: z.string(),
26
+ message: SessionMessageSchema,
27
+ });
28
+ export const UpdateSessionBodySchema = z.object({
29
+ t: z.literal('update-session'),
30
+ id: z.string(),
31
+ tag: z.string().optional(),
32
+ displayName: z.string().nullish(),
33
+ machineId: z.string().optional(),
34
+ metadata: VersionedEncryptedValueSchema.nullish(),
35
+ agentState: VersionedNullableEncryptedValueSchema.nullish(),
36
+ active: z.boolean().optional(),
37
+ /** Session source — promoted from 'history' to 'managed' on resume. */
38
+ source: z.enum(['managed', 'history', 'scheduled']).optional(),
39
+ /** Base64-encoded wrapped DEK — only present on session-create broadcast. */
40
+ dataEncryptionKey: z.string().nullish(),
41
+ });
42
+ export const UpdateMachineBodySchema = z.object({
43
+ t: z.literal('update-machine'),
44
+ machineId: z.string(),
45
+ metadata: VersionedMachineEncryptedValueSchema.nullish(),
46
+ daemonState: VersionedMachineEncryptedValueSchema.nullish(),
47
+ active: z.boolean().optional(),
48
+ activeAt: z.number().optional(),
49
+ hostname: z.string().optional(),
50
+ platform: PlatformSchema.optional(),
51
+ arch: z.string().optional(),
52
+ daemonVersion: z.string().optional(),
53
+ displayName: z.string().optional(),
54
+ availableAgents: z.array(z.string()).optional(),
55
+ supportedMethods: z.array(z.string()).optional(),
56
+ disconnectReason: z.enum(['normal', 'upgrade-required']).optional(),
57
+ upgradeStatus: z
58
+ .enum(['idle', 'preflight', 'downloading', 'ready', 'switching', 'failed'])
59
+ .optional(),
60
+ upgradeError: z.string().optional(),
61
+ superseded: z.boolean().optional(),
62
+ derivationVersion: z.number().int().min(0).optional(),
63
+ autoUpgradeDaemon: z.boolean().optional(),
64
+ agentModels: z
65
+ .record(z.string(), z.array(z.object({
66
+ id: z.string(),
67
+ displayName: z.string(),
68
+ isDefault: z.boolean(),
69
+ hidden: z.boolean(),
70
+ source: z.enum(['builtin', 'acp', 'env', 'custom']).optional().default('acp'),
71
+ })))
72
+ .optional(),
73
+ agentModes: z
74
+ .record(z.string(), z.array(z.object({ id: z.string(), label: z.string() })))
75
+ .optional(),
76
+ });
77
+ export const UpdateSessionResetBodySchema = z.object({
78
+ t: z.literal('session-reset'),
79
+ sessionId: z.string(),
80
+ });
81
+ export const UpdateDeleteSessionBodySchema = z.object({
82
+ t: z.literal('delete-session'),
83
+ id: z.string(),
84
+ });
85
+ export const CoreUpdateBodySchema = z.discriminatedUnion('t', [
86
+ UpdateNewMessageBodySchema,
87
+ UpdateSessionBodySchema,
88
+ UpdateMachineBodySchema,
89
+ UpdateSessionResetBodySchema,
90
+ UpdateDeleteSessionBodySchema,
91
+ ]);
92
+ // ── Update container ────────────────────────────────────────────────
93
+ export const CoreUpdateContainerSchema = z.object({
94
+ id: z.string(),
95
+ seq: z.number(),
96
+ body: CoreUpdateBodySchema,
97
+ createdAt: z.number(),
98
+ });
99
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskResult.d.ts","sourceRoot":"","sources":["../src/taskResult.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAExE,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IACvD,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAgDA;AAyBD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAezE"}
@@ -1 +1,113 @@
1
- "use strict";import{TaskResultSchema as i}from"./scheduledTasks.js";export const TASK_RESULT_PREFIX="[TASK_RESULT]";export function serializeTaskResult(t){return TASK_RESULT_PREFIX+JSON.stringify(t)}export function parseTaskResultPayload(t){if(t.startsWith(TASK_RESULT_PREFIX)){const e=t.slice(TASK_RESULT_PREFIX.length);try{const n=i.parse(JSON.parse(e));return{result:n,terminalFailure:n.status==="failed"}}catch{return{result:{status:"failed",reason:"malformed task-result payload",unstructured:!0},terminalFailure:!1}}}return t.startsWith("[FAILED]")?{result:{status:"failed",reason:t.slice(8).trim()},terminalFailure:!0}:t.startsWith("[UNKNOWN]")?{result:{status:"failed",reason:"no completion marker after reminder",unstructured:!0},terminalFailure:!1}:{result:{status:"done",summary:t.slice(0,4e3),unstructured:!0},terminalFailure:!1}}const o=/<task-result\b[^>]*>([\s\S]*?)(?:<\/task-result>|$)/i,l=/status\s*=\s*['"]?(done|failed)['"]?/i,c={headline:200,summary:4e3,outcome:8e3,reason:2e3,suggestion:2e3};function r(t,e){const a=t.match(new RegExp(`<${e}\\b[^>]*>([\\s\\S]*?)</${e}>`,"i"))?.[1]?.trim();if(!a)return;const u=c[e];return u?a.slice(0,u):a}export function extractTaskResultFromText(t){const e=t.match(o);if(!e)return null;const u=e[0].slice(0,e[0].indexOf(">")+1).match(l)?.[1]?.toLowerCase()==="failed"?"failed":"done",s=e[1]??"";return{status:u,headline:r(s,"headline"),summary:r(s,"summary"),outcome:r(s,"outcome"),reason:r(s,"reason"),suggestion:r(s,"suggestion")}}
1
+ /**
2
+ * Task delivery protocol — serialize/parse the structured <task-result>
3
+ * agents emit at the end of a scheduled task.
4
+ *
5
+ * Transport reuses the existing summary string channel (sendSessionSummary),
6
+ * so this module is deliberately string-in/string-out with graceful
7
+ * degradation for legacy daemons and malformed agent output.
8
+ */
9
+ import { TaskResultSchema } from './scheduledTasks.js';
10
+ export const TASK_RESULT_PREFIX = '[TASK_RESULT]';
11
+ /** daemon → server: structured result to a prefixed JSON payload. */
12
+ export function serializeTaskResult(result) {
13
+ return TASK_RESULT_PREFIX + JSON.stringify(result);
14
+ }
15
+ /**
16
+ * server ← daemon: parse a summary-channel payload into a TaskResult plus a
17
+ * flag telling the caller whether to treat this as a terminal failure.
18
+ * Never throws — always degrades to an unstructured result.
19
+ */
20
+ export function parseTaskResultPayload(payload) {
21
+ // 1. Structured payload
22
+ if (payload.startsWith(TASK_RESULT_PREFIX)) {
23
+ const json = payload.slice(TASK_RESULT_PREFIX.length);
24
+ try {
25
+ const parsed = TaskResultSchema.parse(JSON.parse(json));
26
+ return { result: parsed, terminalFailure: parsed.status === 'failed' };
27
+ }
28
+ catch {
29
+ // Malformed structured payload — the protocol frame is corrupt, not a
30
+ // successful result. Surface as failed rather than showing JSON garbage
31
+ // to the user as if it were the deliverable.
32
+ return {
33
+ result: {
34
+ status: 'failed',
35
+ reason: 'malformed task-result payload',
36
+ unstructured: true,
37
+ },
38
+ terminalFailure: false,
39
+ };
40
+ }
41
+ }
42
+ // 2. Legacy [FAILED] prefix
43
+ if (payload.startsWith('[FAILED]')) {
44
+ return {
45
+ result: { status: 'failed', reason: payload.slice('[FAILED]'.length).trim() },
46
+ terminalFailure: true,
47
+ };
48
+ }
49
+ // 3. Legacy [UNKNOWN] prefix — the old daemon uses this when the agent did not
50
+ // emit a completion marker (neither [TASK_DONE] nor [TASK_FAILED]). This is
51
+ // NOT a terminal failure — the agent may have completed the work but used a
52
+ // different marker format (e.g. lowercase [task_done]). Let the idle timer
53
+ // complete the execution normally; resultData carries the ambiguity.
54
+ if (payload.startsWith('[UNKNOWN]')) {
55
+ return {
56
+ result: {
57
+ status: 'failed',
58
+ reason: 'no completion marker after reminder',
59
+ unstructured: true,
60
+ },
61
+ terminalFailure: false,
62
+ };
63
+ }
64
+ // 4. Bare text from an old daemon — treat as a completed, unstructured result.
65
+ return {
66
+ result: { status: 'done', summary: payload.slice(0, 4000), unstructured: true },
67
+ terminalFailure: false,
68
+ };
69
+ }
70
+ const BLOCK_RE = /<task-result\b[^>]*>([\s\S]*?)(?:<\/task-result>|$)/i;
71
+ const STATUS_RE = /status\s*=\s*['"]?(done|failed)['"]?/i;
72
+ // Per-field length caps mirroring TaskResultSchema's .max() bounds. Truncating
73
+ // on the extraction side keeps the deliverable intact — otherwise a single
74
+ // over-length field would make the downstream schema parse throw and the whole
75
+ // structured result would be discarded as "malformed".
76
+ const FIELD_MAX = {
77
+ headline: 200,
78
+ summary: 4000,
79
+ outcome: 8000,
80
+ reason: 2000,
81
+ suggestion: 2000,
82
+ };
83
+ function tag(body, name) {
84
+ const m = body.match(new RegExp(`<${name}\\b[^>]*>([\\s\\S]*?)</${name}>`, 'i'));
85
+ const v = m?.[1]?.trim();
86
+ if (!v)
87
+ return undefined;
88
+ const max = FIELD_MAX[name];
89
+ return max ? v.slice(0, max) : v;
90
+ }
91
+ /**
92
+ * daemon: tolerantly extract a <task-result> block from raw agent text.
93
+ * Returns null when no block is present (caller decides how to degrade).
94
+ * Handles: single/double quotes, missing closing tag, surrounding markdown.
95
+ */
96
+ export function extractTaskResultFromText(text) {
97
+ const block = text.match(BLOCK_RE);
98
+ if (!block)
99
+ return null;
100
+ const openTag = block[0].slice(0, block[0].indexOf('>') + 1);
101
+ const statusMatch = openTag.match(STATUS_RE);
102
+ const status = statusMatch?.[1]?.toLowerCase() === 'failed' ? 'failed' : 'done';
103
+ const body = block[1] ?? '';
104
+ return {
105
+ status,
106
+ headline: tag(body, 'headline'),
107
+ summary: tag(body, 'summary'),
108
+ outcome: tag(body, 'outcome'),
109
+ reason: tag(body, 'reason'),
110
+ suggestion: tag(body, 'suggestion'),
111
+ };
112
+ }
113
+ //# sourceMappingURL=taskResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskResult.js","sourceRoot":"","sources":["../src/taskResult.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
- export declare const TelemetryEventTypeSchema: z.ZodEnum<["scanner.format_mismatch", "scanner.parse_error", "scanner.version_unknown", "session.start_failed", "session.crash", "rpc.call_failed", "upgrade.failed", "protocol.incompatible", "daemon.log", "daemon.crash", "daemon.health"]>;
2
+ export declare const TelemetryEventTypeSchema: z.ZodEnum<["scanner.format_mismatch", "scanner.parse_error", "scanner.version_unknown", "session.start_failed", "session.crash", "rpc.call_failed", "upgrade.failed", "upgrade.skipped", "protocol.incompatible", "daemon.log", "daemon.crash", "daemon.health"]>;
3
3
  export type TelemetryEventType = z.infer<typeof TelemetryEventTypeSchema>;
4
4
  export declare function sanitizeContext(type: TelemetryEventType, ctx: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
5
5
  export declare const TelemetryEventSchema: z.ZodObject<{
6
- type: z.ZodEnum<["scanner.format_mismatch", "scanner.parse_error", "scanner.version_unknown", "session.start_failed", "session.crash", "rpc.call_failed", "upgrade.failed", "protocol.incompatible", "daemon.log", "daemon.crash", "daemon.health"]>;
6
+ type: z.ZodEnum<["scanner.format_mismatch", "scanner.parse_error", "scanner.version_unknown", "session.start_failed", "session.crash", "rpc.call_failed", "upgrade.failed", "upgrade.skipped", "protocol.incompatible", "daemon.log", "daemon.crash", "daemon.health"]>;
7
7
  timestamp: z.ZodString;
8
8
  agentType: z.ZodOptional<z.ZodString>;
9
9
  agentVersion: z.ZodOptional<z.ZodString>;
@@ -14,7 +14,7 @@ export declare const TelemetryEventSchema: z.ZodObject<{
14
14
  }, "strip", z.ZodTypeAny, {
15
15
  code: string;
16
16
  message: string;
17
- type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
17
+ type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "upgrade.skipped" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
18
18
  daemonVersion: string;
19
19
  timestamp: string;
20
20
  agentType?: string | undefined;
@@ -23,7 +23,7 @@ export declare const TelemetryEventSchema: z.ZodObject<{
23
23
  }, {
24
24
  code: string;
25
25
  message: string;
26
- type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
26
+ type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "upgrade.skipped" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
27
27
  daemonVersion: string;
28
28
  timestamp: string;
29
29
  agentType?: string | undefined;
@@ -34,7 +34,7 @@ export type TelemetryEvent = z.infer<typeof TelemetryEventSchema>;
34
34
  export declare const TelemetryReportPayloadSchema: z.ZodObject<{
35
35
  machineId: z.ZodString;
36
36
  events: z.ZodArray<z.ZodObject<{
37
- type: z.ZodEnum<["scanner.format_mismatch", "scanner.parse_error", "scanner.version_unknown", "session.start_failed", "session.crash", "rpc.call_failed", "upgrade.failed", "protocol.incompatible", "daemon.log", "daemon.crash", "daemon.health"]>;
37
+ type: z.ZodEnum<["scanner.format_mismatch", "scanner.parse_error", "scanner.version_unknown", "session.start_failed", "session.crash", "rpc.call_failed", "upgrade.failed", "upgrade.skipped", "protocol.incompatible", "daemon.log", "daemon.crash", "daemon.health"]>;
38
38
  timestamp: z.ZodString;
39
39
  agentType: z.ZodOptional<z.ZodString>;
40
40
  agentVersion: z.ZodOptional<z.ZodString>;
@@ -45,7 +45,7 @@ export declare const TelemetryReportPayloadSchema: z.ZodObject<{
45
45
  }, "strip", z.ZodTypeAny, {
46
46
  code: string;
47
47
  message: string;
48
- type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
48
+ type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "upgrade.skipped" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
49
49
  daemonVersion: string;
50
50
  timestamp: string;
51
51
  agentType?: string | undefined;
@@ -54,7 +54,7 @@ export declare const TelemetryReportPayloadSchema: z.ZodObject<{
54
54
  }, {
55
55
  code: string;
56
56
  message: string;
57
- type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
57
+ type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "upgrade.skipped" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
58
58
  daemonVersion: string;
59
59
  timestamp: string;
60
60
  agentType?: string | undefined;
@@ -66,7 +66,7 @@ export declare const TelemetryReportPayloadSchema: z.ZodObject<{
66
66
  events: {
67
67
  code: string;
68
68
  message: string;
69
- type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
69
+ type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "upgrade.skipped" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
70
70
  daemonVersion: string;
71
71
  timestamp: string;
72
72
  agentType?: string | undefined;
@@ -78,7 +78,7 @@ export declare const TelemetryReportPayloadSchema: z.ZodObject<{
78
78
  events: {
79
79
  code: string;
80
80
  message: string;
81
- type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
81
+ type: "scanner.format_mismatch" | "scanner.parse_error" | "scanner.version_unknown" | "session.start_failed" | "session.crash" | "rpc.call_failed" | "upgrade.failed" | "upgrade.skipped" | "protocol.incompatible" | "daemon.log" | "daemon.crash" | "daemon.health";
82
82
  daemonVersion: string;
83
83
  timestamp: string;
84
84
  agentType?: string | undefined;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,wBAAwB,mQAanC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAqE1E,wBAAgB,eAAe,CAC7B,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAoBrC;AAID,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC"}
package/dist/telemetry.js CHANGED
@@ -1 +1,115 @@
1
- "use strict";import{z as e}from"zod";export const TelemetryEventTypeSchema=e.enum(["scanner.format_mismatch","scanner.parse_error","scanner.version_unknown","session.start_failed","session.crash","rpc.call_failed","upgrade.failed","protocol.incompatible","daemon.log","daemon.crash","daemon.health"]);const c={"scanner.format_mismatch":["filePath","totalLines","parsedLines","errorCount","unknownLines","samples"],"scanner.parse_error":["filePath","totalLines","errorCount","error","lineNumber"],"scanner.version_unknown":["detectedVersion","supportedRange"],"session.start_failed":["cwd","agentBinary","exitCode","stderr"],"session.crash":["exitCode","signal","stderr","agentType","sessionId","pid","durationMs","platform","arch","nodeVersion","totalMemoryMB","freeMemoryMB","cpuCores","shell","concurrentSessions"],"rpc.call_failed":["method","error"],"upgrade.failed":["fromVersion","toVersion","stage","error"],"protocol.incompatible":["clientVersion","serverVersion","minRequired"],"daemon.log":["module","hostname","platform","arch","stack"],"daemon.crash":["crashType","hostname","platform","arch","stack"],"daemon.health":["stateFileSize","sessionFilesTracked","statsDays","statsMessages","uptimeMinutes","memoryMB","platform","arch","agentTypes","activeClients"]},d=/\b(?:\d{1,3}\.){3}\d{1,3}\b|[\w.+-]+@[\w.-]+\.\w+|\b(?:Bearer|token|sk-|api[_-]?key)\s*[:=]?\s*\S+/gi;function i(r){if(typeof r=="string")return r.replace(d,"[REDACTED]");if(Array.isArray(r))return r.map(i);if(typeof r=="number"||typeof r=="boolean"||r===null)return r}export function sanitizeContext(r,t){if(!t)return;const o=c[r];if(!o)return;const n={};for(const s of o)if(s in t){const a=i(t[s]);a!==void 0&&(n[s]=a)}return typeof n.stderr=="string"&&n.stderr.length>500&&(n.stderr=n.stderr.slice(0,500)),Object.keys(n).length>0?n:void 0}export const TelemetryEventSchema=e.object({type:TelemetryEventTypeSchema,timestamp:e.string(),agentType:e.string().optional(),agentVersion:e.string().optional(),daemonVersion:e.string(),code:e.string(),message:e.string(),context:e.record(e.unknown()).optional()}),TelemetryReportPayloadSchema=e.object({machineId:e.string(),events:e.array(TelemetryEventSchema).max(100)});
1
+ import { z } from 'zod';
2
+ // ── Telemetry Event Types ──────────────────────────────────
3
+ export const TelemetryEventTypeSchema = z.enum([
4
+ 'scanner.format_mismatch',
5
+ 'scanner.parse_error',
6
+ 'scanner.version_unknown',
7
+ 'session.start_failed',
8
+ 'session.crash',
9
+ 'rpc.call_failed',
10
+ 'upgrade.failed',
11
+ 'upgrade.skipped',
12
+ 'protocol.incompatible',
13
+ 'daemon.log',
14
+ 'daemon.crash',
15
+ 'daemon.health',
16
+ ]);
17
+ // ── Context Allowlist (per event type) ─────────────────────
18
+ const CONTEXT_ALLOWLIST = {
19
+ 'scanner.format_mismatch': [
20
+ 'filePath',
21
+ 'totalLines',
22
+ 'parsedLines',
23
+ 'errorCount',
24
+ 'unknownLines',
25
+ 'samples',
26
+ ],
27
+ 'scanner.parse_error': ['filePath', 'totalLines', 'errorCount', 'error', 'lineNumber'],
28
+ 'scanner.version_unknown': ['detectedVersion', 'supportedRange'],
29
+ 'session.start_failed': ['cwd', 'agentBinary', 'exitCode', 'stderr'],
30
+ 'session.crash': [
31
+ 'exitCode',
32
+ 'signal',
33
+ 'stderr',
34
+ 'agentType',
35
+ 'sessionId',
36
+ 'pid',
37
+ 'durationMs',
38
+ 'platform',
39
+ 'arch',
40
+ 'nodeVersion',
41
+ 'totalMemoryMB',
42
+ 'freeMemoryMB',
43
+ 'cpuCores',
44
+ 'shell',
45
+ 'concurrentSessions',
46
+ ],
47
+ 'rpc.call_failed': ['method', 'error'],
48
+ 'upgrade.failed': ['fromVersion', 'toVersion', 'stage', 'error'],
49
+ 'upgrade.skipped': ['fromVersion', 'toVersion', 'activeSessions', 'reason'],
50
+ 'protocol.incompatible': ['clientVersion', 'serverVersion', 'minRequired'],
51
+ 'daemon.log': ['module', 'hostname', 'platform', 'arch', 'stack'],
52
+ 'daemon.crash': ['crashType', 'hostname', 'platform', 'arch', 'stack'],
53
+ 'daemon.health': [
54
+ 'stateFileSize',
55
+ 'sessionFilesTracked',
56
+ 'statsDays',
57
+ 'statsMessages',
58
+ 'uptimeMinutes',
59
+ 'memoryMB',
60
+ 'platform',
61
+ 'arch',
62
+ 'agentTypes',
63
+ 'activeClients',
64
+ ],
65
+ };
66
+ const SENSITIVE_PATTERN = /\b(?:\d{1,3}\.){3}\d{1,3}\b|[\w.+-]+@[\w.-]+\.\w+|\b(?:Bearer|token|sk-|api[_-]?key)\s*[:=]?\s*\S+/gi;
67
+ function sanitizeValue(val) {
68
+ if (typeof val === 'string') {
69
+ return val.replace(SENSITIVE_PATTERN, '[REDACTED]');
70
+ }
71
+ if (Array.isArray(val)) {
72
+ return val.map(sanitizeValue);
73
+ }
74
+ if (typeof val === 'number' || typeof val === 'boolean' || val === null) {
75
+ return val;
76
+ }
77
+ return undefined;
78
+ }
79
+ export function sanitizeContext(type, ctx) {
80
+ if (!ctx)
81
+ return undefined;
82
+ const allowed = CONTEXT_ALLOWLIST[type];
83
+ if (!allowed)
84
+ return undefined;
85
+ const result = {};
86
+ for (const key of allowed) {
87
+ if (key in ctx) {
88
+ const sanitized = sanitizeValue(ctx[key]);
89
+ if (sanitized !== undefined) {
90
+ result[key] = sanitized;
91
+ }
92
+ }
93
+ }
94
+ if (typeof result['stderr'] === 'string' && result['stderr'].length > 500) {
95
+ result['stderr'] = result['stderr'].slice(0, 500);
96
+ }
97
+ return Object.keys(result).length > 0 ? result : undefined;
98
+ }
99
+ // ── Telemetry Event Schema ─────────────────────────────────
100
+ export const TelemetryEventSchema = z.object({
101
+ type: TelemetryEventTypeSchema,
102
+ timestamp: z.string(),
103
+ agentType: z.string().optional(),
104
+ agentVersion: z.string().optional(),
105
+ daemonVersion: z.string(),
106
+ code: z.string(),
107
+ message: z.string(),
108
+ context: z.record(z.unknown()).optional(),
109
+ });
110
+ // ── Batch Report Payload ───────────────────────────────────
111
+ export const TelemetryReportPayloadSchema = z.object({
112
+ machineId: z.string(),
113
+ events: z.array(TelemetryEventSchema).max(100),
114
+ });
115
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/utils.js CHANGED
@@ -1 +1,2 @@
1
- "use strict";export{createId}from"@paralleldrive/cuid2";
1
+ export { createId } from '@paralleldrive/cuid2';
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentdock/wire",
3
- "version": "0.0.71",
3
+ "version": "0.0.72",
4
4
  "description": "Protocol definitions for AgentDock — Zod schemas, message formats, RPC types",
5
5
  "license": "UNLICENSED",
6
6
  "author": "CCPark",