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.
Files changed (72) hide show
  1. package/dist/bootstrap/bootstrap-diagnostics-buffer.d.ts +1 -0
  2. package/dist/bootstrap/bootstrap-diagnostics-buffer.d.ts.map +1 -1
  3. package/dist/bootstrap/bootstrap-diagnostics-buffer.js +1 -0
  4. package/dist/bootstrap/bootstrap-diagnostics-buffer.js.map +1 -1
  5. package/dist/bootstrap/build-per-run-scope.d.ts +7 -0
  6. package/dist/bootstrap/build-per-run-scope.d.ts.map +1 -1
  7. package/dist/bootstrap/build-per-run-scope.js +11 -23
  8. package/dist/bootstrap/build-per-run-scope.js.map +1 -1
  9. package/dist/bootstrap/discovery-diagnostics.d.ts +2 -1
  10. package/dist/bootstrap/discovery-diagnostics.d.ts.map +1 -1
  11. package/dist/bootstrap/discovery-diagnostics.js +5 -5
  12. package/dist/bootstrap/discovery-diagnostics.js.map +1 -1
  13. package/dist/bootstrap/execute-post-bailout-bootstrap.d.ts.map +1 -1
  14. package/dist/bootstrap/execute-post-bailout-bootstrap.js +103 -65
  15. package/dist/bootstrap/execute-post-bailout-bootstrap.js.map +1 -1
  16. package/dist/bootstrap/index.d.ts +3 -0
  17. package/dist/bootstrap/index.d.ts.map +1 -1
  18. package/dist/bootstrap/index.js +41 -23
  19. package/dist/bootstrap/index.js.map +1 -1
  20. package/dist/bootstrap/pre-action-runtime.d.ts +2 -0
  21. package/dist/bootstrap/pre-action-runtime.d.ts.map +1 -1
  22. package/dist/bootstrap/register-authored-tools.d.ts +7 -5
  23. package/dist/bootstrap/register-authored-tools.d.ts.map +1 -1
  24. package/dist/bootstrap/register-authored-tools.js +14 -9
  25. package/dist/bootstrap/register-authored-tools.js.map +1 -1
  26. package/dist/bootstrap/register-tools-discovery.d.ts +6 -1
  27. package/dist/bootstrap/register-tools-discovery.d.ts.map +1 -1
  28. package/dist/bootstrap/register-tools-discovery.js +17 -5
  29. package/dist/bootstrap/register-tools-discovery.js.map +1 -1
  30. package/dist/bootstrap/render.d.ts.map +1 -1
  31. package/dist/bootstrap/render.js +35 -11
  32. package/dist/bootstrap/render.js.map +1 -1
  33. package/dist/bootstrap/startup-timing.d.ts +16 -0
  34. package/dist/bootstrap/startup-timing.d.ts.map +1 -0
  35. package/dist/bootstrap/startup-timing.js +42 -0
  36. package/dist/bootstrap/startup-timing.js.map +1 -0
  37. package/dist/bootstrap/tool-trust.d.ts +46 -6
  38. package/dist/bootstrap/tool-trust.d.ts.map +1 -1
  39. package/dist/bootstrap/tool-trust.js +149 -7
  40. package/dist/bootstrap/tool-trust.js.map +1 -1
  41. package/dist/bootstrap/validate-tool.d.ts +2 -2
  42. package/dist/bootstrap/validate-tool.js +2 -2
  43. package/dist/commands/tools/create-templates.d.ts.map +1 -1
  44. package/dist/commands/tools/create-templates.js +7 -8
  45. package/dist/commands/tools/create-templates.js.map +1 -1
  46. package/dist/commands/tools/create.d.ts.map +1 -1
  47. package/dist/commands/tools/create.js +22 -6
  48. package/dist/commands/tools/create.js.map +1 -1
  49. package/dist/commands/tools/install.d.ts.map +1 -1
  50. package/dist/commands/tools/install.js +14 -4
  51. package/dist/commands/tools/install.js.map +1 -1
  52. package/dist/commands/tools/list.d.ts +1 -0
  53. package/dist/commands/tools/list.d.ts.map +1 -1
  54. package/dist/commands/tools/list.js +44 -7
  55. package/dist/commands/tools/list.js.map +1 -1
  56. package/dist/commands/tools/trust-config.d.ts +8 -0
  57. package/dist/commands/tools/trust-config.d.ts.map +1 -0
  58. package/dist/commands/tools/trust-config.js +64 -0
  59. package/dist/commands/tools/trust-config.js.map +1 -0
  60. package/dist/commands/tools/uninstall.d.ts.map +1 -1
  61. package/dist/commands/tools/uninstall.js +7 -0
  62. package/dist/commands/tools/uninstall.js.map +1 -1
  63. package/dist/env/host-env-specs.js +13 -13
  64. package/dist/env/host-env-specs.js.map +1 -1
  65. package/dist/error-handler.js +1 -1
  66. package/dist/error-handler.js.map +1 -1
  67. package/dist/index.js +2 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/ui/views/tools-views.d.ts.map +1 -1
  70. package/dist/ui/views/tools-views.js +5 -3
  71. package/dist/ui/views/tools-views.js.map +1 -1
  72. package/package.json +34 -34
@@ -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, registerFirstPartyTools, discoverAndRegisterToolPackages, discoverAndRegisterAuthoredTools, buildToolDiscoverySources, } from './register-tools.js';
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
- let projectAuthoredDir;
105
- try {
106
- const project = resolveProjectContext({
107
- cwd: opts.cwd,
108
- cwdExplicit: false,
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":"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"}
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 (allowlisted via
9
- * `OPENSIP_CLI_ALLOW_PROJECT_TOOLS`), user-global is trusted-by-default. Both are
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; a non-allowlisted
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 the project-tool allowlist.
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;CAClC,GAAG,iBAAiB,CAgBpB;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;CAClC,EACD,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,UAAU,GAAE,cAAc,EAAO,EACjC,SAAS,GAAE,kBAAkB,EAAO,GACnC,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
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 (allowlisted via
9
- * `OPENSIP_CLI_ALLOW_PROJECT_TOOLS`), user-global is trusted-by-default. Both are
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; a non-allowlisted
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 the project-tool allowlist.
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
- if (!isProjectLocalToolTrusted(manifest.id, args.env)) {
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
- `Allowlist it via OPENSIP_CLI_ALLOW_PROJECT_TOOLS='${manifest.id}' to admit it.`, { diagnostic: 'project-local tool not allowlisted (deny-by-default)' });
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({ dir: candidate.dir, env: opts.env }),
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
- // non-allowlisted tool never reaches here.
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":"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"}
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,IAIrC;IACC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,uBAAuB,CAC/B,0BAA0B,IAAI,CAAC,GAAG,uBAAuB,2BAA2B,UAAU,EAC9F,EAAE,UAAU,EAAE,+BAA+B,EAAE,CAChD,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5E,IAAI,CAAC,eAAe,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,uBAAuB,CAC/B,uBAAuB,QAAQ,CAAC,EAAE,8CAA8C;YAC9E,oEAAoE,QAAQ,CAAC,EAAE,gBAAgB,EACjG,EAAE,UAAU,EAAE,kDAAkD,EAAE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,iBAAiB,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA8B;IAChE,OAAO,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,QAAsB,EACtB,IAKC,EACD,UAA+B,EAC/B,aAA+B,EAAE,EACjC,YAAkC,EAAE;IAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,KAAK,MAAM,SAAS,IAAI,4BAA4B,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7E,MAAM,wBAAwB,CAAC;YAC7B,QAAQ;YACR,SAAS,EAAE,mBAAmB,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;YACtD,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,UAAU;YACV,UAAU;YACV,SAAS;YACT,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC1C,KAAK,MAAM,SAAS,IAAI,4BAA4B,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9E,MAAM,wBAAwB,CAAC;gBAC7B,QAAQ;gBACR,SAAS,EAAE,qBAAqB,CAAC;oBAC/B,GAAG,EAAE,SAAS,CAAC,GAAG;oBAClB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;iBAC9C,CAAC;gBACF,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,UAAU;gBACV,UAAU;gBACV,SAAS;gBACT,GAAG;aACJ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAYD,sFAAsF;AACtF,KAAK,UAAU,wBAAwB,CAAC,IAA0B;IAChE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClF,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACjD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO;IAEpC,+EAA+E;IAC/E,8EAA8E;IAC9E,+EAA+E;IAC/E,sEAAsE;IACtE,qCAAqC;IACrC,IAAI,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC9C,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,uBAAuB,CAC/B,GAAG,IAAI,CAAC,MAAM,UAAU,IAAI,CAAC,EAAE,yCAAyC,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,EACrG,EAAE,UAAU,EAAE,sCAAsC,IAAI,CAAC,MAAM,EAAE,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/C,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
@@ -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;AA+DjC;;;;GAIG;AACH,mFAAmF;AACnF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,6BAA6B,GACxC,IAAI,CASN;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,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;AA2GD,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,CAqCf"}
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 { isInstalledToolTrusted } from './tool-trust.js';
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
- if (!isInstalledToolTrusted(admission.manifest.id, args.env)) {
153
- emitInstalledTrustDenied(admission.manifest.id, pkg.name, pkg.packageDir, args.bootstrapDiagnostics);
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":"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"}
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;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BvE"}
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"}
@@ -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
- const [{ resultToView }, { renderToText, viewProjectHeader, group }] = await Promise.all([
40
- import('../ui/result-to-view.js'),
41
- import('@opensip-cli/cli-ui'),
42
- ]);
43
- const body = resultToView(result);
44
- const node = projectHeader !== undefined && result.type !== 'error'
45
- ? group([viewProjectHeader(projectHeader), { kind: 'spacer' }, body])
46
- : body;
47
- process.stdout.write(`${renderToText(node)}\n`);
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
- const { renderApp } = await import('../ui/render.js');
51
- await renderApp(result, projectHeader, ui);
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;YACvF,MAAM,CAAC,yBAAyB,CAAC;YACjC,MAAM,CAAC,qBAAqB,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GACR,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;YACpD,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;YACrE,CAAC,CAAC,IAAI,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;AAC7C,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"}