@deepseek-insight/dsi 0.6.9 → 0.6.10
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/.agents/skills/dsi-plugin-rack/rack.d.mts +35 -0
- package/.agents/skills/dsi-plugin-rack/rack.mjs +168 -26
- package/build/client/_app/immutable/assets/{2.BGqV97Jd.css → 2.BuaCdYrs.css} +1 -1
- package/build/client/_app/immutable/chunks/B7sQH3rV.js +1 -0
- package/build/client/_app/immutable/chunks/{UkmEG9Ws.js → Dg3LIDOQ.js} +1 -1
- package/build/client/_app/immutable/chunks/XOquLDe4.js +2 -0
- package/build/client/_app/immutable/chunks/ivdzpE2c.js +1 -0
- package/build/client/_app/immutable/entry/{app.e7xoYywe.js → app.BTSQLfJD.js} +2 -2
- package/build/client/_app/immutable/entry/start.DMTgnn1w.js +1 -0
- package/build/client/_app/immutable/nodes/{1.E4wiL8sP.js → 1.Bj5dhQm8.js} +1 -1
- package/build/client/_app/immutable/nodes/{2.BBV-AGuB.js → 2.D2grr0LI.js} +195 -195
- package/build/client/_app/version.json +1 -1
- package/build/handler.js +4 -4
- package/build/index.js +4 -4
- package/build/server/chunks/chunks/{engine.js-CrdWRSwf.js → engine.js-1gYqtdBP.js} +17 -2
- package/build/server/chunks/chunks/{internal.js-BnJXHc1S.js → internal.js-CiymEM9G.js} +2 -2
- package/build/server/chunks/chunks/{state.js-CAjHzrRZ.js → state.js-Dve2UFKe.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/plugins/apply/{_server.ts.js-CpO--Jwf.js → _server.ts.js-BNEUWbaf.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/plugins/reload/{_server.ts.js-BACFXWMj.js → _server.ts.js-Ct28d7_t.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/plugins/snapshot/{_server.ts.js-BJg0hLlC.js → _server.ts.js-DswGIO4S.js} +2 -2
- package/build/server/chunks/entries/pages/{_error.svelte.js-BXeIuPj-.js → _error.svelte.js-DUc94aLg.js} +3 -3
- package/build/server/chunks/entries/pages/{_page.svelte.js-CW-EdJ00.js → _page.svelte.js-CGKKJjvq.js} +154 -6
- package/build/server/chunks/{handler-DimUSmTW.js → handler-DndMFIB-.js} +3 -3
- package/build/server/chunks/{index.js-BQUp4Xgn.js → index.js-XCtYQ9iw.js} +2 -2
- package/build/server/chunks/{manifest.js-BWy6zgHL.js → manifest.js-B6QH7eda.js} +7 -7
- package/build/server/chunks/nodes/1.js-DgkiAL8m.js +9 -0
- package/build/server/chunks/nodes/{2.js-CzgP_zp4.js → 2.js-DiZQ86Is.js} +4 -4
- package/package.json +1 -1
- package/skills/dsi-add-plugin/SKILL.md +53 -0
- package/skills/dsi-add-plugin/references/allowbuilds-template.md +55 -0
- package/skills/dsi-add-plugin/references/checklist.md +98 -0
- package/skills/dsi-add-plugin/references/verification.md +67 -0
- package/template/.dsi/resources/plugins-reff.md +4 -2
- package/build/client/_app/immutable/chunks/C1F3aCiz.js +0 -2
- package/build/client/_app/immutable/chunks/CmnxnK6v.js +0 -1
- package/build/client/_app/immutable/chunks/jugX_o5s.js +0 -1
- package/build/client/_app/immutable/entry/start.CnkkMjJa.js +0 -1
- package/build/server/chunks/nodes/1.js-DJ3dsgdq.js +0 -9
- package/template/dsh-app-dev-preset/README.md +0 -69
- package/template/dsh-app-dev-preset/cordis.patch.yml +0 -219
- package/template/dsh-app-dev-preset/package.json +0 -7
- package/template/dsh-research-preset/README.md +0 -57
- package/template/dsh-research-preset/cordis.patch.yml +0 -118
- package/template/dsh-research-preset/package.json +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"
|
|
1
|
+
{"version":"1791336046986"}
|
package/build/handler.js
CHANGED
|
@@ -2,9 +2,9 @@ import './shims.js';
|
|
|
2
2
|
import 'node:fs';
|
|
3
3
|
import 'node:path';
|
|
4
4
|
import 'node:process';
|
|
5
|
-
export { h as handler } from './server/chunks/handler-
|
|
6
|
-
import './server/chunks/index.js-
|
|
7
|
-
import './server/chunks/manifest.js-
|
|
5
|
+
export { h as handler } from './server/chunks/handler-DndMFIB-.js';
|
|
6
|
+
import './server/chunks/index.js-XCtYQ9iw.js';
|
|
7
|
+
import './server/chunks/manifest.js-B6QH7eda.js';
|
|
8
8
|
import './env.js';
|
|
9
9
|
import 'node:buffer';
|
|
10
10
|
import 'node:crypto';
|
|
@@ -16,7 +16,7 @@ import './server/chunks/chunks/shared.js-HQ0rfhm4.js';
|
|
|
16
16
|
import './server/chunks/chunks/uneval.js-BJ9Qq2SF.js';
|
|
17
17
|
import './server/chunks/chunks/utils.js-CAdNO8Tu.js';
|
|
18
18
|
import 'node:url';
|
|
19
|
-
import './server/chunks/chunks/internal.js-
|
|
19
|
+
import './server/chunks/chunks/internal.js-CiymEM9G.js';
|
|
20
20
|
import './server/chunks/chunks/server.js-11-pxAWV.js';
|
|
21
21
|
import './server/chunks/chunks/internal2.js-BcS47nI-.js';
|
|
22
22
|
import './server/chunks/chunks/exports.js-DH_tjtdv.js';
|
package/build/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import http from 'node:http';
|
|
2
2
|
import fs__default from 'node:fs';
|
|
3
3
|
import process from 'node:process';
|
|
4
|
-
import { p as polka, h as handler, f as format_listening_address } from './server/chunks/handler-
|
|
4
|
+
import { p as polka, h as handler, f as format_listening_address } from './server/chunks/handler-DndMFIB-.js';
|
|
5
5
|
import { env, timeout_env } from './env.js';
|
|
6
6
|
import { rm } from 'node:fs/promises';
|
|
7
7
|
import './shims.js';
|
|
@@ -14,12 +14,12 @@ import 'node:stream';
|
|
|
14
14
|
import './server/chunks/chunks/shared.js-HQ0rfhm4.js';
|
|
15
15
|
import './server/chunks/chunks/uneval.js-BJ9Qq2SF.js';
|
|
16
16
|
import './server/chunks/chunks/utils.js-CAdNO8Tu.js';
|
|
17
|
-
import './server/chunks/index.js-
|
|
18
|
-
import './server/chunks/chunks/internal.js-
|
|
17
|
+
import './server/chunks/index.js-XCtYQ9iw.js';
|
|
18
|
+
import './server/chunks/chunks/internal.js-CiymEM9G.js';
|
|
19
19
|
import './server/chunks/chunks/server.js-11-pxAWV.js';
|
|
20
20
|
import './server/chunks/chunks/internal2.js-BcS47nI-.js';
|
|
21
21
|
import './server/chunks/chunks/exports.js-DH_tjtdv.js';
|
|
22
|
-
import './server/chunks/manifest.js-
|
|
22
|
+
import './server/chunks/manifest.js-B6QH7eda.js';
|
|
23
23
|
import 'node:url';
|
|
24
24
|
|
|
25
25
|
const path = env('SOCKET_PATH', false);
|
|
@@ -24,6 +24,19 @@ var RackEngineFailedError = class extends Error {
|
|
|
24
24
|
//#endregion
|
|
25
25
|
//#region src/lib/server/plugins/engine.ts
|
|
26
26
|
var execFileP = promisify(execFile);
|
|
27
|
+
/** The Plugin Garden (ADR 2026-10-07): owned plugins enumerate from the
|
|
28
|
+
* checkout's plugins/ directory. Dev runs from the repo root; override
|
|
29
|
+
* with RACK_GARDEN_PATH / RACK_GARDEN_REPO when the checkout lives elsewhere. */
|
|
30
|
+
function gardenArgs() {
|
|
31
|
+
const gardenPath = process.env.RACK_GARDEN_PATH ?? join(process.cwd(), "plugins");
|
|
32
|
+
const gardenRepo = process.env.RACK_GARDEN_REPO ?? "https://github.com/mitmplay/deepseek-insight";
|
|
33
|
+
return existsSync(gardenPath) ? [
|
|
34
|
+
"--garden",
|
|
35
|
+
gardenPath,
|
|
36
|
+
"--garden-repo",
|
|
37
|
+
gardenRepo
|
|
38
|
+
] : [];
|
|
39
|
+
}
|
|
27
40
|
/** Refresh is a local parse (no network harvest like the shelf) — one
|
|
28
41
|
* ceiling serves every verb. */
|
|
29
42
|
var ENGINE_TIMEOUT_MS = 12e4;
|
|
@@ -58,7 +71,7 @@ async function run(args, timeoutMs) {
|
|
|
58
71
|
} catch {
|
|
59
72
|
throw new RackEngineFailedError("rack engine emitted non-JSON output", null);
|
|
60
73
|
}
|
|
61
|
-
if (payload.v !==
|
|
74
|
+
if (payload.v !== 2) throw new RackEngineFailedError("rack engine wire version mismatch: v=" + payload.v + " (expected 2)", payload);
|
|
62
75
|
return payload;
|
|
63
76
|
}
|
|
64
77
|
function getRackEngine() {
|
|
@@ -71,6 +84,7 @@ function getRackEngine() {
|
|
|
71
84
|
const p = await run([
|
|
72
85
|
"refresh",
|
|
73
86
|
...reload ? ["--reload"] : [],
|
|
87
|
+
...gardenArgs(),
|
|
74
88
|
...extraArgs
|
|
75
89
|
]);
|
|
76
90
|
if (!p.snapshot) throw new RackEngineFailedError("rack refresh returned no snapshot", p);
|
|
@@ -85,6 +99,7 @@ function getRackEngine() {
|
|
|
85
99
|
"apply",
|
|
86
100
|
action,
|
|
87
101
|
...targets,
|
|
102
|
+
...gardenArgs(),
|
|
88
103
|
...extraArgs
|
|
89
104
|
]);
|
|
90
105
|
if (!p.results) throw new RackEngineFailedError("rack apply returned no results", p);
|
|
@@ -94,4 +109,4 @@ function getRackEngine() {
|
|
|
94
109
|
}
|
|
95
110
|
|
|
96
111
|
export { RackEngineMissingError as R, RackEngineFailedError as a, getRackEngine as g };
|
|
97
|
-
//# sourceMappingURL=engine.js-
|
|
112
|
+
//# sourceMappingURL=engine.js-1gYqtdBP.js.map
|
|
@@ -722,7 +722,7 @@ var options = {
|
|
|
722
722
|
app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"%paraglide.locale%\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"" + assets + "/favicon.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n " + head + "\n </head>\n <body data-sveltekit-preload-data=\"tap\">\n <div style=\"display: contents\">" + body + "</div>\n </body>\n</html>\n",
|
|
723
723
|
error: error_template_default
|
|
724
724
|
},
|
|
725
|
-
version_hash: "
|
|
725
|
+
version_hash: "iuka2g"
|
|
726
726
|
};
|
|
727
727
|
async function get_hooks() {
|
|
728
728
|
let handle;
|
|
@@ -745,4 +745,4 @@ async function get_hooks() {
|
|
|
745
745
|
}
|
|
746
746
|
|
|
747
747
|
export { __commonJSMin as _, set_public_env as a, set_read_implementation as b, onDestroy as c, __exportAll as d, get_hooks as g, index_server_exports as i, options as o, public_env as p, read_implementation as r, set_private_env as s };
|
|
748
|
-
//# sourceMappingURL=internal.js-
|
|
748
|
+
//# sourceMappingURL=internal.js-CiymEM9G.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as index_server_exports } from './internal.js-
|
|
1
|
+
import { i as index_server_exports } from './internal.js-CiymEM9G.js';
|
|
2
2
|
import './shared.js-HQ0rfhm4.js';
|
|
3
3
|
import './exports.js-DH_tjtdv.js';
|
|
4
4
|
import { U as snapshot, J as getContext, G as noop } from './server.js-11-pxAWV.js';
|
|
@@ -303,4 +303,4 @@ var page = {
|
|
|
303
303
|
};
|
|
304
304
|
|
|
305
305
|
export { afterNavigate as a, backtoworkspace2 as b, replaceState as c, dshunreachable1 as d, currentLocale as e, page as p, reapednote1 as r, sessionnotfound2 as s, t, unexpectederror1 as u };
|
|
306
|
-
//# sourceMappingURL=state.js-
|
|
306
|
+
//# sourceMappingURL=state.js-Dve2UFKe.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as getRackEngine, R as RackEngineMissingError, a as RackEngineFailedError } from '../../../../../chunks/engine.js-
|
|
1
|
+
import { g as getRackEngine, R as RackEngineMissingError, a as RackEngineFailedError } from '../../../../../chunks/engine.js-1gYqtdBP.js';
|
|
2
2
|
import { j as json } from '../../../../../chunks/utils.js-CAdNO8Tu.js';
|
|
3
3
|
import { existsSync, mkdirSync, appendFileSync, openSync, closeSync } from 'node:fs';
|
|
4
4
|
import { join, dirname } from 'node:path';
|
|
@@ -122,4 +122,4 @@ var POST = async ({ request }) => {
|
|
|
122
122
|
};
|
|
123
123
|
|
|
124
124
|
export { POST };
|
|
125
|
-
//# sourceMappingURL=_server.ts.js-
|
|
125
|
+
//# sourceMappingURL=_server.ts.js-BNEUWbaf.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as getRackEngine } from '../../../../../chunks/engine.js-
|
|
1
|
+
import { g as getRackEngine } from '../../../../../chunks/engine.js-1gYqtdBP.js';
|
|
2
2
|
import { f as fetchRackStars } from '../../../../../chunks/stars.js-C41Y0FsW.js';
|
|
3
3
|
import { j as json } from '../../../../../chunks/utils.js-CAdNO8Tu.js';
|
|
4
4
|
import 'node:fs';
|
|
@@ -35,4 +35,4 @@ var POST = async () => {
|
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
export { POST };
|
|
38
|
-
//# sourceMappingURL=_server.ts.js-
|
|
38
|
+
//# sourceMappingURL=_server.ts.js-Ct28d7_t.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as getRackEngine } from '../../../../../chunks/engine.js-
|
|
1
|
+
import { g as getRackEngine } from '../../../../../chunks/engine.js-1gYqtdBP.js';
|
|
2
2
|
import { f as fetchRackStars } from '../../../../../chunks/stars.js-C41Y0FsW.js';
|
|
3
3
|
import { j as json } from '../../../../../chunks/utils.js-CAdNO8Tu.js';
|
|
4
4
|
import 'node:fs';
|
|
@@ -37,4 +37,4 @@ var GET = async () => {
|
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
export { GET };
|
|
40
|
-
//# sourceMappingURL=_server.ts.js-
|
|
40
|
+
//# sourceMappingURL=_server.ts.js-DswGIO4S.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { V as head, W as escape_html, y as derived } from '../../chunks/server.js-11-pxAWV.js';
|
|
2
|
-
import { t, p as page, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, u as unexpectederror1, b as backtoworkspace2 } from '../../chunks/state.js-
|
|
2
|
+
import { t, p as page, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, u as unexpectederror1, b as backtoworkspace2 } from '../../chunks/state.js-Dve2UFKe.js';
|
|
3
3
|
import '../../chunks/uneval.js-BJ9Qq2SF.js';
|
|
4
|
-
import '../../chunks/internal.js-
|
|
4
|
+
import '../../chunks/internal.js-CiymEM9G.js';
|
|
5
5
|
import '../../chunks/shared.js-HQ0rfhm4.js';
|
|
6
6
|
import '../../chunks/exports.js-DH_tjtdv.js';
|
|
7
7
|
import '../../chunks/config.js-B0w1-uCA.js';
|
|
@@ -40,4 +40,4 @@ function _error($$renderer, $$props) {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
export { _error as default };
|
|
43
|
-
//# sourceMappingURL=_error.svelte.js-
|
|
43
|
+
//# sourceMappingURL=_error.svelte.js-DUc94aLg.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-
|
|
1
|
+
import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-CiymEM9G.js';
|
|
2
2
|
import { V as head, y as derived, X as bind_props, W as escape_html, Y as attr, Z as attr_style, _ as attr_class, x as setContext, $ as spread_props, a0 as attributes, a1 as clsx, a2 as ensure_array_like, a3 as element, J as getContext, a4 as stringify, a5 as html, F as run, a6 as props_id } from '../../chunks/server.js-11-pxAWV.js';
|
|
3
3
|
import { U as UI_LOCALES } from '../../chunks/config.js-B0w1-uCA.js';
|
|
4
4
|
import { m as mergeEntries, c as collapseSystemPromptEntries, t as truncate } from '../../chunks/dsh-events.js-D9tSYE7f.js';
|
|
@@ -7,7 +7,7 @@ import { b as applyKnobEvent, E as EMPTY_KNOBS, r as resolvePermission, l as loc
|
|
|
7
7
|
import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r.js';
|
|
8
8
|
import { a as appConfig, t as triggerMode, g as getTrigger, p as previewSegments, i as isValidTagWord, b as textPreviewOf, s as searchKey, c as shouldRecordPrompt, d as parseTagWords } from '../../chunks/app-config.svelte.js-BW7TwbBy.js';
|
|
9
9
|
import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
|
|
10
|
-
import { p as page, a as afterNavigate, t, c as replaceState, e as currentLocale, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-
|
|
10
|
+
import { p as page, a as afterNavigate, t, c as replaceState, e as currentLocale, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-Dve2UFKe.js';
|
|
11
11
|
import 'yaml';
|
|
12
12
|
import 'html-to-image';
|
|
13
13
|
import hljs from 'highlight.js/lib/core';
|
|
@@ -7798,6 +7798,38 @@ var pluginrackby2 = ((inputs = {}, options = {}) => {
|
|
|
7798
7798
|
return en_pluginrackby2();
|
|
7799
7799
|
});
|
|
7800
7800
|
//#endregion
|
|
7801
|
+
//#region src/lib/paraglide/messages/pluginrackcollapseall3.js
|
|
7802
|
+
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
7803
|
+
/** @typedef {{}} Pluginrackcollapseall3Inputs */
|
|
7804
|
+
var en_pluginrackcollapseall3 = () => {
|
|
7805
|
+
return `Collapse all`;
|
|
7806
|
+
};
|
|
7807
|
+
var zh_pluginrackcollapseall3 = () => {
|
|
7808
|
+
return `全部折叠`;
|
|
7809
|
+
};
|
|
7810
|
+
var id_pluginrackcollapseall3 = () => {
|
|
7811
|
+
return `Lipat semua`;
|
|
7812
|
+
};
|
|
7813
|
+
var es_pluginrackcollapseall3 = () => {
|
|
7814
|
+
return `Plegar todo`;
|
|
7815
|
+
};
|
|
7816
|
+
/**
|
|
7817
|
+
* | output |
|
|
7818
|
+
* | --- |
|
|
7819
|
+
* | "Collapse all" |
|
|
7820
|
+
*
|
|
7821
|
+
* @param {Pluginrackcollapseall3Inputs} inputs
|
|
7822
|
+
* @param {{ locale?: "en" | "zh" | "id" | "es" }} options
|
|
7823
|
+
* @returns {LocalizedString}
|
|
7824
|
+
*/
|
|
7825
|
+
var pluginrackcollapseall3 = ((inputs = {}, options = {}) => {
|
|
7826
|
+
const locale = options.locale ?? getLocale();
|
|
7827
|
+
if (locale === "zh") return zh_pluginrackcollapseall3();
|
|
7828
|
+
if (locale === "id") return id_pluginrackcollapseall3();
|
|
7829
|
+
if (locale === "es") return es_pluginrackcollapseall3();
|
|
7830
|
+
return en_pluginrackcollapseall3();
|
|
7831
|
+
});
|
|
7832
|
+
//#endregion
|
|
7801
7833
|
//#region src/lib/paraglide/messages/pluginrackempty2.js
|
|
7802
7834
|
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
7803
7835
|
/** @typedef {{}} Pluginrackempty2Inputs */
|
|
@@ -7830,6 +7862,102 @@ var pluginrackempty2 = ((inputs = {}, options = {}) => {
|
|
|
7830
7862
|
return en_pluginrackempty2();
|
|
7831
7863
|
});
|
|
7832
7864
|
//#endregion
|
|
7865
|
+
//#region src/lib/paraglide/messages/pluginrackexpandall3.js
|
|
7866
|
+
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
7867
|
+
/** @typedef {{}} Pluginrackexpandall3Inputs */
|
|
7868
|
+
var en_pluginrackexpandall3 = () => {
|
|
7869
|
+
return `Expand all`;
|
|
7870
|
+
};
|
|
7871
|
+
var zh_pluginrackexpandall3 = () => {
|
|
7872
|
+
return `全部展开`;
|
|
7873
|
+
};
|
|
7874
|
+
var id_pluginrackexpandall3 = () => {
|
|
7875
|
+
return `Buka semua`;
|
|
7876
|
+
};
|
|
7877
|
+
var es_pluginrackexpandall3 = () => {
|
|
7878
|
+
return `Expandir todo`;
|
|
7879
|
+
};
|
|
7880
|
+
/**
|
|
7881
|
+
* | output |
|
|
7882
|
+
* | --- |
|
|
7883
|
+
* | "Expand all" |
|
|
7884
|
+
*
|
|
7885
|
+
* @param {Pluginrackexpandall3Inputs} inputs
|
|
7886
|
+
* @param {{ locale?: "en" | "zh" | "id" | "es" }} options
|
|
7887
|
+
* @returns {LocalizedString}
|
|
7888
|
+
*/
|
|
7889
|
+
var pluginrackexpandall3 = ((inputs = {}, options = {}) => {
|
|
7890
|
+
const locale = options.locale ?? getLocale();
|
|
7891
|
+
if (locale === "zh") return zh_pluginrackexpandall3();
|
|
7892
|
+
if (locale === "id") return id_pluginrackexpandall3();
|
|
7893
|
+
if (locale === "es") return es_pluginrackexpandall3();
|
|
7894
|
+
return en_pluginrackexpandall3();
|
|
7895
|
+
});
|
|
7896
|
+
//#endregion
|
|
7897
|
+
//#region src/lib/paraglide/messages/pluginrackgroupexternal3.js
|
|
7898
|
+
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
7899
|
+
/** @typedef {{}} Pluginrackgroupexternal3Inputs */
|
|
7900
|
+
var en_pluginrackgroupexternal3 = () => {
|
|
7901
|
+
return `External rack`;
|
|
7902
|
+
};
|
|
7903
|
+
var zh_pluginrackgroupexternal3 = () => {
|
|
7904
|
+
return `外部插件架`;
|
|
7905
|
+
};
|
|
7906
|
+
var id_pluginrackgroupexternal3 = () => {
|
|
7907
|
+
return `Rak eksternal`;
|
|
7908
|
+
};
|
|
7909
|
+
var es_pluginrackgroupexternal3 = () => {
|
|
7910
|
+
return `Rack externo`;
|
|
7911
|
+
};
|
|
7912
|
+
/**
|
|
7913
|
+
* | output |
|
|
7914
|
+
* | --- |
|
|
7915
|
+
* | "External rack" |
|
|
7916
|
+
*
|
|
7917
|
+
* @param {Pluginrackgroupexternal3Inputs} inputs
|
|
7918
|
+
* @param {{ locale?: "en" | "zh" | "id" | "es" }} options
|
|
7919
|
+
* @returns {LocalizedString}
|
|
7920
|
+
*/
|
|
7921
|
+
var pluginrackgroupexternal3 = ((inputs = {}, options = {}) => {
|
|
7922
|
+
const locale = options.locale ?? getLocale();
|
|
7923
|
+
if (locale === "zh") return zh_pluginrackgroupexternal3();
|
|
7924
|
+
if (locale === "id") return id_pluginrackgroupexternal3();
|
|
7925
|
+
if (locale === "es") return es_pluginrackgroupexternal3();
|
|
7926
|
+
return en_pluginrackgroupexternal3();
|
|
7927
|
+
});
|
|
7928
|
+
//#endregion
|
|
7929
|
+
//#region src/lib/paraglide/messages/pluginrackgroupowned3.js
|
|
7930
|
+
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
7931
|
+
/** @typedef {{}} Pluginrackgroupowned3Inputs */
|
|
7932
|
+
var en_pluginrackgroupowned3 = () => {
|
|
7933
|
+
return `Owned plugins`;
|
|
7934
|
+
};
|
|
7935
|
+
var zh_pluginrackgroupowned3 = () => {
|
|
7936
|
+
return `自有插件`;
|
|
7937
|
+
};
|
|
7938
|
+
var id_pluginrackgroupowned3 = () => {
|
|
7939
|
+
return `Plugin milik sendiri`;
|
|
7940
|
+
};
|
|
7941
|
+
var es_pluginrackgroupowned3 = () => {
|
|
7942
|
+
return `Plugins propios`;
|
|
7943
|
+
};
|
|
7944
|
+
/**
|
|
7945
|
+
* | output |
|
|
7946
|
+
* | --- |
|
|
7947
|
+
* | "Owned plugins" |
|
|
7948
|
+
*
|
|
7949
|
+
* @param {Pluginrackgroupowned3Inputs} inputs
|
|
7950
|
+
* @param {{ locale?: "en" | "zh" | "id" | "es" }} options
|
|
7951
|
+
* @returns {LocalizedString}
|
|
7952
|
+
*/
|
|
7953
|
+
var pluginrackgroupowned3 = ((inputs = {}, options = {}) => {
|
|
7954
|
+
const locale = options.locale ?? getLocale();
|
|
7955
|
+
if (locale === "zh") return zh_pluginrackgroupowned3();
|
|
7956
|
+
if (locale === "id") return id_pluginrackgroupowned3();
|
|
7957
|
+
if (locale === "es") return es_pluginrackgroupowned3();
|
|
7958
|
+
return en_pluginrackgroupowned3();
|
|
7959
|
+
});
|
|
7960
|
+
//#endregion
|
|
7833
7961
|
//#region src/lib/paraglide/messages/pluginrackinstall2.js
|
|
7834
7962
|
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
7835
7963
|
/** @typedef {{}} Pluginrackinstall2Inputs */
|
|
@@ -13581,7 +13709,11 @@ var _index_exports = /* @__PURE__ */ __exportAll({
|
|
|
13581
13709
|
planMode: () => planmode1,
|
|
13582
13710
|
pluginRackApplying: () => pluginrackapplying2,
|
|
13583
13711
|
pluginRackBy: () => pluginrackby2,
|
|
13712
|
+
pluginRackCollapseAll: () => pluginrackcollapseall3,
|
|
13584
13713
|
pluginRackEmpty: () => pluginrackempty2,
|
|
13714
|
+
pluginRackExpandAll: () => pluginrackexpandall3,
|
|
13715
|
+
pluginRackGroupExternal: () => pluginrackgroupexternal3,
|
|
13716
|
+
pluginRackGroupOwned: () => pluginrackgroupowned3,
|
|
13585
13717
|
pluginRackInstall: () => pluginrackinstall2,
|
|
13586
13718
|
pluginRackInstallEmpty: () => pluginrackinstallempty3,
|
|
13587
13719
|
pluginRackInstalled: () => pluginrackinstalled2,
|
|
@@ -14007,7 +14139,11 @@ var messages_exports = /* @__PURE__ */ __exportAll({
|
|
|
14007
14139
|
planMode: () => planmode1,
|
|
14008
14140
|
pluginRackApplying: () => pluginrackapplying2,
|
|
14009
14141
|
pluginRackBy: () => pluginrackby2,
|
|
14142
|
+
pluginRackCollapseAll: () => pluginrackcollapseall3,
|
|
14010
14143
|
pluginRackEmpty: () => pluginrackempty2,
|
|
14144
|
+
pluginRackExpandAll: () => pluginrackexpandall3,
|
|
14145
|
+
pluginRackGroupExternal: () => pluginrackgroupexternal3,
|
|
14146
|
+
pluginRackGroupOwned: () => pluginrackgroupowned3,
|
|
14011
14147
|
pluginRackInstall: () => pluginrackinstall2,
|
|
14012
14148
|
pluginRackInstallEmpty: () => pluginrackinstallempty3,
|
|
14013
14149
|
pluginRackInstalled: () => pluginrackinstalled2,
|
|
@@ -28325,14 +28461,26 @@ function PluginManagerHeaderActions($$renderer, $$props) {
|
|
|
28325
28461
|
/**
|
|
28326
28462
|
* PluginManagerHeaderActions - the rack header's action cluster,
|
|
28327
28463
|
* the shelf HeaderActions' grammar (SettingsSkillsHeaderActions,
|
|
28328
|
-
* The Shelf Chrome ADR): the reload verb
|
|
28329
|
-
*
|
|
28464
|
+
* The Shelf Chrome ADR): the reload verb + the lineage-fold pill
|
|
28465
|
+
* (collapse-all / expand-all, sits AFTER the reload verb).
|
|
28466
|
+
* Presentational: every verb and all state are owned by
|
|
28467
|
+
* PluginManagerPanel.
|
|
28330
28468
|
*/
|
|
28331
28469
|
let { loading, floorBounce} = $$props;
|
|
28332
28470
|
$$renderer.push(`<div data-svelte="PluginManagerHeaderActions" class="rack-header-actions svelte-1g0idp7">`);
|
|
28333
28471
|
PluginManagerReloadButton($$renderer, {
|
|
28334
28472
|
disabled: loading || floorBounce});
|
|
28335
|
-
$$renderer.push(
|
|
28473
|
+
$$renderer.push(`<!----> <div class="seg-group svelte-1g0idp7" role="group" aria-label="Plugin Rack" data-testid="rack-fold-toggle"><button type="button" class="seg left svelte-1g0idp7" data-testid="rack-collapse-all">`);
|
|
28474
|
+
Chevrons_down_up($$renderer, {
|
|
28475
|
+
size: 12,
|
|
28476
|
+
"aria-hidden": "true"
|
|
28477
|
+
});
|
|
28478
|
+
$$renderer.push(`<!----></button> <button type="button" class="seg right svelte-1g0idp7" data-testid="rack-expand-all">`);
|
|
28479
|
+
Chevrons_up_down($$renderer, {
|
|
28480
|
+
size: 12,
|
|
28481
|
+
"aria-hidden": "true"
|
|
28482
|
+
});
|
|
28483
|
+
$$renderer.push(`<!----></button></div></div>`);
|
|
28336
28484
|
}
|
|
28337
28485
|
//#endregion
|
|
28338
28486
|
//#region src/lib/components/settings-plugins/PluginManagerHeader.svelte
|
|
@@ -31104,4 +31252,4 @@ function _page($$renderer, $$props) {
|
|
|
31104
31252
|
}
|
|
31105
31253
|
|
|
31106
31254
|
export { _page as default };
|
|
31107
|
-
//# sourceMappingURL=_page.svelte.js-
|
|
31255
|
+
//# sourceMappingURL=_page.svelte.js-CGKKJjvq.js.map
|
|
@@ -9,8 +9,8 @@ import * as qs from 'node:querystring';
|
|
|
9
9
|
import { Readable } from 'node:stream';
|
|
10
10
|
import { S as SvelteKitError } from './chunks/shared.js-HQ0rfhm4.js';
|
|
11
11
|
import './chunks/utils.js-CAdNO8Tu.js';
|
|
12
|
-
import { S as Server } from './index.js-
|
|
13
|
-
import { m as manifest } from './manifest.js-
|
|
12
|
+
import { S as Server } from './index.js-XCtYQ9iw.js';
|
|
13
|
+
import { m as manifest } from './manifest.js-B6QH7eda.js';
|
|
14
14
|
import { env, dir, env_prefix } from '../../env.js';
|
|
15
15
|
import { format } from 'node:url';
|
|
16
16
|
|
|
@@ -1732,4 +1732,4 @@ const handler = sequence(
|
|
|
1732
1732
|
);
|
|
1733
1733
|
|
|
1734
1734
|
export { format_listening_address as f, handler as h, polka as p };
|
|
1735
|
-
//# sourceMappingURL=handler-
|
|
1735
|
+
//# sourceMappingURL=handler-DndMFIB-.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as __commonJSMin, o as options, s as set_private_env, a as set_public_env, g as get_hooks, p as public_env, r as read_implementation, b as set_read_implementation } from './chunks/internal.js-
|
|
1
|
+
import { _ as __commonJSMin, o as options, s as set_private_env, a as set_public_env, g as get_hooks, p as public_env, r as read_implementation, b as set_read_implementation } from './chunks/internal.js-CiymEM9G.js';
|
|
2
2
|
import { n as noop, T as TRAILING_SLASH_PARAM, I as INVALIDATED_PARAM, R as Redirect, b as get_relative_path, S as SvelteKitError, g as get_status, t as text_encoder, o as once, H as HttpError, d as normalize_error, e as create_remote_key, f as parse_remote_arg, s as stringify, h as stringify$1, A as ActionFailure, i as split_remote_key, j as base64_encode } from './chunks/shared.js-HQ0rfhm4.js';
|
|
3
3
|
import { b as base, o as override, a as assets, r as reset, c as app_dir } from './chunks/internal2.js-BcS47nI-.js';
|
|
4
4
|
import { f as format_server_error, j as json, i as is_form_content_type, t as text, h as has_prerendered_path, a as handle_fatal_error, r as redirect_response, g as get_set_cookies, n as negotiate, w as with_request_store, p as parseString, m as merge_tracing, b as method_not_allowed, s as static_error_page, c as handle_error_and_jsonify, d as get_global_name, e as create_replacer, k as serialize_uses, l as clarify_devalue_error, E as ENDPOINT_METHODS, P as PAGE_METHODS, o as get_node_type, q as isRedirect, u as escape_html, v as error, x as deserialize_binary_form } from './chunks/utils.js-CAdNO8Tu.js';
|
|
@@ -3861,4 +3861,4 @@ var Server = class {
|
|
|
3861
3861
|
};
|
|
3862
3862
|
|
|
3863
3863
|
export { Server as S };
|
|
3864
|
-
//# sourceMappingURL=index.js-
|
|
3864
|
+
//# sourceMappingURL=index.js-XCtYQ9iw.js.map
|
|
@@ -10,11 +10,11 @@ return {
|
|
|
10
10
|
assets: new Set(["favicon.svg"]),
|
|
11
11
|
mimeTypes: {".svg":"image/svg+xml"},
|
|
12
12
|
_: {
|
|
13
|
-
client: {start:"_app/immutable/entry/start.
|
|
13
|
+
client: {start:"_app/immutable/entry/start.DMTgnn1w.js",app:"_app/immutable/entry/app.BTSQLfJD.js",imports:["_app/immutable/entry/start.DMTgnn1w.js","_app/immutable/chunks/XOquLDe4.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/entry/app.BTSQLfJD.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
|
|
14
14
|
nodes: [
|
|
15
15
|
__memo(() => import('./nodes/0.js-B0560RI0.js')),
|
|
16
|
-
__memo(() => import('./nodes/1.js-
|
|
17
|
-
__memo(() => import('./nodes/2.js-
|
|
16
|
+
__memo(() => import('./nodes/1.js-DgkiAL8m.js')),
|
|
17
|
+
__memo(() => import('./nodes/2.js-DiZQ86Is.js'))
|
|
18
18
|
],
|
|
19
19
|
remotes: {
|
|
20
20
|
|
|
@@ -242,21 +242,21 @@ return {
|
|
|
242
242
|
pattern: /^\/api\/plugins\/apply\/?$/,
|
|
243
243
|
params: [],
|
|
244
244
|
page: null,
|
|
245
|
-
endpoint: __memo(() => import('./entries/endpoints/api/plugins/apply/_server.ts.js-
|
|
245
|
+
endpoint: __memo(() => import('./entries/endpoints/api/plugins/apply/_server.ts.js-BNEUWbaf.js'))
|
|
246
246
|
},
|
|
247
247
|
{
|
|
248
248
|
id: "/api/plugins/reload",
|
|
249
249
|
pattern: /^\/api\/plugins\/reload\/?$/,
|
|
250
250
|
params: [],
|
|
251
251
|
page: null,
|
|
252
|
-
endpoint: __memo(() => import('./entries/endpoints/api/plugins/reload/_server.ts.js-
|
|
252
|
+
endpoint: __memo(() => import('./entries/endpoints/api/plugins/reload/_server.ts.js-Ct28d7_t.js'))
|
|
253
253
|
},
|
|
254
254
|
{
|
|
255
255
|
id: "/api/plugins/snapshot",
|
|
256
256
|
pattern: /^\/api\/plugins\/snapshot\/?$/,
|
|
257
257
|
params: [],
|
|
258
258
|
page: null,
|
|
259
|
-
endpoint: __memo(() => import('./entries/endpoints/api/plugins/snapshot/_server.ts.js-
|
|
259
|
+
endpoint: __memo(() => import('./entries/endpoints/api/plugins/snapshot/_server.ts.js-DswGIO4S.js'))
|
|
260
260
|
},
|
|
261
261
|
{
|
|
262
262
|
id: "/api/prompts",
|
|
@@ -445,4 +445,4 @@ return {
|
|
|
445
445
|
})();
|
|
446
446
|
|
|
447
447
|
export { manifest as m };
|
|
448
|
-
//# sourceMappingURL=manifest.js-
|
|
448
|
+
//# sourceMappingURL=manifest.js-B6QH7eda.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const index = 1;
|
|
2
|
+
let component_cache;
|
|
3
|
+
const component = async () => component_cache ??= (await import('../entries/pages/_error.svelte.js-DUc94aLg.js')).default;
|
|
4
|
+
const imports = ["_app/immutable/nodes/1.Bj5dhQm8.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/Dg3LIDOQ.js","_app/immutable/chunks/XOquLDe4.js","_app/immutable/chunks/DlfWhx6l.js"];
|
|
5
|
+
const stylesheets = [];
|
|
6
|
+
const fonts = [];
|
|
7
|
+
|
|
8
|
+
export { component, fonts, imports, index, stylesheets };
|
|
9
|
+
//# sourceMappingURL=1.js-DgkiAL8m.js.map
|
|
@@ -17,11 +17,11 @@ import '../chunks/uneval.js-BJ9Qq2SF.js';
|
|
|
17
17
|
|
|
18
18
|
const index = 2;
|
|
19
19
|
let component_cache;
|
|
20
|
-
const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js-
|
|
20
|
+
const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js-CGKKJjvq.js')).default;
|
|
21
21
|
const server_id = "src/routes/+page.server.ts";
|
|
22
|
-
const imports = ["_app/immutable/nodes/2.
|
|
23
|
-
const stylesheets = ["_app/immutable/assets/2.
|
|
22
|
+
const imports = ["_app/immutable/nodes/2.D2grr0LI.js","_app/immutable/chunks/C-58cZAk.js","_app/immutable/chunks/XOquLDe4.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/DlfWhx6l.js","_app/immutable/chunks/BLxS3bAX.js","_app/immutable/chunks/Dg3LIDOQ.js"];
|
|
23
|
+
const stylesheets = ["_app/immutable/assets/2.BuaCdYrs.css"];
|
|
24
24
|
const fonts = [];
|
|
25
25
|
|
|
26
26
|
export { component, fonts, imports, index, server_id, stylesheets };
|
|
27
|
-
//# sourceMappingURL=2.js-
|
|
27
|
+
//# sourceMappingURL=2.js-DiZQ86Is.js.map
|
package/package.json
CHANGED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dsi-add-plugin
|
|
3
|
+
description: Use when the user runs /dsi-add-plugin or asks to install/add a dsh plugin or an agent-preset into the web profile — covers the five install gates (allowBuilds, prepare, D4 manifest match, bundles mount, RPC verify), local-link vs git-hosted vs npm sources, and the post-install checklist that catches the bundles clobber.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# DSI Add Plugin — the five-gate install playbook
|
|
7
|
+
|
|
8
|
+
Installing a plugin or agent-preset into a dsh profile crosses **five gates**.
|
|
9
|
+
Every install failure this surface has ever produced was one gate failing
|
|
10
|
+
closed while every earlier gate already passed (RCA 2026-10-06, "The Install
|
|
11
|
+
That Fixed Its Way Forward"). Walk the gates IN ORDER; never retry an install
|
|
12
|
+
after a fix without checking the NEXT gate proactively — each fix historically
|
|
13
|
+
bought exactly one gate.
|
|
14
|
+
|
|
15
|
+
Read [references/checklist.md](references/checklist.md) first — it is the
|
|
16
|
+
step-by-step procedure with the exact commands. The other references are
|
|
17
|
+
lookup tables you open when a specific gate bites:
|
|
18
|
+
|
|
19
|
+
- [references/checklist.md](references/checklist.md) — the ordered procedure
|
|
20
|
+
(source classification → gates 1-5 → verify).
|
|
21
|
+
- [references/allowbuilds-template.md](references/allowbuilds-template.md) —
|
|
22
|
+
allowBuilds snippet shapes: exact sha key, wildcard bet, and the placeholder
|
|
23
|
+
trap to grep for.
|
|
24
|
+
- [references/verification.md](references/verification.md) — verification
|
|
25
|
+
commands: offline composition dump, live `agentPresets/list` RPC (with the
|
|
26
|
+
cookie mint), rack snapshot refresh.
|
|
27
|
+
|
|
28
|
+
## The gates, one line each
|
|
29
|
+
|
|
30
|
+
1. **Source** — classify what you are installing: npm package, git-hosted
|
|
31
|
+
repo, or local directory (link dep). The source decides which later gates
|
|
32
|
+
apply.
|
|
33
|
+
2. **allowBuilds (profile)** — the profile's `pnpm-workspace.yaml` must
|
|
34
|
+
allow every git-hosted package's build scripts. Keys for git packages are
|
|
35
|
+
sha-pinned: a new release means a new key.
|
|
36
|
+
3. **allowBuilds (package)** — a git-hosted package's own prepare runs its
|
|
37
|
+
own `pnpm install` under ITS OWN allowlist. Grep BOTH yaml files for
|
|
38
|
+
placeholder text before trusting any boolean.
|
|
39
|
+
4. **D4 manifest match** — after `dsh plugin add` succeeds, the profile
|
|
40
|
+
manifest must record a dependency whose repo tail matches the reff URL.
|
|
41
|
+
Reff lines point at REPOSITORY ROOTS, never `/tree/` browse pages.
|
|
42
|
+
5. **bundles mount** — dependencies install, `dsh.profile.bundles` mounts.
|
|
43
|
+
Every `dsh plugin add` REWRITES the bundles array to just the new plugin:
|
|
44
|
+
after any install, re-append every bundle that should still be mounted.
|
|
45
|
+
|
|
46
|
+
## Hard rules (earned 2026-10-06)
|
|
47
|
+
|
|
48
|
+
- NEVER hand-edit the manifest's `dependencies` for a dsh-managed plugin —
|
|
49
|
+
shell out to `dsh plugin add` (rack D3). Hand-edits are allowed only for
|
|
50
|
+
local link deps and the bundles array.
|
|
51
|
+
- NEVER trust the installer's success message as the finish line; the mount
|
|
52
|
+
and the RPC are the truth (D4).
|
|
53
|
+
- NEVER force-push; a rejected push stops the skill.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# allowBuilds — snippet shapes and the placeholder trap
|
|
2
|
+
|
|
3
|
+
Where: `~/.dsh/profiles/web/pnpm-workspace.yaml` (host profile) and the
|
|
4
|
+
SOURCE REPO's own `pnpm-workspace.yaml` (for git-hosted packages — their
|
|
5
|
+
prepare runs under their own allowlist).
|
|
6
|
+
|
|
7
|
+
## Shapes that work (pnpm 11.7)
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
allowBuilds:
|
|
11
|
+
# plain package name (local deps, transitive builds)
|
|
12
|
+
esbuild: true
|
|
13
|
+
node-pty: true
|
|
14
|
+
# git-hosted package, exact tarball sha — what the error prints verbatim
|
|
15
|
+
"@deepseek-insight/dsi@https://codeload.github.com/mitmplay/deepseek-insight/tar.gz/de43c9658dd2bc4221b116fc1420be167facb353": true
|
|
16
|
+
# wildcard bet — cover future shas of the same repo
|
|
17
|
+
"@deepseek-insight/dsi@https://codeload.github.com/mitmplay/**": true
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Keys with `: ` or spaces in them MUST be quoted.
|
|
21
|
+
|
|
22
|
+
## The placeholder trap (armed twice, 2026-10-06)
|
|
23
|
+
|
|
24
|
+
Both of these shipped in real yaml files and LOOK set while blocking:
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
esbuild: set this to true or false # a string, not a boolean — pnpm treats it as not-allowed
|
|
28
|
+
node-pty: set this to true or false
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Pre-flight grep — run against BOTH homes before any install:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
grep -rn 'set this to true' \
|
|
35
|
+
~/.dsh/profiles/web/pnpm-workspace.yaml \
|
|
36
|
+
<source-repo>/pnpm-workspace.yaml && echo 'PLACEHOLDER FOUND — fix before installing'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## The sha treadmill (git-hosted packages)
|
|
40
|
+
|
|
41
|
+
For a git tarball, pnpm's identity for the package embeds the commit sha, so
|
|
42
|
+
the exact key expires with the next release of that repo:
|
|
43
|
+
|
|
44
|
+
1. Fix anything in the source repo → commit → push → mirror.
|
|
45
|
+
2. The mirror's new HEAD is the new sha — ADD a new exact key for it (keep
|
|
46
|
+
the old ones; they are inert).
|
|
47
|
+
3. Keep the wildcard entry too; if pnpm honors it, future releases need
|
|
48
|
+
nothing (unproven as of 2026-10-06 — the exact key remains the fallback).
|
|
49
|
+
|
|
50
|
+
## pnpmapprove-builds note
|
|
51
|
+
|
|
52
|
+
`pnpm approve-builds` exists as the interactive alternative, but the
|
|
53
|
+
skill's path is hand-editing the yaml: the profile's file lives outside any
|
|
54
|
+
git repo and the edit is one line. Commit source-repo allowlist fixes
|
|
55
|
+
normally (they are real repo changes — d67419a is the exemplar).
|