opensip-cli 0.1.16 → 0.1.17
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/bootstrap/bootstrap-diagnostics-buffer.d.ts +1 -0
- package/dist/bootstrap/bootstrap-diagnostics-buffer.d.ts.map +1 -1
- package/dist/bootstrap/bootstrap-diagnostics-buffer.js +1 -0
- package/dist/bootstrap/bootstrap-diagnostics-buffer.js.map +1 -1
- package/dist/bootstrap/build-per-run-scope.d.ts +7 -0
- package/dist/bootstrap/build-per-run-scope.d.ts.map +1 -1
- package/dist/bootstrap/build-per-run-scope.js +11 -23
- package/dist/bootstrap/build-per-run-scope.js.map +1 -1
- package/dist/bootstrap/discovery-diagnostics.d.ts +2 -1
- package/dist/bootstrap/discovery-diagnostics.d.ts.map +1 -1
- package/dist/bootstrap/discovery-diagnostics.js +5 -5
- package/dist/bootstrap/discovery-diagnostics.js.map +1 -1
- package/dist/bootstrap/execute-post-bailout-bootstrap.d.ts.map +1 -1
- package/dist/bootstrap/execute-post-bailout-bootstrap.js +103 -65
- package/dist/bootstrap/execute-post-bailout-bootstrap.js.map +1 -1
- package/dist/bootstrap/index.d.ts +3 -0
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +41 -23
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/bootstrap/pre-action-runtime.d.ts +2 -0
- package/dist/bootstrap/pre-action-runtime.d.ts.map +1 -1
- package/dist/bootstrap/register-authored-tools.d.ts +7 -5
- package/dist/bootstrap/register-authored-tools.d.ts.map +1 -1
- package/dist/bootstrap/register-authored-tools.js +14 -9
- package/dist/bootstrap/register-authored-tools.js.map +1 -1
- package/dist/bootstrap/register-tools-discovery.d.ts +6 -1
- package/dist/bootstrap/register-tools-discovery.d.ts.map +1 -1
- package/dist/bootstrap/register-tools-discovery.js +17 -5
- package/dist/bootstrap/register-tools-discovery.js.map +1 -1
- package/dist/bootstrap/render.d.ts.map +1 -1
- package/dist/bootstrap/render.js +35 -11
- package/dist/bootstrap/render.js.map +1 -1
- package/dist/bootstrap/startup-timing.d.ts +16 -0
- package/dist/bootstrap/startup-timing.d.ts.map +1 -0
- package/dist/bootstrap/startup-timing.js +42 -0
- package/dist/bootstrap/startup-timing.js.map +1 -0
- package/dist/bootstrap/tool-trust.d.ts +46 -6
- package/dist/bootstrap/tool-trust.d.ts.map +1 -1
- package/dist/bootstrap/tool-trust.js +149 -7
- package/dist/bootstrap/tool-trust.js.map +1 -1
- package/dist/bootstrap/validate-tool.d.ts +2 -2
- package/dist/bootstrap/validate-tool.js +2 -2
- package/dist/commands/tools/create-templates.d.ts.map +1 -1
- package/dist/commands/tools/create-templates.js +7 -8
- package/dist/commands/tools/create-templates.js.map +1 -1
- package/dist/commands/tools/create.d.ts.map +1 -1
- package/dist/commands/tools/create.js +22 -6
- package/dist/commands/tools/create.js.map +1 -1
- package/dist/commands/tools/install.d.ts.map +1 -1
- package/dist/commands/tools/install.js +14 -4
- package/dist/commands/tools/install.js.map +1 -1
- package/dist/commands/tools/list.d.ts +1 -0
- package/dist/commands/tools/list.d.ts.map +1 -1
- package/dist/commands/tools/list.js +44 -7
- package/dist/commands/tools/list.js.map +1 -1
- package/dist/commands/tools/trust-config.d.ts +8 -0
- package/dist/commands/tools/trust-config.d.ts.map +1 -0
- package/dist/commands/tools/trust-config.js +64 -0
- package/dist/commands/tools/trust-config.js.map +1 -0
- package/dist/commands/tools/uninstall.d.ts.map +1 -1
- package/dist/commands/tools/uninstall.js +7 -0
- package/dist/commands/tools/uninstall.js.map +1 -1
- package/dist/env/host-env-specs.js +13 -13
- package/dist/env/host-env-specs.js.map +1 -1
- package/dist/error-handler.js +1 -1
- package/dist/error-handler.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ui/views/tools-views.d.ts.map +1 -1
- package/dist/ui/views/tools-views.js +5 -3
- package/dist/ui/views/tools-views.js.map +1 -1
- package/package.json +34 -34
package/dist/bootstrap/index.js
CHANGED
|
@@ -14,11 +14,12 @@
|
|
|
14
14
|
import { logger, resolveProjectContext, resolveProjectPaths, resolveUserPaths, } from '@opensip-cli/core';
|
|
15
15
|
import { hostEnv } from '../env/host-env-specs.js';
|
|
16
16
|
import { initTelemetry } from '../telemetry/sdk-init.js';
|
|
17
|
-
import { getBootstrapDiagnosticsBuffer, resetBootstrapDiagnosticsBuffer, takeBootstrapDiagnostics, } from './bootstrap-diagnostics-buffer.js';
|
|
17
|
+
import { createStartupTimer, getBootstrapDiagnosticsBuffer, resetBootstrapDiagnosticsBuffer, takeBootstrapDiagnostics, } from './bootstrap-diagnostics-buffer.js';
|
|
18
18
|
import { BOOTSTRAP_MODULE } from './constants.js';
|
|
19
19
|
import { registerLanguageAdapters } from './register-language-adapters.js';
|
|
20
|
-
import { BUNDLED_TOOL_PACKAGES,
|
|
20
|
+
import { BUNDLED_TOOL_PACKAGES, buildToolDiscoverySources, discoverAndRegisterAuthoredTools, discoverAndRegisterToolPackages, registerFirstPartyTools, } from './register-tools.js';
|
|
21
21
|
import { shouldSkipInstalledToolDiscovery } from './skip-installed-plugins.js';
|
|
22
|
+
import { readProjectTrustedToolIds } from './tool-trust.js';
|
|
22
23
|
// Re-export only the symbols the CLI composition root (`index.ts`) consumes.
|
|
23
24
|
export { mountAllToolCommands, EXPECTED_SCAFFOLDING_TOOL_IDS } from './register-tools.js';
|
|
24
25
|
// The shared admission callable (ADR-0041: one validator, four consumers) —
|
|
@@ -46,13 +47,14 @@ export { isRootVersionRequest } from './root-version.js';
|
|
|
46
47
|
* docs/plans/architecture/2026-05-23-plan-graph-adapter-package-split.md.
|
|
47
48
|
*/
|
|
48
49
|
export async function bootstrapCli(opts) {
|
|
50
|
+
const startupTimer = createStartupTimer();
|
|
49
51
|
// Telemetry first — before any tool runs — so provider registration happens
|
|
50
52
|
// once per process ahead of the first stage span. Hard no-op unless the OTLP
|
|
51
53
|
// endpoint env var is set (see telemetry/sdk-init.ts), so standalone startup
|
|
52
54
|
// is byte-for-byte unaffected.
|
|
53
|
-
initTelemetry(opts.cliEntryUrl);
|
|
54
|
-
resetBootstrapDiagnosticsBuffer();
|
|
55
|
-
registerLanguageAdapters(opts.langRegistry);
|
|
55
|
+
startupTimer.measure('telemetry-init', () => initTelemetry(opts.cliEntryUrl));
|
|
56
|
+
startupTimer.measure('bootstrap-diagnostics-reset', () => resetBootstrapDiagnosticsBuffer());
|
|
57
|
+
startupTimer.measure('language-adapters', () => registerLanguageAdapters(opts.langRegistry));
|
|
56
58
|
// Launch: bundled + installed tools both flow through the shared
|
|
57
59
|
// `admitTool` gate (register-tools.ts) and contribute a `ToolProvenance`
|
|
58
60
|
// record into this collector. It's a plain array threaded by value — no
|
|
@@ -74,13 +76,35 @@ export async function bootstrapCli(opts) {
|
|
|
74
76
|
// array (never undefined).
|
|
75
77
|
const skipBundled = new Set(hostEnv.get('OPENSIP_CLI_SKIP_BUNDLED'));
|
|
76
78
|
const bundledPackages = BUNDLED_TOOL_PACKAGES.filter((pkg) => !skipBundled.has(pkg.replace('@opensip-cli/', '')));
|
|
77
|
-
await registerFirstPartyTools(opts.toolRegistry, provenance, manifests, bundledPackages);
|
|
79
|
+
await startupTimer.measureAsync('first-party-tools', () => registerFirstPartyTools(opts.toolRegistry, provenance, manifests, bundledPackages));
|
|
78
80
|
// The bundled-tool ids discovery must skip on a name collision, derived from
|
|
79
81
|
// the manifests just loaded (not from an imported tool runtime — the host
|
|
80
82
|
// holds none in the launch contract).
|
|
81
83
|
const builtInIds = new Set(manifests.map((m) => m.id));
|
|
84
|
+
let projectRoot;
|
|
85
|
+
let projectAuthoredDir;
|
|
86
|
+
let projectTrustedTools = new Set();
|
|
87
|
+
startupTimer.measure('project-trust-context', () => {
|
|
88
|
+
try {
|
|
89
|
+
const project = resolveProjectContext({
|
|
90
|
+
cwd: opts.cwd,
|
|
91
|
+
cwdExplicit: false,
|
|
92
|
+
});
|
|
93
|
+
if (project.scope === 'project') {
|
|
94
|
+
projectRoot = project.projectRoot;
|
|
95
|
+
projectAuthoredDir = resolveProjectPaths(project.projectRoot).authoredToolsDir;
|
|
96
|
+
projectTrustedTools = readProjectTrustedToolIds(project.configPath);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// @swallow-ok no resolvable project context → no project-local trust state
|
|
101
|
+
// during startup discovery. The strict project-config read still happens
|
|
102
|
+
// later in per-run bootstrap for commands that enter a project scope.
|
|
103
|
+
}
|
|
104
|
+
});
|
|
82
105
|
const argv = opts.argv ?? [];
|
|
83
106
|
if (shouldSkipInstalledToolDiscovery(argv)) {
|
|
107
|
+
startupTimer.mark('installed-tool-discovery', { skipped: true });
|
|
84
108
|
logger.info({
|
|
85
109
|
evt: 'cli.tool.installed_discovery_skipped',
|
|
86
110
|
module: BOOTSTRAP_MODULE,
|
|
@@ -88,10 +112,12 @@ export async function bootstrapCli(opts) {
|
|
|
88
112
|
});
|
|
89
113
|
}
|
|
90
114
|
else {
|
|
91
|
-
await discoverAndRegisterToolPackages(opts.toolRegistry, {
|
|
115
|
+
await startupTimer.measureAsync('installed-tool-discovery', () => discoverAndRegisterToolPackages(opts.toolRegistry, {
|
|
92
116
|
sources: buildToolDiscoverySources(opts.cwd, opts.projectDir),
|
|
117
|
+
projectRoot,
|
|
118
|
+
projectTrustedTools,
|
|
93
119
|
bootstrapDiagnostics: getBootstrapDiagnosticsBuffer(),
|
|
94
|
-
}, builtInIds, provenance, manifests);
|
|
120
|
+
}, builtInIds, provenance, manifests));
|
|
95
121
|
}
|
|
96
122
|
// Authored Tool sidecars (ADR-0027 realization): global trusted-by-default +
|
|
97
123
|
// project deny-by-default. Resolve the two authored roots — the global root
|
|
@@ -101,21 +127,12 @@ export async function bootstrapCli(opts) {
|
|
|
101
127
|
// the installed leg's contract); the registry's first-writer-wins dedupes an
|
|
102
128
|
// authored-vs-installed same-id collision with a structured warning.
|
|
103
129
|
const globalAuthoredDir = resolveUserPaths().authoredToolsDir;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (project.scope === 'project') {
|
|
111
|
-
projectAuthoredDir = resolveProjectPaths(project.projectRoot).authoredToolsDir;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
// @swallow-ok no resolvable project context → no project authored leg
|
|
116
|
-
// (best-effort, same contract as buildToolDiscoverySources).
|
|
117
|
-
}
|
|
118
|
-
await discoverAndRegisterAuthoredTools(opts.toolRegistry, { projectAuthoredDir, globalAuthoredDir, env: process.env }, builtInIds, provenance, manifests);
|
|
130
|
+
await startupTimer.measureAsync('authored-tool-discovery', () => discoverAndRegisterAuthoredTools(opts.toolRegistry, {
|
|
131
|
+
projectAuthoredDir,
|
|
132
|
+
globalAuthoredDir,
|
|
133
|
+
env: process.env,
|
|
134
|
+
projectTrustedTools,
|
|
135
|
+
}, builtInIds, provenance, manifests));
|
|
119
136
|
// Graph adapters (and every other tool's capability domains) are no longer
|
|
120
137
|
// discovered here. The pre-action hook drives the generic capability loader
|
|
121
138
|
// per command for the invoked tool's declared domains (§5.3/§4.5) — no
|
|
@@ -124,6 +141,7 @@ export async function bootstrapCli(opts) {
|
|
|
124
141
|
provenance,
|
|
125
142
|
manifests,
|
|
126
143
|
bootstrapDiagnostics: takeBootstrapDiagnostics(),
|
|
144
|
+
startupTimings: startupTimer.events(),
|
|
127
145
|
};
|
|
128
146
|
}
|
|
129
147
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bootstrap/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GAMjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bootstrap/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { StartupTimingEvent } from './startup-timing.js';
|
|
1
2
|
import type { CliDiagnostic, LanguageRegistry, ToolPluginManifest, ToolProvenance, ToolRegistry } from '@opensip-cli/core';
|
|
2
3
|
/** Per-invocation bootstrap inputs captured in the pre-action hook closure. */
|
|
3
4
|
export interface PreActionRuntime {
|
|
@@ -6,5 +7,6 @@ export interface PreActionRuntime {
|
|
|
6
7
|
readonly manifests: readonly ToolPluginManifest[];
|
|
7
8
|
readonly provenance: readonly ToolProvenance[];
|
|
8
9
|
readonly bootstrapDiagnostics: readonly CliDiagnostic[];
|
|
10
|
+
readonly startupTimings?: readonly StartupTimingEvent[];
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=pre-action-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-action-runtime.d.ts","sourceRoot":"","sources":["../../src/bootstrap/pre-action-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,EAAE,SAAS,aAAa,EAAE,CAAC;CACzD"}
|
|
1
|
+
{"version":3,"file":"pre-action-runtime.d.ts","sourceRoot":"","sources":["../../src/bootstrap/pre-action-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,EAAE,SAAS,aAAa,EAAE,CAAC;IACxD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACzD"}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* file-length soft limit.
|
|
6
6
|
*
|
|
7
7
|
* Authored tools are authored CONTENT (a JSON sidecar, not an installed npm
|
|
8
|
-
* package): project-local is deny-by-default (
|
|
9
|
-
* `OPENSIP_CLI_ALLOW_PROJECT_TOOLS`), user-global is
|
|
10
|
-
* EXTERNAL provenance, so ADR-0054 M4-G applies: in the HOST the registration
|
|
8
|
+
* package): project-local is deny-by-default (trusted through `tools.trusted`
|
|
9
|
+
* or the `OPENSIP_CLI_ALLOW_PROJECT_TOOLS` override), user-global is
|
|
10
|
+
* trusted-by-default. Both are EXTERNAL provenance, so ADR-0054 M4-G applies: in the HOST the registration
|
|
11
11
|
* registers a manifest-derived synthetic `Tool` (no runtime import); the dispatch
|
|
12
12
|
* WORKER (`OPENSIP_CLI_IN_TOOL_WORKER=1`) imports the real runtime.
|
|
13
13
|
*/
|
|
@@ -16,15 +16,16 @@ import type { ToolAdmission } from './tool-admission-types.js';
|
|
|
16
16
|
export type AuthoredAdmission = ToolAdmission;
|
|
17
17
|
/**
|
|
18
18
|
* Admit or reject a PROJECT-LOCAL authored tool under the deny-by-default trust
|
|
19
|
-
* policy. The trust decision always precedes module import;
|
|
19
|
+
* policy. The trust decision always precedes module import; an untrusted
|
|
20
20
|
* tool fails closed before any authored code can run.
|
|
21
21
|
*
|
|
22
22
|
* @throws {PluginIncompatibleError} When the sidecar manifest is missing,
|
|
23
|
-
* malformed, incompatible, or not trusted by
|
|
23
|
+
* malformed, incompatible, or not trusted by project config / override.
|
|
24
24
|
*/
|
|
25
25
|
export declare function admitProjectLocalTool(args: {
|
|
26
26
|
readonly dir: string;
|
|
27
27
|
readonly env?: NodeJS.ProcessEnv;
|
|
28
|
+
readonly projectTrustedTools?: ReadonlySet<string>;
|
|
28
29
|
}): AuthoredAdmission;
|
|
29
30
|
/**
|
|
30
31
|
* Admit a USER-GLOBAL authored tool — trusted-by-default because the user placed
|
|
@@ -45,5 +46,6 @@ export declare function discoverAndRegisterAuthoredTools(registry: ToolRegistry,
|
|
|
45
46
|
readonly projectAuthoredDir?: string;
|
|
46
47
|
readonly globalAuthoredDir: string;
|
|
47
48
|
readonly env?: NodeJS.ProcessEnv;
|
|
49
|
+
readonly projectTrustedTools?: ReadonlySet<string>;
|
|
48
50
|
}, builtInIds: ReadonlySet<string>, provenance?: ToolProvenance[], manifests?: ToolPluginManifest[]): Promise<void>;
|
|
49
51
|
//# sourceMappingURL=register-authored-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-authored-tools.d.ts","sourceRoot":"","sources":["../../src/bootstrap/register-authored-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAOL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAsC9C;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"register-authored-tools.d.ts","sourceRoot":"","sources":["../../src/bootstrap/register-authored-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAOL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAsC9C;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpD,GAAG,iBAAiB,CAiBpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,iBAAiB,CAErF;AAED;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE;IACJ,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpD,EACD,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,UAAU,GAAE,cAAc,EAAO,EACjC,SAAS,GAAE,kBAAkB,EAAO,GACnC,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* file-length soft limit.
|
|
6
6
|
*
|
|
7
7
|
* Authored tools are authored CONTENT (a JSON sidecar, not an installed npm
|
|
8
|
-
* package): project-local is deny-by-default (
|
|
9
|
-
* `OPENSIP_CLI_ALLOW_PROJECT_TOOLS`), user-global is
|
|
10
|
-
* EXTERNAL provenance, so ADR-0054 M4-G applies: in the HOST the registration
|
|
8
|
+
* package): project-local is deny-by-default (trusted through `tools.trusted`
|
|
9
|
+
* or the `OPENSIP_CLI_ALLOW_PROJECT_TOOLS` override), user-global is
|
|
10
|
+
* trusted-by-default. Both are EXTERNAL provenance, so ADR-0054 M4-G applies: in the HOST the registration
|
|
11
11
|
* registers a manifest-derived synthetic `Tool` (no runtime import); the dispatch
|
|
12
12
|
* WORKER (`OPENSIP_CLI_IN_TOOL_WORKER=1`) imports the real runtime.
|
|
13
13
|
*/
|
|
@@ -42,20 +42,21 @@ function admitAuthoredTool(source, dir, preloadedManifest) {
|
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Admit or reject a PROJECT-LOCAL authored tool under the deny-by-default trust
|
|
45
|
-
* policy. The trust decision always precedes module import;
|
|
45
|
+
* policy. The trust decision always precedes module import; an untrusted
|
|
46
46
|
* tool fails closed before any authored code can run.
|
|
47
47
|
*
|
|
48
48
|
* @throws {PluginIncompatibleError} When the sidecar manifest is missing,
|
|
49
|
-
* malformed, incompatible, or not trusted by
|
|
49
|
+
* malformed, incompatible, or not trusted by project config / override.
|
|
50
50
|
*/
|
|
51
51
|
export function admitProjectLocalTool(args) {
|
|
52
52
|
const manifest = loadToolManifest('project-local', args.dir);
|
|
53
53
|
if (manifest === undefined) {
|
|
54
54
|
throw new PluginIncompatibleError(`project-local tool at '${args.dir}' has no conformant ${PROJECT_LOCAL_MANIFEST_FILE} sidecar`, { diagnostic: 'manifest missing or malformed' });
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
const trustedByConfig = args.projectTrustedTools?.has(manifest.id) === true;
|
|
57
|
+
if (!trustedByConfig && !isProjectLocalToolTrusted(manifest.id, args.env)) {
|
|
57
58
|
throw new PluginIncompatibleError(`project-local tool '${manifest.id}' is not trusted to load (deny-by-default). ` +
|
|
58
|
-
`
|
|
59
|
+
`List it in tools.trusted or use OPENSIP_CLI_ALLOW_PROJECT_TOOLS='${manifest.id}' to admit it.`, { diagnostic: 'project-local tool not trusted (deny-by-default)' });
|
|
59
60
|
}
|
|
60
61
|
return admitAuthoredTool('project-local', args.dir, manifest);
|
|
61
62
|
}
|
|
@@ -91,7 +92,11 @@ export async function discoverAndRegisterAuthoredTools(registry, opts, builtInId
|
|
|
91
92
|
for (const candidate of discoverAuthoredToolSidecars(opts.projectAuthoredDir)) {
|
|
92
93
|
await admitAndRegisterAuthored({
|
|
93
94
|
registry,
|
|
94
|
-
admission: admitProjectLocalTool({
|
|
95
|
+
admission: admitProjectLocalTool({
|
|
96
|
+
dir: candidate.dir,
|
|
97
|
+
env: opts.env,
|
|
98
|
+
projectTrustedTools: opts.projectTrustedTools,
|
|
99
|
+
}),
|
|
95
100
|
dir: candidate.dir,
|
|
96
101
|
builtInIds,
|
|
97
102
|
provenance,
|
|
@@ -111,7 +116,7 @@ async function admitAndRegisterAuthored(args) {
|
|
|
111
116
|
// a manifest-derived synthetic Tool — never import the untrusted runtime. The
|
|
112
117
|
// dispatch WORKER imports the real runtime (the isolation boundary). The trust
|
|
113
118
|
// gate already ran in `admitProjectLocalTool` (deny-by-default), so a
|
|
114
|
-
//
|
|
119
|
+
// untrusted tool never reaches here.
|
|
115
120
|
if (isHostRuntimeImportForbidden(env)) {
|
|
116
121
|
const tool = synthesizeExternalTool(manifest);
|
|
117
122
|
registry.register(tool);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-authored-tools.js","sourceRoot":"","sources":["../../src/bootstrap/register-authored-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,SAAS,EACT,yBAAyB,EACzB,4BAA4B,EAC5B,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,GAK5B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAM5D;;;;;;;GAOG;AACH,SAAS,iBAAiB,CACxB,MAAkB,EAClB,GAAW,EACX,iBAAuD;IAEvD,MAAM,WAAW,GAAG,iBAAiB,IAAI,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,uBAAuB,CAC/B,GAAG,MAAM,aAAa,GAAG,uBAAuB,2BAA2B,UAAU,EACrF,EAAE,UAAU,EAAE,+BAA+B,EAAE,CAChD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC;QACvB,QAAQ,EAAE,WAAW;QACrB,MAAM;QACN,GAAG;QACH,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,uBAAuB,CAC/B,GAAG,MAAM,UAAU,WAAW,CAAC,EAAE,sBAAsB,MAAM,CAAC,UAAU,IAAI,gCAAgC,EAAE,EAC9G,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAClC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"register-authored-tools.js","sourceRoot":"","sources":["../../src/bootstrap/register-authored-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { type BootstrapDiagnosticsCollector, type ToolPluginManifest, type ToolProvenance, type ToolRegistry, type ToolDiscoverySource } from '@opensip-cli/core';
|
|
8
8
|
import { type ToolRuntimeLoad } from './admit-tool-package.js';
|
|
9
|
+
import { type ToolTrustReason } from './tool-trust.js';
|
|
9
10
|
/**
|
|
10
11
|
* Emit the best-effort stderr line + structured warning for a discovered
|
|
11
12
|
* INSTALLED tool whose runtime failed to load. Each failure reason maps to its
|
|
12
13
|
* own diagnostic while preserving the installed leg's skip-not-crash posture.
|
|
13
14
|
*/
|
|
14
15
|
/** Record + structured log when an installed tool is skipped by the trust gate. */
|
|
15
|
-
export declare function emitInstalledTrustDenied(toolId: string, packageName: string, packageDir: string, collector?: BootstrapDiagnosticsCollector): void;
|
|
16
|
+
export declare function emitInstalledTrustDenied(toolId: string, packageName: string, packageDir: string, reason?: ToolTrustReason, collector?: BootstrapDiagnosticsCollector): void;
|
|
16
17
|
export declare function emitInstalledLoadFailure(name: string, load: Extract<ToolRuntimeLoad, {
|
|
17
18
|
ok: false;
|
|
18
19
|
}>, collector?: BootstrapDiagnosticsCollector): void;
|
|
@@ -26,6 +27,10 @@ export interface DiscoveryOptions {
|
|
|
26
27
|
readonly sources: readonly ToolDiscoverySource[];
|
|
27
28
|
/** Injectable env for installed-tool trust (bootstrap-time; defaults to `process.env`). */
|
|
28
29
|
readonly env?: NodeJS.ProcessEnv;
|
|
30
|
+
/** Project root for project-local managed-install trust checks. */
|
|
31
|
+
readonly projectRoot?: string;
|
|
32
|
+
/** Tool ids from project config `tools.trusted`. */
|
|
33
|
+
readonly projectTrustedTools?: ReadonlySet<string>;
|
|
29
34
|
/** Optional bootstrap diagnostics sink (defaults to the process-wide buffer). */
|
|
30
35
|
readonly bootstrapDiagnostics?: BootstrapDiagnosticsCollector;
|
|
31
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-tools-discovery.d.ts","sourceRoot":"","sources":["../../src/bootstrap/register-tools-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EASL,KAAK,6BAA6B,EAClC,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-tools-discovery.d.ts","sourceRoot":"","sources":["../../src/bootstrap/register-tools-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EASL,KAAK,6BAA6B,EAClC,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAoDlF;;;;GAIG;AACH,mFAAmF;AACnF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,eAA0B,EAClC,SAAS,CAAC,EAAE,6BAA6B,GACxC,IAAI,CAUN;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,EAC7C,SAAS,CAAC,EAAE,6BAA6B,GACxC,IAAI,CAoBN;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,2FAA2F;IAC3F,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnD,iFAAiF;IACjF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;CAC/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,GACpB,mBAAmB,EAAE,CAqBvB;AAuHD,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,UAAU,GAAE,cAAc,EAAO,EACjC,SAAS,GAAE,kBAAkB,EAAO,GACnC,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|
|
@@ -11,7 +11,7 @@ import { BOOTSTRAP_MODULE } from './constants.js';
|
|
|
11
11
|
import { recordInstalledCatchFailure, recordInstalledLoadFailure, recordInstalledManifestInvalid, recordInstalledTrustDenied, } from './discovery-diagnostics.js';
|
|
12
12
|
import { synthesizeExternalTool } from './synthesize-external-tool.js';
|
|
13
13
|
import { isHostRuntimeImportForbidden } from './tool-provenance.js';
|
|
14
|
-
import {
|
|
14
|
+
import { resolveInstalledToolTrust } from './tool-trust.js';
|
|
15
15
|
const BUNDLED_PACKAGE_NAMES = new Set(BUNDLED_TOOL_PACKAGES);
|
|
16
16
|
/**
|
|
17
17
|
* Run the admission gate over a discovered INSTALLED tool package before its
|
|
@@ -61,14 +61,15 @@ function admitInstalledTool(pkg, builtInIds, collector) {
|
|
|
61
61
|
* own diagnostic while preserving the installed leg's skip-not-crash posture.
|
|
62
62
|
*/
|
|
63
63
|
/** Record + structured log when an installed tool is skipped by the trust gate. */
|
|
64
|
-
export function emitInstalledTrustDenied(toolId, packageName, packageDir, collector) {
|
|
65
|
-
recordInstalledTrustDenied(toolId, packageName, packageDir, collector);
|
|
64
|
+
export function emitInstalledTrustDenied(toolId, packageName, packageDir, reason = 'denied', collector) {
|
|
65
|
+
recordInstalledTrustDenied(toolId, packageName, packageDir, reason, collector);
|
|
66
66
|
logger.warn({
|
|
67
67
|
evt: 'cli.tool.installed_trust_denied',
|
|
68
68
|
module: BOOTSTRAP_MODULE,
|
|
69
69
|
toolId,
|
|
70
70
|
packageName,
|
|
71
71
|
packageDir,
|
|
72
|
+
reason,
|
|
72
73
|
});
|
|
73
74
|
}
|
|
74
75
|
export function emitInstalledLoadFailure(name, load, collector) {
|
|
@@ -149,8 +150,17 @@ async function registerDiscoveredInstalledPackage(pkg, args) {
|
|
|
149
150
|
const admission = admitInstalledTool(pkg, args.builtInIds, args.bootstrapDiagnostics);
|
|
150
151
|
if (admission === undefined)
|
|
151
152
|
return;
|
|
152
|
-
|
|
153
|
-
|
|
153
|
+
const trust = resolveInstalledToolTrust({
|
|
154
|
+
toolId: admission.manifest.id,
|
|
155
|
+
packageName: pkg.name,
|
|
156
|
+
packageDir: pkg.packageDir,
|
|
157
|
+
manifestHash: admission.provenance.manifestHash,
|
|
158
|
+
env: args.env,
|
|
159
|
+
projectRoot: args.projectRoot,
|
|
160
|
+
projectTrustedTools: args.projectTrustedTools,
|
|
161
|
+
});
|
|
162
|
+
if (!trust.trusted) {
|
|
163
|
+
emitInstalledTrustDenied(admission.manifest.id, pkg.name, pkg.packageDir, trust.reason, args.bootstrapDiagnostics);
|
|
154
164
|
return;
|
|
155
165
|
}
|
|
156
166
|
// ADR-0054 M4-G (capstone): in the HOST, NEVER import the external runtime —
|
|
@@ -220,6 +230,8 @@ export async function discoverAndRegisterToolPackages(registry, opts, builtInIds
|
|
|
220
230
|
registry,
|
|
221
231
|
builtInIds,
|
|
222
232
|
env,
|
|
233
|
+
projectRoot: opts.projectRoot,
|
|
234
|
+
projectTrustedTools: opts.projectTrustedTools,
|
|
223
235
|
registeredStableIds,
|
|
224
236
|
provenance,
|
|
225
237
|
manifests,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-tools-discovery.js","sourceRoot":"","sources":["../../src/bootstrap/register-tools-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,SAAS,EACT,yBAAyB,EACzB,+BAA+B,EAC/B,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GAMjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iBAAiB,EACjB,4BAA4B,GAE7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"register-tools-discovery.js","sourceRoot":"","sources":["../../src/bootstrap/register-tools-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/bootstrap/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/bootstrap/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAM5D;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDvE"}
|
package/dist/bootstrap/render.js
CHANGED
|
@@ -13,7 +13,11 @@
|
|
|
13
13
|
* React/Ink at startup — the hot `opensip fit --json` path (which
|
|
14
14
|
* uses `emitJson`, never this seam) stays React-free.
|
|
15
15
|
*/
|
|
16
|
+
import { performance } from 'node:perf_hooks';
|
|
16
17
|
import { currentScope } from '@opensip-cli/core';
|
|
18
|
+
function elapsedMsSince(startedAt) {
|
|
19
|
+
return Math.round((performance.now() - startedAt) * 10) / 10;
|
|
20
|
+
}
|
|
17
21
|
/**
|
|
18
22
|
* Render a `CommandResult` to the terminal, choosing Ink (TTY) or plain
|
|
19
23
|
* text (non-TTY) at this single seam.
|
|
@@ -24,7 +28,11 @@ import { currentScope } from '@opensip-cli/core';
|
|
|
24
28
|
* path emits no banner or project line by design (clean pipes/CI logs).
|
|
25
29
|
*/
|
|
26
30
|
export async function renderResult(result) {
|
|
31
|
+
const renderStartedAt = performance.now();
|
|
27
32
|
const scope = currentScope();
|
|
33
|
+
scope?.diagnostics.event('render', 'debug', 'static render started', {
|
|
34
|
+
tty: process.stdout.isTTY === true,
|
|
35
|
+
});
|
|
28
36
|
const project = scope?.projectContext;
|
|
29
37
|
const projectHeader = project?.scope === 'project'
|
|
30
38
|
? { root: project.projectRoot, walkedUp: project.walkedUp }
|
|
@@ -36,18 +44,34 @@ export async function renderResult(result) {
|
|
|
36
44
|
// — CI output should still record which root was analyzed and how it was
|
|
37
45
|
// found. `error` stays terse (no project line), matching the TTY shell.
|
|
38
46
|
if (!process.stdout.isTTY) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
try {
|
|
48
|
+
const [{ resultToView }, { renderToText, viewProjectHeader, group }] = await Promise.all([
|
|
49
|
+
import('../ui/result-to-view.js'),
|
|
50
|
+
import('@opensip-cli/cli-ui'),
|
|
51
|
+
]);
|
|
52
|
+
const body = resultToView(result);
|
|
53
|
+
const node = projectHeader !== undefined && result.type !== 'error'
|
|
54
|
+
? group([viewProjectHeader(projectHeader), { kind: 'spacer' }, body])
|
|
55
|
+
: body;
|
|
56
|
+
process.stdout.write(`${renderToText(node)}\n`);
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
scope?.diagnostics.event('render', 'debug', 'static render completed', {
|
|
60
|
+
tty: false,
|
|
61
|
+
durationMs: elapsedMsSince(renderStartedAt),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
48
64
|
return;
|
|
49
65
|
}
|
|
50
|
-
|
|
51
|
-
|
|
66
|
+
try {
|
|
67
|
+
const { renderApp } = await import('../ui/render.js');
|
|
68
|
+
await renderApp(result, projectHeader, ui);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
scope?.diagnostics.event('render', 'debug', 'static render completed', {
|
|
72
|
+
tty: true,
|
|
73
|
+
durationMs: elapsedMsSince(renderStartedAt),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
52
76
|
}
|
|
53
77
|
//# sourceMappingURL=render.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/bootstrap/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAqB;IACtD,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,EAAE,cAAc,CAAC;IACtC,MAAM,aAAa,GACjB,OAAO,EAAE,KAAK,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;QAC3D,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC;IAErB,sEAAsE;IACtE,kEAAkE;IAClE,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/bootstrap/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD,SAAS,cAAc,CAAC,SAAiB;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAqB;IACtD,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,uBAAuB,EAAE;QACnE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;KACnC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,KAAK,EAAE,cAAc,CAAC;IACtC,MAAM,aAAa,GACjB,OAAO,EAAE,KAAK,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;QAC3D,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC;IAErB,sEAAsE;IACtE,kEAAkE;IAClE,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvF,MAAM,CAAC,yBAAyB,CAAC;gBACjC,MAAM,CAAC,qBAAqB,CAAC;aAC9B,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GACR,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;gBACpD,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;gBACrE,CAAC,CAAC,IAAI,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;gBAAS,CAAC;YACT,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBACrE,GAAG,EAAE,KAAK;gBACV,UAAU,EAAE,cAAc,CAAC,eAAe,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE;YACrE,GAAG,EAAE,IAAI;YACT,UAAU,EAAE,cAAc,CAAC,eAAe,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface StartupTimingEvent {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly durationMs: number;
|
|
4
|
+
readonly sinceStartMs: number;
|
|
5
|
+
readonly skipped?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface StartupTimer {
|
|
8
|
+
readonly mark: (name: string, opts?: {
|
|
9
|
+
readonly skipped?: boolean;
|
|
10
|
+
}) => void;
|
|
11
|
+
readonly measure: <T>(name: string, fn: () => T) => T;
|
|
12
|
+
readonly measureAsync: <T>(name: string, fn: () => Promise<T>) => Promise<T>;
|
|
13
|
+
readonly events: () => readonly StartupTimingEvent[];
|
|
14
|
+
}
|
|
15
|
+
export declare function createStartupTimer(): StartupTimer;
|
|
16
|
+
//# sourceMappingURL=startup-timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-timing.d.ts","sourceRoot":"","sources":["../../src/bootstrap/startup-timing.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,kBAAkB,EAAE,CAAC;CACtD;AAMD,wBAAgB,kBAAkB,IAAI,YAAY,CAoCjD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { performance } from 'node:perf_hooks';
|
|
2
|
+
function roundMs(value) {
|
|
3
|
+
return Math.round(value * 10) / 10;
|
|
4
|
+
}
|
|
5
|
+
export function createStartupTimer() {
|
|
6
|
+
const startedAt = performance.now();
|
|
7
|
+
const events = [];
|
|
8
|
+
function push(name, phaseStartedAt, skipped) {
|
|
9
|
+
const now = performance.now();
|
|
10
|
+
events.push({
|
|
11
|
+
name,
|
|
12
|
+
durationMs: roundMs(now - phaseStartedAt),
|
|
13
|
+
sinceStartMs: roundMs(now - startedAt),
|
|
14
|
+
...(skipped === true ? { skipped: true } : {}),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
mark: (name, opts) => {
|
|
19
|
+
push(name, performance.now(), opts?.skipped);
|
|
20
|
+
},
|
|
21
|
+
measure: (name, fn) => {
|
|
22
|
+
const phaseStartedAt = performance.now();
|
|
23
|
+
try {
|
|
24
|
+
return fn();
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
push(name, phaseStartedAt);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
measureAsync: async (name, fn) => {
|
|
31
|
+
const phaseStartedAt = performance.now();
|
|
32
|
+
try {
|
|
33
|
+
return await fn();
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
push(name, phaseStartedAt);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
events: () => [...events],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=startup-timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-timing.js","sourceRoot":"","sources":["../../src/bootstrap/startup-timing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgB9C,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,SAAS,IAAI,CAAC,IAAY,EAAE,cAAsB,EAAE,OAAiB;QACnE,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,UAAU,EAAE,OAAO,CAAC,GAAG,GAAG,cAAc,CAAC;YACzC,YAAY,EAAE,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;YACtC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACnB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;YACpB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,OAAO,EAAE,EAAE,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;YAC/B,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;KAC1B,CAAC;AACJ,CAAC"}
|