@extenshi/cli 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,240 @@
1
+ import { createHash } from 'node:crypto';
2
+ import path from 'node:path';
3
+ import { parse } from 'parse5';
4
+ export const HTML_I18N_RUNTIME = 'extenshi-i18n.js';
5
+ const MARKER = 'data-extenshi-i18n';
6
+ const ATTRIBUTES = new Set([
7
+ 'title',
8
+ 'alt',
9
+ 'placeholder',
10
+ 'aria-label',
11
+ 'aria-description',
12
+ 'aria-placeholder',
13
+ 'aria-valuetext',
14
+ 'aria-roledescription',
15
+ ]);
16
+ const SKIP_ELEMENTS = new Set([
17
+ 'script',
18
+ 'style',
19
+ 'template',
20
+ 'noscript',
21
+ 'pre',
22
+ 'code',
23
+ 'kbd',
24
+ 'samp',
25
+ 'iframe',
26
+ 'xmp',
27
+ 'noembed',
28
+ 'noframes',
29
+ 'plaintext',
30
+ ]);
31
+ /** A separate packaged script works under the normal extension CSP, with no inline code or HTML sinks. */
32
+ export const HTML_I18N_SOURCE = `(() => {
33
+ const i18n = globalThis.browser?.i18n || globalThis.chrome?.i18n;
34
+ if (!i18n?.getMessage) return;
35
+ const allowedAttributes = new Set(${JSON.stringify([...ATTRIBUTES, 'label', 'value'])});
36
+ for (const element of document.querySelectorAll('[${MARKER}]')) {
37
+ try {
38
+ const binding = JSON.parse(element.getAttribute('${MARKER}'));
39
+ for (const [index, key, before, after, original] of binding.t || []) {
40
+ if (element.tagName === 'OPTION' && !element.hasAttribute('value')) continue;
41
+ const node = element.childNodes[index];
42
+ const message = i18n.getMessage(key);
43
+ if (node?.nodeType === 3 && node.nodeValue === original && message) node.nodeValue = before + message + after;
44
+ }
45
+ for (const [attribute, key, before, after, original] of binding.a || []) {
46
+ if (!allowedAttributes.has(attribute)) continue;
47
+ if (attribute === 'value' && (element.tagName !== 'INPUT' || element.hasAttribute('name') || !['button', 'submit', 'reset'].includes(element.type))) continue;
48
+ if (attribute === 'label' && !['OPTION', 'OPTGROUP'].includes(element.tagName)) continue;
49
+ const message = i18n.getMessage(key);
50
+ if (message && element.getAttribute(attribute) === original) element.setAttribute(attribute, before + message + after);
51
+ }
52
+ } catch {
53
+ // A changed page or missing message keeps its original source text.
54
+ }
55
+ }
56
+ })();
57
+ `;
58
+ function element(node) {
59
+ return 'tagName' in node;
60
+ }
61
+ function attribute(node, name) {
62
+ return node.attrs.find((item) => item.name === name)?.value;
63
+ }
64
+ function escapeAttribute(value) {
65
+ return value
66
+ .replaceAll('&', '&')
67
+ .replaceAll('"', '"')
68
+ .replaceAll('<', '&lt;')
69
+ .replaceAll('>', '&gt;');
70
+ }
71
+ function template(value) {
72
+ return /\{\{|\{%|<%|__MSG_/i.test(value);
73
+ }
74
+ /** Every enforced policy must allow a local script; restrictive policies are reported, never relaxed. */
75
+ export function allowsLocalScript(policy) {
76
+ const directives = new Map();
77
+ for (const raw of policy.split(';')) {
78
+ const [name, ...values] = raw.trim().split(/\s+/);
79
+ if (name && !directives.has(name.toLowerCase()))
80
+ directives.set(name.toLowerCase(), values);
81
+ }
82
+ if (directives.has('sandbox'))
83
+ return false;
84
+ const sources = (directives.get('script-src-elem') ??
85
+ directives.get('script-src') ??
86
+ directives.get('default-src'))?.map((value) => value.toLowerCase());
87
+ return !sources || (sources.includes("'self'") && !sources.includes("'strict-dynamic'"));
88
+ }
89
+ /** Source-location edits leave literal HTML, comments, scripts, styles and whitespace in place. */
90
+ export function localizeHtml(source, relative, policy) {
91
+ const unchanged = (skippedReason) => ({
92
+ html: source,
93
+ messages: {},
94
+ stringCount: 0,
95
+ warnings: [],
96
+ skippedReason,
97
+ });
98
+ if (Buffer.byteLength(source) > 2 * 1024 * 1024)
99
+ return unchanged('HTML exceeds the 2 MiB extraction limit');
100
+ if (policy && !allowsLocalScript(policy))
101
+ return unchanged('Manifest CSP does not explicitly allow a local script');
102
+ const errors = [];
103
+ const document = parse(source, {
104
+ sourceCodeLocationInfo: true,
105
+ onParseError: (error) => {
106
+ if (error.code !== 'missing-doctype')
107
+ errors.push(error.code);
108
+ },
109
+ });
110
+ if (errors.length)
111
+ return unchanged(`HTML parse errors: ${[...new Set(errors)].join(', ')}`);
112
+ const nodes = [{ node: document, excluded: false }];
113
+ const elements = [];
114
+ const excludedElements = new Set();
115
+ let nodeCount = 0;
116
+ while (nodes.length) {
117
+ const item = nodes.pop();
118
+ const node = item.node;
119
+ if (++nodeCount > 25_000)
120
+ return unchanged('HTML exceeds the 25,000 node extraction limit');
121
+ let excluded = item.excluded;
122
+ if (element(node)) {
123
+ elements.push(node);
124
+ excluded ||=
125
+ node.namespaceURI !== 'http://www.w3.org/1999/xhtml' ||
126
+ SKIP_ELEMENTS.has(node.tagName) ||
127
+ node.tagName.includes('-') ||
128
+ attribute(node, 'translate')?.toLowerCase() === 'no' ||
129
+ attribute(node, 'hidden') !== undefined ||
130
+ attribute(node, 'inert') !== undefined ||
131
+ attribute(node, 'aria-hidden')?.toLowerCase() === 'true';
132
+ if (excluded)
133
+ excludedElements.add(node);
134
+ }
135
+ if ('childNodes' in node)
136
+ for (const child of node.childNodes)
137
+ nodes.push({ node: child, excluded });
138
+ }
139
+ if (elements.some((node) => node.tagName === 'base'))
140
+ return unchanged('HTML base URLs require manual runtime wiring');
141
+ if (elements.some((node) => attribute(node, MARKER) !== undefined))
142
+ return unchanged('Existing localization bindings require manual inspection');
143
+ if (elements.some((node) => node.attrs.some((attr) => /^(?:v-|ng-|data-ng-|x-|data-react|data-bind$|[:@[(])/.test(attr.name))))
144
+ return unchanged('Framework or dynamic template bindings require manual extraction');
145
+ for (const node of elements) {
146
+ if (node.tagName === 'meta') {
147
+ const charset = attribute(node, 'charset') ??
148
+ (attribute(node, 'http-equiv')?.toLowerCase() === 'content-type'
149
+ ? /charset\s*=\s*([^\s;]+)/i.exec(attribute(node, 'content') ?? '')?.[1]
150
+ : undefined);
151
+ if (charset && !/^utf-?8$/i.test(charset))
152
+ return unchanged('HTML declares a non-UTF-8 encoding; conversion requires manual review');
153
+ }
154
+ if (node.tagName === 'meta' &&
155
+ attribute(node, 'http-equiv')?.toLowerCase() === 'content-security-policy') {
156
+ if (!allowsLocalScript(attribute(node, 'content') ?? ''))
157
+ return unchanged('HTML CSP does not explicitly allow a local script');
158
+ }
159
+ }
160
+ const messages = {};
161
+ const warnings = new Set();
162
+ const edits = [];
163
+ const prefix = `html_${createHash('sha256').update(relative).digest('hex').slice(0, 12)}`;
164
+ function message(value, offset, kind) {
165
+ if (template(value)) {
166
+ warnings.add('Template expressions and existing __MSG_ references remain unchanged');
167
+ return undefined;
168
+ }
169
+ const [, before, text, after] = /^(\s*)([\s\S]*?)(\s*)$/.exec(value);
170
+ if (!/\p{L}/u.test(text))
171
+ return undefined;
172
+ const key = `${prefix}_${offset}_${kind}`;
173
+ messages[key] = {
174
+ message: text.replaceAll('$', () => '$$'),
175
+ description: `${relative}: ${kind} at source offset ${offset}.`,
176
+ };
177
+ return [key, before, after, value];
178
+ }
179
+ for (const node of elements) {
180
+ const location = node.sourceCodeLocation?.startTag;
181
+ if (!location || node.namespaceURI !== 'http://www.w3.org/1999/xhtml')
182
+ continue;
183
+ if (excludedElements.has(node))
184
+ continue;
185
+ const binding = {};
186
+ for (const [index, child] of node.childNodes.entries()) {
187
+ if (node.tagName === 'textarea')
188
+ continue;
189
+ if (child.nodeName !== '#text' || !('value' in child) || !child.sourceCodeLocation)
190
+ continue;
191
+ if (node.tagName === 'option' && attribute(node, 'value') === undefined) {
192
+ if (child.value.trim())
193
+ warnings.add('Option text without an explicit value remains unchanged to preserve select values and form data');
194
+ continue;
195
+ }
196
+ const ref = message(child.value, child.sourceCodeLocation.startOffset, 'text');
197
+ if (ref) {
198
+ binding.t ??= [];
199
+ binding.t.push([index, ...ref]);
200
+ }
201
+ }
202
+ for (const attr of node.attrs) {
203
+ if (!(ATTRIBUTES.has(attr.name) ||
204
+ (attr.name === 'label' && ['option', 'optgroup'].includes(node.tagName)) ||
205
+ (attr.name === 'value' &&
206
+ node.tagName === 'input' &&
207
+ ['button', 'submit', 'reset'].includes(attribute(node, 'type')?.toLowerCase() ?? ''))))
208
+ continue;
209
+ if (attr.name === 'value' && attribute(node, 'name') !== undefined) {
210
+ warnings.add('Named input button values remain unchanged to preserve submitted values');
211
+ continue;
212
+ }
213
+ const ref = message(attr.value, location.startOffset, attr.name.replaceAll('-', '_'));
214
+ if (ref) {
215
+ binding.a ??= [];
216
+ binding.a.push([attr.name, ...ref]);
217
+ }
218
+ }
219
+ if (!binding.t && !binding.a)
220
+ continue;
221
+ const slash = location.endOffset - 2;
222
+ const closesTag = source[slash] === '/' &&
223
+ Object.values(node.sourceCodeLocation?.attrs ?? {}).every((attr) => attr.endOffset <= slash);
224
+ const offset = closesTag ? slash : location.endOffset - 1;
225
+ edits.push({ offset, text: ` ${MARKER}="${escapeAttribute(JSON.stringify(binding))}"` });
226
+ }
227
+ if (!edits.length)
228
+ return { html: source, messages, stringCount: 0, warnings: [...warnings] };
229
+ // Appending inside an explicit body preserves all pre-existing child-node indexes.
230
+ // For a fragment, appending at EOF likewise adds a last child without inserting wrappers.
231
+ const body = elements.find((node) => node.tagName === 'body');
232
+ const offset = body?.sourceCodeLocation?.endTag?.startOffset ?? source.length;
233
+ const runtime = path.posix.relative(path.posix.dirname(relative), HTML_I18N_RUNTIME);
234
+ edits.push({ offset, text: `<script src="${escapeAttribute(runtime)}" defer></script>` });
235
+ let html = source;
236
+ for (const edit of edits.sort((a, b) => b.offset - a.offset))
237
+ html = html.slice(0, edit.offset) + edit.text + html.slice(edit.offset);
238
+ return { html, messages, stringCount: Object.keys(messages).length, warnings: [...warnings] };
239
+ }
240
+ //# sourceMappingURL=localize-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localize-html.js","sourceRoot":"","sources":["../src/localize-html.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,13 @@ export interface LocalizationInitResult {
3
3
  extractedFields: string[];
4
4
  untouchedFiles: string[];
5
5
  copiedFiles: number;
6
+ localizedHtmlFiles: string[];
7
+ extractedHtmlStrings: number;
8
+ htmlWarnings: {
9
+ file: string;
10
+ reason: string;
11
+ }[];
6
12
  }
7
- /** Initialize an English manifest in a new copy. HTML/JS extraction requires a separate reviewed step. */
13
+ /** Initialize manifest and static HTML messages in a new copy; preserve unsupported source code. */
8
14
  export declare function initializeLocalization(inputDirectory: string, outputDirectory: string): LocalizationInitResult;
9
15
  //# sourceMappingURL=localize-init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"localize-init.d.ts","sourceRoot":"","sources":["../src/localize-init.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,sBAAsB;IACtC,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACnB;AAgBD,0GAA0G;AAC1G,wBAAgB,sBAAsB,CACrC,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACrB,sBAAsB,CAqJxB"}
1
+ {"version":3,"file":"localize-init.d.ts","sourceRoot":"","sources":["../src/localize-init.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,sBAAsB;IACtC,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAChD;AAgBD,oGAAoG;AACpG,wBAAgB,sBAAsB,CACrC,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACrB,sBAAsB,CAgOxB"}
@@ -1,9 +1,17 @@
1
+ import { isUtf8 } from 'node:buffer';
1
2
  import fs from 'node:fs';
2
3
  import path from 'node:path';
4
+ import { HTML_I18N_RUNTIME, HTML_I18N_SOURCE, localizeHtml } from './localize-html.js';
3
5
  const MAX_BYTES = 100 * 1024 * 1024;
4
6
  const MAX_FILE_BYTES = 25 * 1024 * 1024;
5
7
  const MAX_ENTRIES = 10_000;
6
- const RESERVED = ['_locales', 'localization.json', 'LOCALIZATION-REPORT.md', '.extenshi-localization.json'];
8
+ const RESERVED = [
9
+ '_locales',
10
+ 'localization.json',
11
+ 'LOCALIZATION-REPORT.md',
12
+ '.extenshi-localization.json',
13
+ HTML_I18N_RUNTIME,
14
+ ];
7
15
  function exists(file) {
8
16
  try {
9
17
  fs.lstatSync(file);
@@ -18,7 +26,7 @@ function exists(file) {
18
26
  function object(value) {
19
27
  return !!value && typeof value === 'object' && !Array.isArray(value);
20
28
  }
21
- /** Initialize an English manifest in a new copy. HTML/JS extraction requires a separate reviewed step. */
29
+ /** Initialize manifest and static HTML messages in a new copy; preserve unsupported source code. */
22
30
  export function initializeLocalization(inputDirectory, outputDirectory) {
23
31
  const input = path.resolve(inputDirectory);
24
32
  if (fs.lstatSync(input).isSymbolicLink() || !fs.statSync(input).isDirectory())
@@ -42,7 +50,9 @@ export function initializeLocalization(inputDirectory, outputDirectory) {
42
50
  function walk(relative, depth) {
43
51
  if (depth > 64)
44
52
  throw new Error('Source exceeds maximum directory depth (64)');
45
- for (const entry of fs.readdirSync(path.join(source, relative), { withFileTypes: true })) {
53
+ for (const entry of fs
54
+ .readdirSync(path.join(source, relative), { withFileTypes: true })
55
+ .sort((a, b) => a.name.localeCompare(b.name, 'en'))) {
46
56
  if (++entries > MAX_ENTRIES)
47
57
  throw new Error('Source exceeds 10,000 entries');
48
58
  const child = path.join(relative, entry.name);
@@ -120,21 +130,77 @@ export function initializeLocalization(inputDirectory, outputDirectory) {
120
130
  extract(action, 'default_title', key, `${field} tooltip or sidebar title.`, `${field}.default_title`);
121
131
  }
122
132
  manifest.default_locale = 'en';
133
+ const htmlFiles = new Map();
134
+ const localizedHtmlFiles = [];
135
+ const htmlWarnings = [];
136
+ let extractedHtmlStrings = 0;
137
+ const policy = typeof manifest.content_security_policy === 'string'
138
+ ? manifest.content_security_policy
139
+ : object(manifest.content_security_policy) &&
140
+ typeof manifest.content_security_policy.extension_pages === 'string'
141
+ ? manifest.content_security_policy.extension_pages
142
+ : undefined;
143
+ const sandboxPages = object(manifest.sandbox) && Array.isArray(manifest.sandbox.pages) ? manifest.sandbox.pages : [];
144
+ for (const { relative } of files) {
145
+ if (!/\.html?$/i.test(relative))
146
+ continue;
147
+ const normalized = relative.split(path.sep).join('/');
148
+ if (sandboxPages.some((page) => typeof page === 'string' &&
149
+ new RegExp(`^${page
150
+ .split('*')
151
+ .map((part) => part.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
152
+ .join('.*')}$`).test(normalized))) {
153
+ htmlWarnings.push({
154
+ file: relative,
155
+ reason: 'Sandbox pages have no extension i18n API; extraction requires manual wiring',
156
+ });
157
+ continue;
158
+ }
159
+ const bytes = readSource(relative);
160
+ if (!isUtf8(bytes)) {
161
+ htmlWarnings.push({
162
+ file: relative,
163
+ reason: 'HTML is not UTF-8; encoding conversion requires manual review',
164
+ });
165
+ continue;
166
+ }
167
+ const localized = localizeHtml(bytes.toString('utf8'), normalized, policy);
168
+ if (localized.skippedReason)
169
+ htmlWarnings.push({ file: relative, reason: localized.skippedReason });
170
+ for (const reason of localized.warnings)
171
+ htmlWarnings.push({ file: relative, reason });
172
+ if (!localized.stringCount)
173
+ continue;
174
+ htmlFiles.set(relative, localized.html);
175
+ Object.assign(messages, localized.messages);
176
+ localizedHtmlFiles.push(relative);
177
+ extractedHtmlStrings += localized.stringCount;
178
+ }
123
179
  const untouchedFiles = files
124
- .filter(({ relative }) => /\.(?:html?|[cm]?jsx?|tsx?|vue|svelte)$/i.test(relative))
180
+ .filter(({ relative }) => /\.(?:html?|[cm]?jsx?|tsx?|vue|svelte)$/i.test(relative) && !htmlFiles.has(relative))
125
181
  .map(({ relative }) => relative);
126
182
  const report = [
127
183
  '# Localization initialization report',
128
184
  '',
129
- 'Scope: manifest-only initialization. Source copy is assumed to be English; verify this before translation.',
130
- 'HTML, JavaScript and framework templates remain byte-for-byte unchanged. Safe parser-based extraction and runtime wiring require a separate reviewed implementation.',
185
+ 'Scope: manifest fields and literal static HTML text and display attributes. Source copy is assumed to be English; verify this before translation.',
186
+ 'HTML keeps its existing markup and source text. A packaged external script applies browser i18n messages to text nodes and display attributes. Review selectors that depend on the original exact attribute list.',
187
+ 'JavaScript and framework source remain byte-for-byte unchanged. Dynamic DOM, template content, code examples, sandbox pages and HTML with incompatible CSP or base URLs require manual localization. JS/AST and ZIP extraction remain unsupported.',
131
188
  '',
132
189
  '## Extracted manifest fields',
133
190
  ...extractedFields.map((field) => `- ${field}`),
134
191
  '',
192
+ '## Extracted HTML',
193
+ `${extractedHtmlStrings} strings across ${localizedHtmlFiles.length} HTML files.`,
194
+ ...localizedHtmlFiles.map((file) => `- ${JSON.stringify(file)}`),
195
+ '',
196
+ '## HTML requiring review',
197
+ ...(htmlWarnings.length
198
+ ? htmlWarnings.map(({ file, reason }) => `- ${JSON.stringify(file)}: ${reason}.`)
199
+ : ['No HTML extraction warnings.']),
200
+ '',
135
201
  '## Source files requiring manual inspection',
136
202
  ...(untouchedFiles.length
137
- ? untouchedFiles.map((file) => `- ${JSON.stringify(file)}: extraction unsupported; review visible strings and runtime i18n wiring.`)
203
+ ? untouchedFiles.map((file) => `- ${JSON.stringify(file)}: unchanged; review visible strings and runtime i18n wiring.`)
138
204
  : ['No HTML/JS/template files were identified; inspect other source formats manually.']),
139
205
  '',
140
206
  '## Next steps',
@@ -150,6 +216,10 @@ export function initializeLocalization(inputDirectory, outputDirectory) {
150
216
  fs.mkdirSync(path.join(destination, directory), { recursive: true });
151
217
  for (const { relative } of files)
152
218
  fs.writeFileSync(path.join(destination, relative), readSource(relative), { flag: 'wx' });
219
+ for (const [relative, html] of htmlFiles)
220
+ fs.writeFileSync(path.join(destination, relative), html);
221
+ if (htmlFiles.size)
222
+ fs.writeFileSync(path.join(destination, HTML_I18N_RUNTIME), HTML_I18N_SOURCE, { flag: 'wx' });
153
223
  fs.mkdirSync(path.join(destination, '_locales', 'en'), { recursive: true });
154
224
  const writeJson = (relative, value) => fs.writeFileSync(path.join(destination, relative), `${JSON.stringify(value, null, '\t')}\n`);
155
225
  writeJson('manifest.json', manifest);
@@ -161,6 +231,14 @@ export function initializeLocalization(inputDirectory, outputDirectory) {
161
231
  fs.rmSync(destination, { recursive: true, force: true });
162
232
  throw error;
163
233
  }
164
- return { outputDirectory: destination, extractedFields, untouchedFiles, copiedFiles: files.length };
234
+ return {
235
+ outputDirectory: destination,
236
+ extractedFields,
237
+ untouchedFiles,
238
+ copiedFiles: files.length,
239
+ localizedHtmlFiles,
240
+ extractedHtmlStrings,
241
+ htmlWarnings,
242
+ };
165
243
  }
166
244
  //# sourceMappingURL=localize-init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"localize-init.js","sourceRoot":"","sources":["../src/localize-init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localize-init.js","sourceRoot":"","sources":["../src/localize-init.ts"],"names":[],"mappings":"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"}
package/dist/project.d.ts CHANGED
@@ -14,6 +14,23 @@ export declare class ProjectApiError extends Error {
14
14
  detail?: string | undefined);
15
15
  }
16
16
  export declare function projectRequest(config: Awaited<ReturnType<typeof loadConfig>>, method: string, input?: unknown, mutation?: boolean): Promise<Json>;
17
+ /**
18
+ * Owner decision `key` of the Dojo project bound to `cwd` (`.extenshi/project.json`).
19
+ * The cached binding can be older than the owner's click in Dojo, so with an API
20
+ * key the live decision replaces it; offline or on an older backend the cached
21
+ * binding decides. No `projectId` outside a bound directory.
22
+ */
23
+ export declare function boundDecision(key: string, opts: {
24
+ cwd: string;
25
+ bffUrl: string;
26
+ apiKey: string | null;
27
+ }): Promise<{
28
+ projectId?: string;
29
+ entry?: {
30
+ status?: string;
31
+ value?: unknown;
32
+ };
33
+ }>;
17
34
  export declare const metadataDigest: (value: unknown) => string;
18
35
  export declare function atomicJson(file: string, value: unknown): Promise<void>;
19
36
  export declare function localProvenance(cwd: string): Promise<Json>;
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAQ3F,OAAO,EAKN,wBAAwB,EAKxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAQxC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAE/B,qBAAa,eAAgB,SAAQ,KAAK;IAExC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACtB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;gBAJf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,YAAA;IACtB,iFAAiF;IACxE,MAAM,CAAC,EAAE,MAAM,YAAA;CAMzB;AAeD,wBAAsB,cAAc,CACnC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,EAC9C,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,OAAY,EACnB,QAAQ,UAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CAkDf;AACD;;;;;GAKG;AACH,wBAAsB,aAAa,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1D,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC,CA0B/E;AAED,eAAO,MAAM,cAAc,4BAAe,CAAA;AAwD1C,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,iBAe5D;AACD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDhE;AAoGD,wGAAwG;AACxG,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC3B,8EAA8E;IAC9E,OAAO,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAC/E,qFAAqF;IACrF,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAA;AAElF,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAazF;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC7C,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,EAC9C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,kBAAkB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CA0B7B;AAUD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAMzG;AACD,sDAAsD;AACtD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,cAAc,EAAE,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAgC1G;AAoCD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAgnBvD"}
package/dist/project.js CHANGED
@@ -94,6 +94,36 @@ export async function projectRequest(config, method, input = {}, mutation = fals
94
94
  throw new ProjectApiError('server', response.status);
95
95
  return body.result.data;
96
96
  }
97
+ /**
98
+ * Owner decision `key` of the Dojo project bound to `cwd` (`.extenshi/project.json`).
99
+ * The cached binding can be older than the owner's click in Dojo, so with an API
100
+ * key the live decision replaces it; offline or on an older backend the cached
101
+ * binding decides. No `projectId` outside a bound directory.
102
+ */
103
+ export async function boundDecision(key, opts) {
104
+ let binding;
105
+ try {
106
+ binding = JSON.parse(await readFile(path.join(opts.cwd, '.extenshi/project.json'), 'utf8'));
107
+ }
108
+ catch {
109
+ binding = undefined;
110
+ }
111
+ if (!binding?.projectId)
112
+ return {};
113
+ let entry = binding.document?.spec?.decisions?.entries?.[key];
114
+ if (opts.apiKey) {
115
+ try {
116
+ const view = await projectRequest({ apiKey: opts.apiKey, bffUrl: opts.bffUrl }, 'agentGetDecisions', { projectId: binding.projectId });
117
+ const fresh = view.decisions?.find((d) => d.key === key);
118
+ if (fresh)
119
+ entry = fresh.status === 'undecided' ? undefined : fresh;
120
+ }
121
+ catch {
122
+ // Offline or older backend: the cached binding decides.
123
+ }
124
+ }
125
+ return { projectId: binding.projectId, entry };
126
+ }
97
127
  const sha = (bytes) => createHash('sha256').update(bytes).digest('hex');
98
128
  export const metadataDigest = hashMetadata;
99
129
  async function jsonFile(file, limit = 256 * 1024) {