cordisx 0.1.0-beta.17 → 0.1.0-beta.19
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/assets/feedback/feedback-manifest.schema.json +227 -0
- package/dist/assets/launcher/native-app-server-intermediary.mjs +63 -0
- package/dist/skills/cordisx-feedback/SKILL.md +47 -0
- package/dist/skills/cordisx-feedback/agents/openai.yaml +4 -0
- package/dist/skills/cordisx-feedback/version.json +4 -0
- package/dist/src/cli/feedback-command.d.ts +4 -0
- package/dist/src/cli/feedback-command.d.ts.map +1 -0
- package/dist/src/cli/feedback-command.js +57 -0
- package/dist/src/cli/feedback-command.js.map +1 -0
- package/dist/src/cli/parse.d.ts +21 -2
- package/dist/src/cli/parse.d.ts.map +1 -1
- package/dist/src/cli/parse.js +155 -0
- package/dist/src/cli/parse.js.map +1 -1
- package/dist/src/cli/run-command-dispatch.d.ts.map +1 -1
- package/dist/src/cli/run-command-dispatch.js +5 -0
- package/dist/src/cli/run-command-dispatch.js.map +1 -1
- package/dist/src/cli/run-support.d.ts +2 -1
- package/dist/src/cli/run-support.d.ts.map +1 -1
- package/dist/src/cli/run-support.js +11 -1
- package/dist/src/cli/run-support.js.map +1 -1
- package/dist/src/cli/supervisor-command.d.ts.map +1 -1
- package/dist/src/cli/supervisor-command.js +162 -62
- package/dist/src/cli/supervisor-command.js.map +1 -1
- package/dist/src/cli/supervisor-runtime.d.ts +3 -1
- package/dist/src/cli/supervisor-runtime.d.ts.map +1 -1
- package/dist/src/cli/supervisor-runtime.js +86 -11
- package/dist/src/cli/supervisor-runtime.js.map +1 -1
- package/dist/src/cli/supervisor-state.d.ts +26 -1
- package/dist/src/cli/supervisor-state.d.ts.map +1 -1
- package/dist/src/cli/supervisor-state.js +94 -16
- package/dist/src/cli/supervisor-state.js.map +1 -1
- package/dist/src/cli.js +6 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/feedback/archive.d.ts +13 -0
- package/dist/src/feedback/archive.d.ts.map +1 -0
- package/dist/src/feedback/archive.js +348 -0
- package/dist/src/feedback/archive.js.map +1 -0
- package/dist/src/feedback/collector.d.ts +5 -0
- package/dist/src/feedback/collector.d.ts.map +1 -0
- package/dist/src/feedback/collector.js +444 -0
- package/dist/src/feedback/collector.js.map +1 -0
- package/dist/src/feedback/contracts.d.ts +100 -0
- package/dist/src/feedback/contracts.d.ts.map +1 -0
- package/dist/src/feedback/contracts.js +3 -0
- package/dist/src/feedback/contracts.js.map +1 -0
- package/dist/src/feedback/redaction.d.ts +8 -0
- package/dist/src/feedback/redaction.d.ts.map +1 -0
- package/dist/src/feedback/redaction.js +41 -0
- package/dist/src/feedback/redaction.js.map +1 -0
- package/dist/src/launcher/builtin-skill.d.ts +1 -1
- package/dist/src/launcher/builtin-skill.d.ts.map +1 -1
- package/dist/src/launcher/builtin-skill.js +2 -0
- package/dist/src/launcher/builtin-skill.js.map +1 -1
- package/dist/src/launcher/cdp-installation-bootstrap.d.ts.map +1 -1
- package/dist/src/launcher/cdp-installation-bootstrap.js +30 -21
- package/dist/src/launcher/cdp-installation-bootstrap.js.map +1 -1
- package/dist/src/launcher/cdp-installation-support.d.ts +5 -1
- package/dist/src/launcher/cdp-installation-support.d.ts.map +1 -1
- package/dist/src/launcher/cdp-installation-support.js +15 -10
- package/dist/src/launcher/cdp-installation-support.js.map +1 -1
- package/dist/src/launcher/cdp.d.ts +1 -1
- package/dist/src/launcher/cdp.d.ts.map +1 -1
- package/dist/src/launcher/cdp.js +41 -7
- package/dist/src/launcher/cdp.js.map +1 -1
- package/dist/src/launcher/diagnostic-redaction.d.ts +3 -0
- package/dist/src/launcher/diagnostic-redaction.d.ts.map +1 -0
- package/dist/src/launcher/diagnostic-redaction.js +18 -0
- package/dist/src/launcher/diagnostic-redaction.js.map +1 -0
- package/dist/src/launcher/host-generation-graph.d.ts +1 -0
- package/dist/src/launcher/host-generation-graph.d.ts.map +1 -1
- package/dist/src/launcher/host-generation-graph.js +5 -1
- package/dist/src/launcher/host-generation-graph.js.map +1 -1
- package/dist/src/launcher/managed-service-plugin-lifecycle.d.ts.map +1 -1
- package/dist/src/launcher/managed-service-plugin-lifecycle.js +2 -6
- package/dist/src/launcher/managed-service-plugin-lifecycle.js.map +1 -1
- package/dist/src/launcher/native-submission-control-server.d.ts.map +1 -1
- package/dist/src/launcher/native-submission-control-server.js +39 -0
- package/dist/src/launcher/native-submission-control-server.js.map +1 -1
- package/dist/src/launcher/native-submission-controller.d.ts +23 -0
- package/dist/src/launcher/native-submission-controller.d.ts.map +1 -1
- package/dist/src/launcher/native-submission-controller.js +47 -0
- package/dist/src/launcher/native-submission-controller.js.map +1 -1
- package/dist/src/launcher/native-submission-structure.d.ts.map +1 -1
- package/dist/src/launcher/native-submission-structure.js +13 -2
- package/dist/src/launcher/native-submission-structure.js.map +1 -1
- package/dist/src/launcher/production-graph-network.d.ts +22 -0
- package/dist/src/launcher/production-graph-network.d.ts.map +1 -0
- package/dist/src/launcher/production-graph-network.js +124 -0
- package/dist/src/launcher/production-graph-network.js.map +1 -0
- package/dist/src/renderer/reicon-icon-backend.d.ts +1 -1
- package/dist/src/renderer/reicon-icon-backend.d.ts.map +1 -1
- package/dist/src/renderer/reicon-icon-backend.js +3 -0
- package/dist/src/renderer/reicon-icon-backend.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://cordisx.example/schemas/feedback-manifest-v1.json",
|
|
4
|
+
"title": "CordisX Feedback Manifest v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"contract",
|
|
9
|
+
"schemaVersion",
|
|
10
|
+
"bundleId",
|
|
11
|
+
"createdAt",
|
|
12
|
+
"producer",
|
|
13
|
+
"policy",
|
|
14
|
+
"target",
|
|
15
|
+
"selection",
|
|
16
|
+
"limits",
|
|
17
|
+
"artifacts",
|
|
18
|
+
"exclusions",
|
|
19
|
+
"missing",
|
|
20
|
+
"redactions",
|
|
21
|
+
"warnings"
|
|
22
|
+
],
|
|
23
|
+
"properties": {
|
|
24
|
+
"contract": { "const": "cordisx.feedback-manifest/v1" },
|
|
25
|
+
"schemaVersion": { "const": 1 },
|
|
26
|
+
"bundleId": { "type": "string", "pattern": "^fb_[a-z0-9]{12,64}$" },
|
|
27
|
+
"createdAt": { "type": "string", "format": "date-time" },
|
|
28
|
+
"producer": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": ["cordisxVersion", "nodeVersion", "platform", "arch"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"cordisxVersion": { "type": "string", "maxLength": 64 },
|
|
34
|
+
"nodeVersion": { "type": "string", "maxLength": 64 },
|
|
35
|
+
"platform": { "type": "string", "enum": ["darwin", "linux", "win32", "other"] },
|
|
36
|
+
"osVersion": { "type": "string", "maxLength": 128 },
|
|
37
|
+
"arch": { "type": "string", "maxLength": 32 },
|
|
38
|
+
"hostVersion": { "type": ["string", "null"], "maxLength": 128 },
|
|
39
|
+
"hostBuild": { "type": ["string", "null"], "maxLength": 128 }
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"policy": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"additionalProperties": false,
|
|
45
|
+
"required": ["version", "localOnly", "contentCollection"],
|
|
46
|
+
"properties": {
|
|
47
|
+
"version": { "type": "string", "maxLength": 64 },
|
|
48
|
+
"localOnly": { "const": true },
|
|
49
|
+
"contentCollection": { "const": "excluded" }
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"target": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"required": ["app", "profile", "dataMode"],
|
|
56
|
+
"properties": {
|
|
57
|
+
"app": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"additionalProperties": false,
|
|
60
|
+
"required": ["kind"],
|
|
61
|
+
"properties": {
|
|
62
|
+
"kind": { "enum": ["codex", "other"] },
|
|
63
|
+
"ref": { "type": "string", "pattern": "^app_[a-f0-9]{16,64}$" }
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"profile": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"additionalProperties": false,
|
|
69
|
+
"required": ["kind", "ref"],
|
|
70
|
+
"properties": {
|
|
71
|
+
"kind": { "enum": ["default", "named"] },
|
|
72
|
+
"ref": { "type": "string", "pattern": "^profile_[a-f0-9]{16,64}$" }
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"dataMode": { "enum": ["shared", "host-isolated"] }
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"selection": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"additionalProperties": false,
|
|
81
|
+
"required": ["launchId", "from", "until", "correlationConfidence", "disposition"],
|
|
82
|
+
"properties": {
|
|
83
|
+
"launchId": { "type": ["string", "null"], "pattern": "^launch_[a-f0-9]{16,64}$" },
|
|
84
|
+
"from": { "type": "string", "format": "date-time" },
|
|
85
|
+
"until": { "type": "string", "format": "date-time" },
|
|
86
|
+
"correlationConfidence": { "enum": ["exact", "partial", "none"] },
|
|
87
|
+
"disposition": {
|
|
88
|
+
"enum": [
|
|
89
|
+
"ready",
|
|
90
|
+
"ready_then_cleanup_degraded",
|
|
91
|
+
"injection_failed",
|
|
92
|
+
"launch_failed",
|
|
93
|
+
"terminated",
|
|
94
|
+
"unknown"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"cdpPort": { "type": ["integer", "null"], "minimum": 1024, "maximum": 65535 }
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"limits": {
|
|
101
|
+
"type": "object",
|
|
102
|
+
"additionalProperties": false,
|
|
103
|
+
"required": ["lookbackSeconds", "maxBytes", "maxEvents", "collectionTimeoutMs"],
|
|
104
|
+
"properties": {
|
|
105
|
+
"lookbackSeconds": { "type": "integer", "minimum": 1, "maximum": 86400 },
|
|
106
|
+
"maxBytes": { "type": "integer", "minimum": 1, "maximum": 10485760 },
|
|
107
|
+
"maxEvents": { "type": "integer", "minimum": 1, "maximum": 10000 },
|
|
108
|
+
"collectionTimeoutMs": { "type": "integer", "minimum": 1, "maximum": 30000 }
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"artifacts": {
|
|
112
|
+
"type": "array",
|
|
113
|
+
"maxItems": 64,
|
|
114
|
+
"items": { "$ref": "#/$defs/artifact" }
|
|
115
|
+
},
|
|
116
|
+
"exclusions": {
|
|
117
|
+
"type": "array",
|
|
118
|
+
"uniqueItems": true,
|
|
119
|
+
"items": { "$ref": "#/$defs/exclusion" }
|
|
120
|
+
},
|
|
121
|
+
"missing": {
|
|
122
|
+
"type": "array",
|
|
123
|
+
"maxItems": 128,
|
|
124
|
+
"items": { "$ref": "#/$defs/missing" }
|
|
125
|
+
},
|
|
126
|
+
"redactions": {
|
|
127
|
+
"type": "object",
|
|
128
|
+
"additionalProperties": false,
|
|
129
|
+
"required": ["total", "byCategory"],
|
|
130
|
+
"properties": {
|
|
131
|
+
"total": { "type": "integer", "minimum": 0 },
|
|
132
|
+
"byCategory": {
|
|
133
|
+
"type": "object",
|
|
134
|
+
"additionalProperties": { "type": "integer", "minimum": 0 },
|
|
135
|
+
"propertyNames": { "pattern": "^[a-z][a-z0-9._-]{0,63}$" }
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"warnings": {
|
|
140
|
+
"type": "array",
|
|
141
|
+
"maxItems": 128,
|
|
142
|
+
"items": {
|
|
143
|
+
"type": "object",
|
|
144
|
+
"additionalProperties": false,
|
|
145
|
+
"required": ["code", "message"],
|
|
146
|
+
"properties": {
|
|
147
|
+
"code": { "type": "string", "pattern": "^[a-z][a-z0-9._-]{0,63}$" },
|
|
148
|
+
"message": { "type": "string", "maxLength": 500 }
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"archive": {
|
|
153
|
+
"type": "object",
|
|
154
|
+
"additionalProperties": false,
|
|
155
|
+
"required": ["format", "bytes", "sha256", "verified"],
|
|
156
|
+
"properties": {
|
|
157
|
+
"format": { "const": "zip" },
|
|
158
|
+
"bytes": { "type": "integer", "minimum": 1, "maximum": 10485760 },
|
|
159
|
+
"sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
160
|
+
"verified": { "const": true }
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"$defs": {
|
|
165
|
+
"artifact": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"additionalProperties": false,
|
|
168
|
+
"required": [
|
|
169
|
+
"path",
|
|
170
|
+
"purpose",
|
|
171
|
+
"evidenceType",
|
|
172
|
+
"status",
|
|
173
|
+
"bytes",
|
|
174
|
+
"sha256",
|
|
175
|
+
"redactions"
|
|
176
|
+
],
|
|
177
|
+
"properties": {
|
|
178
|
+
"path": {
|
|
179
|
+
"type": "string",
|
|
180
|
+
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[A-Za-z0-9._/-]+$",
|
|
181
|
+
"maxLength": 240
|
|
182
|
+
},
|
|
183
|
+
"purpose": { "type": "string", "maxLength": 240 },
|
|
184
|
+
"evidenceType": { "enum": ["product_log", "structured_event", "environment_projection", "user_report"] },
|
|
185
|
+
"status": { "enum": ["present", "truncated"] },
|
|
186
|
+
"bytes": { "type": "integer", "minimum": 0, "maximum": 10485760 },
|
|
187
|
+
"sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
188
|
+
"from": { "type": "string", "format": "date-time" },
|
|
189
|
+
"until": { "type": "string", "format": "date-time" },
|
|
190
|
+
"redactions": { "type": "integer", "minimum": 0 },
|
|
191
|
+
"omittedBytes": { "type": "integer", "minimum": 0 }
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
"exclusion": {
|
|
195
|
+
"type": "object",
|
|
196
|
+
"additionalProperties": false,
|
|
197
|
+
"required": ["category", "reason"],
|
|
198
|
+
"properties": {
|
|
199
|
+
"category": {
|
|
200
|
+
"enum": [
|
|
201
|
+
"conversation_content",
|
|
202
|
+
"prompts",
|
|
203
|
+
"credentials",
|
|
204
|
+
"cookies",
|
|
205
|
+
"complete_config",
|
|
206
|
+
"complete_urls",
|
|
207
|
+
"absolute_paths",
|
|
208
|
+
"screenshots",
|
|
209
|
+
"project_files",
|
|
210
|
+
"browser_storage"
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
"reason": { "type": "string", "maxLength": 240 }
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"missing": {
|
|
217
|
+
"type": "object",
|
|
218
|
+
"additionalProperties": false,
|
|
219
|
+
"required": ["field", "status", "reason"],
|
|
220
|
+
"properties": {
|
|
221
|
+
"field": { "type": "string", "pattern": "^[a-z][a-z0-9._-]{0,127}$" },
|
|
222
|
+
"status": { "enum": ["missing", "unsupported", "permission_denied", "not_applicable", "truncated"] },
|
|
223
|
+
"reason": { "type": "string", "maxLength": 500 }
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -24,6 +24,7 @@ const control = net.connect(socketPath)
|
|
|
24
24
|
const controlCalls = new Map()
|
|
25
25
|
const privateCalls = new Map()
|
|
26
26
|
const desktopCalls = new Map()
|
|
27
|
+
const resumeCalls = new Map()
|
|
27
28
|
const firstTurns = new Map()
|
|
28
29
|
const privatePrefix = `cordisx-private-${nonce}-`
|
|
29
30
|
let sequence = 0
|
|
@@ -57,6 +58,7 @@ function stop(reason = 'transport-closed') {
|
|
|
57
58
|
rejectAll(controlCalls)
|
|
58
59
|
rejectAll(privateCalls)
|
|
59
60
|
desktopCalls.clear()
|
|
61
|
+
resumeCalls.clear()
|
|
60
62
|
firstTurns.clear()
|
|
61
63
|
control.destroy()
|
|
62
64
|
process.stdin.destroy()
|
|
@@ -97,6 +99,14 @@ function settle(calls, message, isControl) {
|
|
|
97
99
|
return true
|
|
98
100
|
}
|
|
99
101
|
|
|
102
|
+
function missingManagedProvider(message) {
|
|
103
|
+
if (message?.error?.code !== -32600 || typeof message.error.message !== 'string') return undefined
|
|
104
|
+
const match = /^failed to load configuration: Model provider `([^`\0\r\n]{1,128})` not found$/u.exec(
|
|
105
|
+
message.error.message,
|
|
106
|
+
)
|
|
107
|
+
return match?.[1]
|
|
108
|
+
}
|
|
109
|
+
|
|
100
110
|
// Only framed messages are buffered. Many small lines in one chunk do not count as one large request.
|
|
101
111
|
function readLines(stream, receive, maxLineBytes = maxNativeLineBytes) {
|
|
102
112
|
let buffer = ''
|
|
@@ -172,6 +182,10 @@ async function forward(line) {
|
|
|
172
182
|
return
|
|
173
183
|
}
|
|
174
184
|
if (typeof message?.id === 'string' && message.id.startsWith(privatePrefix)) throw new Error('Reserved request id')
|
|
185
|
+
if (
|
|
186
|
+
message?.method === 'thread/resume' && typeof params?.threadId === 'string'
|
|
187
|
+
&& ['string', 'number'].includes(typeof message.id) && resumeCalls.size < 64
|
|
188
|
+
) resumeCalls.set(message.id, params)
|
|
175
189
|
await write(child.stdin, line)
|
|
176
190
|
return
|
|
177
191
|
}
|
|
@@ -227,6 +241,46 @@ async function forward(line) {
|
|
|
227
241
|
}
|
|
228
242
|
}
|
|
229
243
|
|
|
244
|
+
// A restarted app-server no longer knows a launch-scoped managed provider that a persisted thread still names.
|
|
245
|
+
async function recoverResume(id, params, providerId, failureLine) {
|
|
246
|
+
try {
|
|
247
|
+
const read = await nativeCall('thread/read', { threadId: params.threadId, includeTurns: false })
|
|
248
|
+
const persistedProviderId = read?.thread?.modelProvider
|
|
249
|
+
const model = read?.thread?.model
|
|
250
|
+
if (
|
|
251
|
+
persistedProviderId !== providerId || providerId === 'openai'
|
|
252
|
+
|| typeof model !== 'string' || model === ''
|
|
253
|
+
) throw new Error('Native thread is not managed')
|
|
254
|
+
const prepared = await controlCall('resume', { threadId: params.threadId, providerId, model })
|
|
255
|
+
const overrides = object(prepared?.configOverrides)
|
|
256
|
+
if (prepared?.kind !== 'resume' || !validToken(prepared.resumeToken) || overrides === undefined) {
|
|
257
|
+
throw new Error('Managed resume rejected')
|
|
258
|
+
}
|
|
259
|
+
let result
|
|
260
|
+
try {
|
|
261
|
+
result = await nativeCall('thread/resume', { ...params, config: { ...object(params.config), ...overrides } })
|
|
262
|
+
if (result?.thread?.id !== params.threadId) throw new Error('Managed resume returned another thread')
|
|
263
|
+
} catch (error) {
|
|
264
|
+
await controlCall('resume-complete', {
|
|
265
|
+
threadId: params.threadId,
|
|
266
|
+
resumeToken: prepared.resumeToken,
|
|
267
|
+
succeeded: false,
|
|
268
|
+
}).catch(() => undefined)
|
|
269
|
+
throw error
|
|
270
|
+
}
|
|
271
|
+
const completed = await controlCall('resume-complete', {
|
|
272
|
+
threadId: params.threadId,
|
|
273
|
+
resumeToken: prepared.resumeToken,
|
|
274
|
+
succeeded: true,
|
|
275
|
+
})
|
|
276
|
+
if (completed !== true) throw new Error('Managed resume completion rejected')
|
|
277
|
+
await write(process.stdout, { id, result })
|
|
278
|
+
} catch {
|
|
279
|
+
// The original native failure stays authoritative whenever the Host cannot vouch for the provider.
|
|
280
|
+
await write(process.stdout, failureLine)
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
230
284
|
readLines(process.stdin, line => {
|
|
231
285
|
inputQueue = inputQueue.then(async () => {
|
|
232
286
|
await ready
|
|
@@ -248,6 +302,15 @@ readLines(child.stdout, line => {
|
|
|
248
302
|
if (settle(privateCalls, message, false)) return
|
|
249
303
|
// Late private responses must never escape into the Desktop's request table.
|
|
250
304
|
if (typeof message?.id === 'string' && message.id.startsWith(privatePrefix)) return
|
|
305
|
+
const resumeParams = message.method === undefined ? resumeCalls.get(message?.id) : undefined
|
|
306
|
+
if (resumeParams !== undefined) {
|
|
307
|
+
resumeCalls.delete(message.id)
|
|
308
|
+
const providerId = missingManagedProvider(message)
|
|
309
|
+
if (providerId !== undefined) {
|
|
310
|
+
void recoverResume(message.id, resumeParams, providerId, line).catch(stop)
|
|
311
|
+
return
|
|
312
|
+
}
|
|
313
|
+
}
|
|
251
314
|
const operation = desktopCalls.get(message?.id)
|
|
252
315
|
if (!operation || message.method !== undefined) {
|
|
253
316
|
void write(process.stdout, line).catch(stop)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cordisx-feedback
|
|
3
|
+
description: Collect a private, bounded CordisX diagnostic bundle when the user wants to report, package, or investigate a CordisX problem, startup failure, injection issue, cleanup warning, or suspicious log sequence. Use this Skill when the user asks to prepare feedback or logs for maintainers, including when they only describe a screenshot. It creates local diagnostics for review; it never uploads or sends them without separate explicit authorization.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CordisX Feedback
|
|
7
|
+
|
|
8
|
+
Use `cordisx feedback` to prepare a local diagnostic bundle without collecting
|
|
9
|
+
conversation content, credentials, complete configuration, or unrelated files.
|
|
10
|
+
|
|
11
|
+
Reuse supplied context and ask only for a short user description, approximate
|
|
12
|
+
time, or app/profile when the CLI cannot resolve them. A screenshot
|
|
13
|
+
transcription is a `user_report`, never a product log.
|
|
14
|
+
|
|
15
|
+
## Collect
|
|
16
|
+
|
|
17
|
+
Check that the installed CLI supports `cordisx feedback`, then normally run:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cordisx feedback collect --recent --json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Add a bounded app/profile, time, or `--description-file` only when needed. Do
|
|
24
|
+
not run `cordisx config`, scan HOME or a project, or use unbounded `cordisx
|
|
25
|
+
logs`; the CLI owns selection, redaction, validation, and limits.
|
|
26
|
+
|
|
27
|
+
## Preview
|
|
28
|
+
|
|
29
|
+
Read the manifest summary and explain included and excluded categories, missing
|
|
30
|
+
or truncated sources, selected time window and correlation confidence,
|
|
31
|
+
redactions, final size, and local staging directory. A transient target-list
|
|
32
|
+
fetch failure followed by ready and injected is not an injection failure;
|
|
33
|
+
describe later cleanup degradation separately.
|
|
34
|
+
|
|
35
|
+
## Export
|
|
36
|
+
|
|
37
|
+
Only after the user asks for an archive, run:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cordisx feedback export <bundle-directory> --json
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Show the local archive and verification result. Do not upload, message, create
|
|
44
|
+
an issue, or contact a maintainer without separately explicit authorization.
|
|
45
|
+
|
|
46
|
+
On failure, report the CLI's safe error. Do not substitute raw file collection,
|
|
47
|
+
delete locks, restart CordisX, change config, or request broader access.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type CordisXFeedbackInvocation } from './parse.js';
|
|
2
|
+
import { type CordisXCliRuntime } from './run-support.js';
|
|
3
|
+
export declare function runFeedbackCommand(invocation: CordisXFeedbackInvocation, runtime: CordisXCliRuntime): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=feedback-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-command.d.ts","sourceRoot":"","sources":["../../../src/cli/feedback-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAuBzD,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,yBAAyB,EACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { exportFeedbackBundle, inspectFeedbackArchive, inspectFeedbackBundle } from '../feedback/archive.js';
|
|
3
|
+
import { collectFeedback } from '../feedback/collector.js';
|
|
4
|
+
const FEEDBACK_HELP = `Usage:
|
|
5
|
+
cordisx feedback collect [app] [profile] [--recent] [--since 15m | --from ISO --until ISO] [--description-file path] [--output directory] [--max-bytes bytes] [--json]
|
|
6
|
+
cordisx feedback inspect <bundle-directory> [--json]
|
|
7
|
+
cordisx feedback export <bundle-directory> [--output archive.zip] [--format zip] [--json]`;
|
|
8
|
+
function summary(manifest) {
|
|
9
|
+
return {
|
|
10
|
+
launches: manifest.selection.launchId === null ? 0 : 1,
|
|
11
|
+
includedArtifacts: manifest.artifacts.length,
|
|
12
|
+
excludedCategories: manifest.exclusions.length,
|
|
13
|
+
missingSources: manifest.missing.length,
|
|
14
|
+
redactions: manifest.redactions.total,
|
|
15
|
+
bytes: manifest.artifacts.reduce((sum, artifact) => sum + artifact.bytes, 0),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function output(runtime, json, value) {
|
|
19
|
+
const source = JSON.stringify(value);
|
|
20
|
+
(runtime.stdout ?? console.log)(json ? source : typeof value === 'string' ? value : source);
|
|
21
|
+
}
|
|
22
|
+
export async function runFeedbackCommand(invocation, runtime) {
|
|
23
|
+
if (invocation.feedbackAction === 'help') {
|
|
24
|
+
output(runtime, false, FEEDBACK_HELP);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (invocation.feedbackAction === 'collect') {
|
|
28
|
+
output(runtime, invocation.json, await collectFeedback(invocation, runtime));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const bundlePath = path.resolve(invocation.input);
|
|
32
|
+
const manifest = path.extname(bundlePath) === '.zip'
|
|
33
|
+
? await inspectFeedbackArchive(bundlePath)
|
|
34
|
+
: await inspectFeedbackBundle(bundlePath);
|
|
35
|
+
if (invocation.feedbackAction === 'inspect') {
|
|
36
|
+
output(runtime, invocation.json, {
|
|
37
|
+
status: 'inspected',
|
|
38
|
+
bundlePath,
|
|
39
|
+
manifestPath: path.join(bundlePath, 'manifest.json'),
|
|
40
|
+
bundleId: manifest.bundleId,
|
|
41
|
+
summary: summary(manifest),
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const archivePath = invocation.output === undefined ? `${bundlePath}.zip` : path.resolve(invocation.output);
|
|
46
|
+
const archive = await exportFeedbackBundle(bundlePath, archivePath);
|
|
47
|
+
output(runtime, invocation.json, {
|
|
48
|
+
status: 'exported',
|
|
49
|
+
bundlePath,
|
|
50
|
+
manifestPath: path.join(bundlePath, 'manifest.json'),
|
|
51
|
+
bundleId: manifest.bundleId,
|
|
52
|
+
archivePath,
|
|
53
|
+
summary: summary(manifest),
|
|
54
|
+
archive,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=feedback-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-command.js","sourceRoot":"","sources":["../../../src/cli/feedback-command.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/parse.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type CordisXManagementInvocation } from './management-parse.js';
|
|
2
2
|
export { CordisXCliParseError, type CordisXCliParseErrorCode } from './parse-error.js';
|
|
3
|
-
export type CordisXCliAction = 'help' | 'launch' | 'run' | 'start' | 'status' | 'logs' | 'stop' | 'restart' | 'setup' | 'config' | 'doctor' | 'dev' | 'management';
|
|
3
|
+
export type CordisXCliAction = 'help' | 'launch' | 'run' | 'start' | 'status' | 'logs' | 'stop' | 'restart' | 'setup' | 'config' | 'doctor' | 'dev' | 'feedback' | 'management';
|
|
4
4
|
export type CordisXDataMode = 'shared' | 'host-isolated';
|
|
5
5
|
export interface CordisXLauncherOptions {
|
|
6
6
|
readonly attach: boolean;
|
|
@@ -39,6 +39,7 @@ export interface CordisXManagedInvocation {
|
|
|
39
39
|
readonly options: CordisXLauncherOptions;
|
|
40
40
|
readonly hostArgs: readonly string[];
|
|
41
41
|
readonly follow?: true;
|
|
42
|
+
readonly recoverStartup?: true;
|
|
42
43
|
}
|
|
43
44
|
export interface CordisXSetupInvocation {
|
|
44
45
|
readonly action: 'setup';
|
|
@@ -57,7 +58,25 @@ export interface CordisXDevInvocation {
|
|
|
57
58
|
readonly options: CordisXLauncherOptions;
|
|
58
59
|
readonly hostArgs: readonly string[];
|
|
59
60
|
}
|
|
60
|
-
export type
|
|
61
|
+
export type FeedbackAction = 'collect' | 'inspect' | 'export' | 'help';
|
|
62
|
+
export interface CordisXFeedbackInvocation {
|
|
63
|
+
readonly action: 'feedback';
|
|
64
|
+
readonly feedbackAction: FeedbackAction;
|
|
65
|
+
readonly app?: string;
|
|
66
|
+
readonly profile?: string;
|
|
67
|
+
readonly since?: string;
|
|
68
|
+
readonly from?: string;
|
|
69
|
+
readonly until?: string;
|
|
70
|
+
readonly launch?: string;
|
|
71
|
+
readonly descriptionFile?: string;
|
|
72
|
+
readonly output?: string;
|
|
73
|
+
readonly maxBytes?: number;
|
|
74
|
+
readonly format?: 'zip';
|
|
75
|
+
readonly recent?: true;
|
|
76
|
+
readonly json: boolean;
|
|
77
|
+
readonly input?: string;
|
|
78
|
+
}
|
|
79
|
+
export type CordisXCliInvocation = CordisXHelpInvocation | CordisXLaunchInvocation | CordisXRunInvocation | CordisXManagedInvocation | CordisXSetupInvocation | CordisXConfigInvocation | CordisXDoctorInvocation | CordisXDevInvocation | CordisXFeedbackInvocation | CordisXManagementInvocation;
|
|
61
80
|
/**
|
|
62
81
|
* Parse arguments following the `cordisx` executable name.
|
|
63
82
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/cli/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,2BAA2B,EAAsB,MAAM,uBAAuB,CAAA;AAG5F,OAAO,EAAE,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAEtF,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,QAAQ,GACR,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,YAAY,CAAA;AAChB,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,eAAe,CAAA;AAExD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,uFAAuF;IACvF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,gDAAgD;IAChD,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC;IACnF,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAA;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACjE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/cli/parse.ts"],"names":[],"mappings":"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"}
|