@goliapkg/sentori-cli 1.4.1 → 1.5.0
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/lib/lenient.js +1 -1
- package/lib/lenient.js.map +1 -1
- package/lib/mcp.js +1 -1
- package/lib/mcp.js.map +1 -1
- package/lib/native-artifacts.d.ts.map +1 -1
- package/lib/native-artifacts.js +5 -0
- package/lib/native-artifacts.js.map +1 -1
- package/lib/probes.js +1 -1
- package/lib/probes.js.map +1 -1
- package/lib/upload.d.ts +22 -2
- package/lib/upload.d.ts.map +1 -1
- package/lib/upload.js +13 -1
- package/lib/upload.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/upload-verdict.test.ts +77 -0
- package/src/lenient.ts +1 -1
- package/src/mcp.ts +1 -1
- package/src/native-artifacts.ts +5 -0
- package/src/probes.ts +1 -1
- package/src/upload.ts +37 -2
package/lib/lenient.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// The iron rule reaches build-time
|
|
1
|
+
// The iron rule reaches build-time: an upload
|
|
2
2
|
// failure must never break the customer's build or release. Every
|
|
3
3
|
// upload-family command runs through this wrapper — on failure it
|
|
4
4
|
// prints a friendly, actionable note and exits 0. `--strict` opts
|
package/lib/lenient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lenient.js","sourceRoot":"","sources":["../src/lenient.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"lenient.js","sourceRoot":"","sources":["../src/lenient.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,6DAA6D;AAC7D,aAAa;AAWb,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAE9E,uDAAuD;AACvD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAc,EAAY,EAAE,CACtD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAA;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAe,EAAE,CAAiB,EAAU,EAAE;IACxE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC3C,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,KAAK,CACX,6FAA6F,CAC9F,CAAA;IACD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACzD,OAAO,CAAC,CAAA;IACV,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA"}
|
package/lib/mcp.js
CHANGED
|
@@ -104,7 +104,7 @@ async function dispatch(req, toolMap, ctx, tools) {
|
|
|
104
104
|
}
|
|
105
105
|
// ── Tool implementations — the /api closed loop ──────────────────
|
|
106
106
|
//
|
|
107
|
-
// Four tools, mirroring exactly what an agent needs
|
|
107
|
+
// Four tools, mirroring exactly what an agent needs:
|
|
108
108
|
// pick work, pull the evidence, write back, resolve. The bundle is
|
|
109
109
|
// the product; everything else is triage plumbing.
|
|
110
110
|
async function apiGet(ctx, path, raw = false) {
|
package/lib/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-artifacts.d.ts","sourceRoot":"","sources":["../src/native-artifacts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"native-artifacts.d.ts","sourceRoot":"","sources":["../src/native-artifacts.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAoCD,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAcvE;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAejE;AAED;;wCAEwC;AACxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBtD;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAA;AAE9E,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoCnF;AAID,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7E"}
|
package/lib/native-artifacts.js
CHANGED
|
@@ -6,6 +6,7 @@ import { readFile } from 'node:fs/promises';
|
|
|
6
6
|
import { basename, extname, join } from 'node:path';
|
|
7
7
|
import { statSync, readdirSync } from 'node:fs';
|
|
8
8
|
import { gzipForWire, wireArrayBuffer } from './upload.js';
|
|
9
|
+
import { warnIfUnusable } from './upload.js';
|
|
9
10
|
async function uploadBytes(opts) {
|
|
10
11
|
// Gzip on the wire — DWARF ~3:1, R8 mapping ~10:1; a real app's
|
|
11
12
|
// main dSYM only fits the server's transport cap compressed.
|
|
@@ -23,6 +24,10 @@ async function uploadBytes(opts) {
|
|
|
23
24
|
const detail = await resp.text().catch(() => '');
|
|
24
25
|
throw new Error(`${resp.status} ${resp.statusText}${detail ? ` — ${detail.slice(0, 300)}` : ''}`);
|
|
25
26
|
}
|
|
27
|
+
// The dSYM path posts its own request rather than going through
|
|
28
|
+
// `uploadArtifact`, so it needs the same read — this is the half
|
|
29
|
+
// that would have gone quiet again.
|
|
30
|
+
warnIfUnusable(opts.name, (await resp.json().catch(() => ({}))));
|
|
26
31
|
}
|
|
27
32
|
const ARCHES = new Set([
|
|
28
33
|
'arm64',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-artifacts.js","sourceRoot":"","sources":["../src/native-artifacts.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,mEAAmE;AACnE,6DAA6D;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"native-artifacts.js","sourceRoot":"","sources":["../src/native-artifacts.ts"],"names":[],"mappings":"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"}
|
package/lib/probes.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// `sentori-cli probes sync` — the tripwire registry scan
|
|
2
|
-
//
|
|
2
|
+
// Statically scans source for `sentori.probe('REF')`
|
|
3
3
|
// / `probe("REF")` call sites and registers the refs against a
|
|
4
4
|
// release, so the server can tell a silent probe (fix holding) from
|
|
5
5
|
// deleted code.
|
package/lib/probes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probes.js","sourceRoot":"","sources":["../src/probes.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"probes.js","sourceRoot":"","sources":["../src/probes.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,qDAAqD;AACrD,+DAA+D;AAC/D,oEAAoE;AACpE,gBAAgB;AAEhB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,QAAQ,GAAG,wCAAwC,CAAA;AACzD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AACzE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AACpF,MAAM,SAAS,GAAG,MAAM,CAAA;AAExB,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,IAAI,IAAI,GAAG,SAAS;YAAE,OAAM;QAC5B,IAAI,OAAiB,CAAA;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAM;QACR,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAQ;YACjC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACzB,IAAI,EAAE,CAAA;YACN,IAAI,CAAC;gBACH,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAQ;YACV,CAAC;YACD,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrB,IAAI,CAAC,CAAC,CAAC,CAAA;YACT,CAAC;iBAAM,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;gBACjC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAAE,SAAQ;gBAC3D,IAAI,IAAI,CAAC,CAAA;gBACT,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;oBACpC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACxC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;wBAChB,IAAI,GAAG;4BAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBACxB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IACD,IAAI,CAAC,IAAI,CAAC,CAAA;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAKhC;IACC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,EAAE;QAC7E,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;YACrC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;KACjE,CAAC,CAAA;IACF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACpF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA2B,CAAA;AACtD,CAAC"}
|
package/lib/upload.d.ts
CHANGED
|
@@ -19,7 +19,27 @@ export declare function gzipForWire(bytes: Buffer | Uint8Array, name: string): {
|
|
|
19
19
|
* be 16 KB of pool (offset view) — a Blob built on it would ship
|
|
20
20
|
* garbage bytes around the payload. */
|
|
21
21
|
export declare function wireArrayBuffer(wire: Uint8Array): ArrayBuffer;
|
|
22
|
-
|
|
22
|
+
/** What the server said about the file it just stored.
|
|
23
|
+
*
|
|
24
|
+
* `usable: false` means it landed and will symbolicate nothing —
|
|
25
|
+
* a Hermes bundle passed off as a source map, a zip where a Mach-O
|
|
26
|
+
* was expected. The server has answered this since 2.15.0 and its
|
|
27
|
+
* own comment says "the response says so"; nothing read it, so the
|
|
28
|
+
* first anyone heard was a release page months later with the file
|
|
29
|
+
* sitting under a green light.
|
|
30
|
+
*
|
|
31
|
+
* Warned, never thrown. An artifact upload may not fail a
|
|
32
|
+
* customer's build — see the zero-cost rule — and this one did
|
|
33
|
+
* store. `--strict` is where a caller opts into a hard stop.
|
|
34
|
+
*/
|
|
35
|
+
export type UploadVerdict = {
|
|
23
36
|
id: string;
|
|
24
|
-
|
|
37
|
+
/** `null` for kinds the server does not parse ahead of time. */
|
|
38
|
+
usable?: boolean | null;
|
|
39
|
+
/** What to upload instead. Present only when `usable === false`. */
|
|
40
|
+
hint?: null | string;
|
|
41
|
+
};
|
|
42
|
+
/** Say it once, at the only place every upload passes through. */
|
|
43
|
+
export declare function warnIfUnusable(name: string, v: UploadVerdict): boolean;
|
|
44
|
+
export declare function uploadArtifact(opts: UploadOpts): Promise<UploadVerdict>;
|
|
25
45
|
//# sourceMappingURL=upload.d.ts.map
|
package/lib/upload.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAA;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAMD;;8DAE8D;AAC9D,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAWxC;AAED;;;wCAGwC;AACxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAE7D;AAED,
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAA;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAMD;;8DAE8D;AAC9D,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAWxC;AAED;;;wCAGwC;AACxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAE7D;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,oEAAoE;IACpE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CACrB,CAAA;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAStE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAsC7E"}
|
package/lib/upload.js
CHANGED
|
@@ -38,6 +38,16 @@ export function gzipForWire(bytes, name) {
|
|
|
38
38
|
export function wireArrayBuffer(wire) {
|
|
39
39
|
return wire.buffer.slice(wire.byteOffset, wire.byteOffset + wire.byteLength);
|
|
40
40
|
}
|
|
41
|
+
/** Say it once, at the only place every upload passes through. */
|
|
42
|
+
export function warnIfUnusable(name, v) {
|
|
43
|
+
if (v.usable !== false)
|
|
44
|
+
return false;
|
|
45
|
+
// `warn`, not `error`: red text makes a host team believe their
|
|
46
|
+
// build broke, and this one did not.
|
|
47
|
+
console.warn(`[sentori-cli] ${name} stored, but the server cannot read it — ` +
|
|
48
|
+
`it will symbolicate nothing.${v.hint ? ` ${v.hint}` : ''}`);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
41
51
|
export async function uploadArtifact(opts) {
|
|
42
52
|
const bytes = readFileSync(opts.path);
|
|
43
53
|
if (bytes.length === 0)
|
|
@@ -70,6 +80,8 @@ export async function uploadArtifact(opts) {
|
|
|
70
80
|
const detail = await resp.text().catch(() => '');
|
|
71
81
|
throw new Error(`${resp.status} ${resp.statusText}${detail ? ` — ${detail.slice(0, 200)}` : ''}`);
|
|
72
82
|
}
|
|
73
|
-
|
|
83
|
+
const verdict = (await resp.json());
|
|
84
|
+
warnIfUnusable(opts.name ?? basename(opts.path), verdict);
|
|
85
|
+
return verdict;
|
|
74
86
|
}
|
|
75
87
|
//# sourceMappingURL=upload.js.map
|
package/lib/upload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goliapkg/sentori-cli",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Sentori CLI
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"description": "Sentori CLI \u2014 upload source maps so dashboard stack traces resolve to your original source.",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"author": "GOLIA K.K. <takagi@golia.jp> (https://golia.jp)",
|
|
7
7
|
"homepage": "https://sentori.golia.jp",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/bun": "latest",
|
|
44
|
-
"@types/node": "
|
|
44
|
+
"@types/node": "^26.2.0",
|
|
45
45
|
"typescript": "^7"
|
|
46
46
|
},
|
|
47
47
|
"publishConfig": {
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// The server has answered `usable: false` since 2.15.0, and its own
|
|
2
|
+
// comment in `artifacts_upload.rs` says "the response says so". It
|
|
3
|
+
// did. Nothing read it — both upload paths threw the body away and
|
|
4
|
+
// returned `{ id }` — so a Hermes bundle uploaded as a source map
|
|
5
|
+
// stored, printed nothing, and sat under a green light on the release
|
|
6
|
+
// page until somebody expanded the row months later.
|
|
7
|
+
//
|
|
8
|
+
// These pin the two halves that were missing: it warns, and it does
|
|
9
|
+
// not throw.
|
|
10
|
+
|
|
11
|
+
import { describe, expect, mock, test } from 'bun:test'
|
|
12
|
+
|
|
13
|
+
import { warnIfUnusable } from '../upload.js'
|
|
14
|
+
|
|
15
|
+
/** Capture what the CLI prints, without printing it. */
|
|
16
|
+
function captured(fn: () => void): { warn: string[] } {
|
|
17
|
+
const warn: string[] = []
|
|
18
|
+
const orig = console.warn
|
|
19
|
+
console.warn = mock((...a: unknown[]) => void warn.push(a.join(' ')))
|
|
20
|
+
try {
|
|
21
|
+
fn()
|
|
22
|
+
} finally {
|
|
23
|
+
console.warn = orig
|
|
24
|
+
}
|
|
25
|
+
return { warn }
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
describe('what the server said about the file it stored', () => {
|
|
29
|
+
test('an unreadable artifact is named, with what to upload instead', () => {
|
|
30
|
+
const { warn } = captured(() => {
|
|
31
|
+
const said = warnIfUnusable('index.android.bundle', {
|
|
32
|
+
id: 'a',
|
|
33
|
+
usable: false,
|
|
34
|
+
hint: 'React Native: upload the generated .map, not the bundle.',
|
|
35
|
+
})
|
|
36
|
+
expect(said).toBe(true)
|
|
37
|
+
})
|
|
38
|
+
expect(warn).toHaveLength(1)
|
|
39
|
+
// The file, so somebody with eight artifacts knows which one.
|
|
40
|
+
expect(warn[0]).toContain('index.android.bundle')
|
|
41
|
+
// And the server's own instruction, rather than our paraphrase.
|
|
42
|
+
expect(warn[0]).toContain('upload the generated .map')
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
test('it warns rather than throwing — an upload may not fail a build', () => {
|
|
46
|
+
// The zero-cost rule: sentori cannot break a customer's release.
|
|
47
|
+
// The file did store; only its usefulness is in question.
|
|
48
|
+
expect(() =>
|
|
49
|
+
captured(() => warnIfUnusable('main.jsbundle', { id: 'a', usable: false })),
|
|
50
|
+
).not.toThrow()
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
test('a readable artifact says nothing', () => {
|
|
54
|
+
const { warn } = captured(() => {
|
|
55
|
+
expect(warnIfUnusable('app.map', { id: 'a', usable: true })).toBe(false)
|
|
56
|
+
})
|
|
57
|
+
expect(warn).toHaveLength(0)
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
test('"we did not look" is not "we looked and it is broken"', () => {
|
|
61
|
+
// `srcbundle` and anything uploaded before the check existed come
|
|
62
|
+
// back `null`. Warning on those would train people to ignore the
|
|
63
|
+
// warning that matters.
|
|
64
|
+
for (const usable of [null, undefined]) {
|
|
65
|
+
const { warn } = captured(() => {
|
|
66
|
+
expect(warnIfUnusable('srcbundle.json', { id: 'a', usable })).toBe(false)
|
|
67
|
+
})
|
|
68
|
+
expect(warn).toHaveLength(0)
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
test('a hint-less refusal still names the file', () => {
|
|
73
|
+
const { warn } = captured(() => warnIfUnusable('Insight.app-arm64', { id: 'a', usable: false }))
|
|
74
|
+
expect(warn[0]).toContain('Insight.app-arm64')
|
|
75
|
+
expect(warn[0]).toContain('cannot read')
|
|
76
|
+
})
|
|
77
|
+
})
|
package/src/lenient.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// The iron rule reaches build-time
|
|
1
|
+
// The iron rule reaches build-time: an upload
|
|
2
2
|
// failure must never break the customer's build or release. Every
|
|
3
3
|
// upload-family command runs through this wrapper — on failure it
|
|
4
4
|
// prints a friendly, actionable note and exits 0. `--strict` opts
|
package/src/mcp.ts
CHANGED
|
@@ -135,7 +135,7 @@ async function dispatch(
|
|
|
135
135
|
|
|
136
136
|
// ── Tool implementations — the /api closed loop ──────────────────
|
|
137
137
|
//
|
|
138
|
-
// Four tools, mirroring exactly what an agent needs
|
|
138
|
+
// Four tools, mirroring exactly what an agent needs:
|
|
139
139
|
// pick work, pull the evidence, write back, resolve. The bundle is
|
|
140
140
|
// the product; everything else is triage plumbing.
|
|
141
141
|
|
package/src/native-artifacts.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { basename, extname, join } from 'node:path'
|
|
|
8
8
|
import { statSync, readdirSync } from 'node:fs'
|
|
9
9
|
|
|
10
10
|
import { gzipForWire, wireArrayBuffer } from './upload.js'
|
|
11
|
+
import { type UploadVerdict, warnIfUnusable } from './upload.js'
|
|
11
12
|
|
|
12
13
|
export type AdminUpload = {
|
|
13
14
|
apiUrl: string
|
|
@@ -41,6 +42,10 @@ async function uploadBytes(opts: {
|
|
|
41
42
|
`${resp.status} ${resp.statusText}${detail ? ` — ${detail.slice(0, 300)}` : ''}`,
|
|
42
43
|
)
|
|
43
44
|
}
|
|
45
|
+
// The dSYM path posts its own request rather than going through
|
|
46
|
+
// `uploadArtifact`, so it needs the same read — this is the half
|
|
47
|
+
// that would have gone quiet again.
|
|
48
|
+
warnIfUnusable(opts.name, (await resp.json().catch(() => ({}))) as UploadVerdict)
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
// ── dSYM ──────────────────────────────────────────────────────────
|
package/src/probes.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// `sentori-cli probes sync` — the tripwire registry scan
|
|
2
|
-
//
|
|
2
|
+
// Statically scans source for `sentori.probe('REF')`
|
|
3
3
|
// / `probe("REF")` call sites and registers the refs against a
|
|
4
4
|
// release, so the server can tell a silent probe (fix holding) from
|
|
5
5
|
// deleted code.
|
package/src/upload.ts
CHANGED
|
@@ -58,7 +58,40 @@ export function wireArrayBuffer(wire: Uint8Array): ArrayBuffer {
|
|
|
58
58
|
return wire.buffer.slice(wire.byteOffset, wire.byteOffset + wire.byteLength) as ArrayBuffer
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
/** What the server said about the file it just stored.
|
|
62
|
+
*
|
|
63
|
+
* `usable: false` means it landed and will symbolicate nothing —
|
|
64
|
+
* a Hermes bundle passed off as a source map, a zip where a Mach-O
|
|
65
|
+
* was expected. The server has answered this since 2.15.0 and its
|
|
66
|
+
* own comment says "the response says so"; nothing read it, so the
|
|
67
|
+
* first anyone heard was a release page months later with the file
|
|
68
|
+
* sitting under a green light.
|
|
69
|
+
*
|
|
70
|
+
* Warned, never thrown. An artifact upload may not fail a
|
|
71
|
+
* customer's build — see the zero-cost rule — and this one did
|
|
72
|
+
* store. `--strict` is where a caller opts into a hard stop.
|
|
73
|
+
*/
|
|
74
|
+
export type UploadVerdict = {
|
|
75
|
+
id: string
|
|
76
|
+
/** `null` for kinds the server does not parse ahead of time. */
|
|
77
|
+
usable?: boolean | null
|
|
78
|
+
/** What to upload instead. Present only when `usable === false`. */
|
|
79
|
+
hint?: null | string
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Say it once, at the only place every upload passes through. */
|
|
83
|
+
export function warnIfUnusable(name: string, v: UploadVerdict): boolean {
|
|
84
|
+
if (v.usable !== false) return false
|
|
85
|
+
// `warn`, not `error`: red text makes a host team believe their
|
|
86
|
+
// build broke, and this one did not.
|
|
87
|
+
console.warn(
|
|
88
|
+
`[sentori-cli] ${name} stored, but the server cannot read it — ` +
|
|
89
|
+
`it will symbolicate nothing.${v.hint ? ` ${v.hint}` : ''}`,
|
|
90
|
+
)
|
|
91
|
+
return true
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export async function uploadArtifact(opts: UploadOpts): Promise<UploadVerdict> {
|
|
62
95
|
const bytes = readFileSync(opts.path)
|
|
63
96
|
if (bytes.length === 0) throw new Error(`empty file: ${opts.path}`)
|
|
64
97
|
|
|
@@ -93,5 +126,7 @@ export async function uploadArtifact(opts: UploadOpts): Promise<{ id: string }>
|
|
|
93
126
|
const detail = await resp.text().catch(() => '')
|
|
94
127
|
throw new Error(`${resp.status} ${resp.statusText}${detail ? ` — ${detail.slice(0, 200)}` : ''}`)
|
|
95
128
|
}
|
|
96
|
-
|
|
129
|
+
const verdict = (await resp.json()) as UploadVerdict
|
|
130
|
+
warnIfUnusable(opts.name ?? basename(opts.path), verdict)
|
|
131
|
+
return verdict
|
|
97
132
|
}
|