@pipeline-builder/pipeline-manager 3.4.89 → 3.4.91

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.
@@ -54,23 +54,16 @@ export function bootstrapCommand(spec) {
54
54
  const originRef = shellQuote(`origin/${spec.ref}`);
55
55
  const dir = shellQuote(spec.workdir);
56
56
  const paths = spec.paths.map(shellQuote).join(' ');
57
+ // Shared re-sync tail: prefer the remote-tracking ref, fall back to the local ref.
58
+ const reset = `{ git -C ${dir} reset --hard ${originRef} 2>/dev/null || git -C ${dir} reset --hard ${ref}; }`;
59
+ // Shared idempotent frame: re-sync an existing checkout, else fresh-clone.
60
+ const frame = (existing, fresh) => [`if [ -d ${dir}/.git ]; then`, ` ${existing}`, 'else', ` ${fresh}`, 'fi'].join('\n');
57
61
  if (spec.full) {
58
62
  // Full-clone fallback (no partial/sparse) for git < 2.27.
59
- return [
60
- `if [ -d ${dir}/.git ]; then`,
61
- ` git -C ${dir} fetch --all --tags --prune && git -C ${dir} checkout ${ref} && { git -C ${dir} reset --hard ${originRef} 2>/dev/null || git -C ${dir} reset --hard ${ref}; };`,
62
- 'else',
63
- ` git clone ${repo} ${dir} && git -C ${dir} checkout ${ref};`,
64
- 'fi',
65
- ].join('\n');
63
+ return frame(`git -C ${dir} fetch --all --tags --prune && git -C ${dir} checkout ${ref} && ${reset};`, `git clone ${repo} ${dir} && git -C ${dir} checkout ${ref};`);
66
64
  }
67
- return [
68
- `if [ -d ${dir}/.git ]; then`,
69
- // Additive: keep folders from earlier targets/options already in the cone.
70
- ` git -C ${dir} sparse-checkout add ${paths} && git -C ${dir} fetch --filter=blob:none --depth 1 origin ${ref} && git -C ${dir} checkout ${ref} && { git -C ${dir} reset --hard ${originRef} 2>/dev/null || git -C ${dir} reset --hard ${ref}; };`,
71
- 'else',
72
- ` git clone --filter=blob:none --no-checkout --depth 1 ${repo} ${dir} && git -C ${dir} sparse-checkout set --cone ${paths} && git -C ${dir} checkout ${ref};`,
73
- 'fi',
74
- ].join('\n');
65
+ return frame(
66
+ // Additive: keep folders from earlier targets/options already in the cone.
67
+ `git -C ${dir} sparse-checkout add ${paths} && git -C ${dir} fetch --filter=blob:none --depth 1 origin ${ref} && git -C ${dir} checkout ${ref} && ${reset};`, `git clone --filter=blob:none --no-checkout --depth 1 ${repo} ${dir} && git -C ${dir} sparse-checkout set --cone ${paths} && git -C ${dir} checkout ${ref};`);
75
68
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxzREFBc0QsQ0FBQztBQUNuRixpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDO0FBZWxELHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQXVFLEVBQ3ZFLEtBQXdCO0lBRXhCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBcUIsRUFBRSxRQUFnQixFQUFVLEVBQUUsQ0FDL0QsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2pFLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO1FBQ25DLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUM7UUFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQztRQUM1QyxLQUFLO1FBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSztLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELG1GQUFtRjtBQUNuRixTQUFTLFVBQVUsQ0FBQyxLQUFhO0lBQy9CLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFtQjtJQUNsRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbkQsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbkQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCwwREFBMEQ7UUFDMUQsT0FBTztZQUNMLFdBQVcsR0FBRyxlQUFlO1lBQzdCLFlBQVksR0FBRyx5Q0FBeUMsR0FBRyxhQUFhLEdBQUcsZ0JBQWdCLEdBQUcsaUJBQWlCLFNBQVMsMEJBQTBCLEdBQUcsaUJBQWlCLEdBQUcsTUFBTTtZQUMvSyxNQUFNO1lBQ04sZUFBZSxJQUFJLElBQUksR0FBRyxjQUFjLEdBQUcsYUFBYSxHQUFHLEdBQUc7WUFDOUQsSUFBSTtTQUNMLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU87UUFDTCxXQUFXLEdBQUcsZUFBZTtRQUM3QiwyRUFBMkU7UUFDM0UsWUFBWSxHQUFHLHdCQUF3QixLQUFLLGNBQWMsR0FBRyw4Q0FBOEMsR0FBRyxjQUFjLEdBQUcsYUFBYSxHQUFHLGdCQUFnQixHQUFHLGlCQUFpQixTQUFTLDBCQUEwQixHQUFHLGlCQUFpQixHQUFHLE1BQU07UUFDblAsTUFBTTtRQUNOLDBEQUEwRCxJQUFJLElBQUksR0FBRyxjQUFjLEdBQUcsK0JBQStCLEtBQUssY0FBYyxHQUFHLGFBQWEsR0FBRyxHQUFHO1FBQzlKLElBQUk7S0FDTCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBCb290c3RyYXAgdGhlIHBsYXRmb3JtIHJlcG8gKHNwYXJzZSwgcGFydGlhbCBjbG9uZSkuXG4gKlxuICogYHByb3Zpc2lvbmAgbm9ybWFsbHkgcnVucyBmcm9tIGEgY2hlY2tvdXQgb2YgdGhpcyByZXBvLCBiZWNhdXNlIHRoZSBkZXBsb3lcbiAqIHNjcmlwdHMgbGl2ZSB1bmRlciBgZGVwbG95L2AuIFRvIHByb3Zpc2lvbiBhIGZyZXNoIG1hY2hpbmUgaW4gb25lIGNvbW1hbmQsIHRoZVxuICogb3BlcmF0b3IgcGFzc2VzIGAtLXJlcG9gOiBwcm92aXNpb24gZ2l0LWNsb25lcyB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCwgdGhlblxuICogcnVucyBldmVyeSBzdWJzZXF1ZW50IHN0ZXAgKGRlcGxveSwgaW5pdC1wbGF0Zm9ybSwgcG9zdC1zdGVwcykgZnJvbSB0aGUgY2xvbmUuXG4gKlxuICogQSBmdWxsIGNsb25lIGlzIHdhc3RlZnVsIOKAlCB0aGUgcmVwbyBjYXJyaWVzIGBwYWNrYWdlcy9gLCBgYXBpL2AsIGBwbGF0Zm9ybS9gLFxuICogYGZyb250ZW5kL2AsIOKApiBub25lIG9mIHdoaWNoIHRoZSBkZXBsb3kgc3RhY2sgbmVlZHMuIFNvIHRoZSBjbG9uZSBpcyBhXG4gKiAqKnBhcnRpYWwqKiAoYC0tZmlsdGVyPWJsb2I6bm9uZWApICsgKipjb25lIHNwYXJzZS1jaGVja291dCoqIHRoYXQgbWF0ZXJpYWxpemVzXG4gKiBvbmx5IHRoZSBkZXBsb3kgZm9sZGVycyB0aGUgc2VsZWN0ZWQgdGFyZ2V0ICsgb3B0aW9ucyBhY3R1YWxseSB1c2UuIFB1cmVcbiAqIGNvbW1hbmQgYXNzZW1ibHkgaGVyZSDigJQgbm8gZ2l0IGlzIHJ1bjsgdGhlIGNhbGxlciBleGVjdXRlcyB0aGUgY29tbWFuZCB2aWEgdGhlXG4gKiBzYW1lIGdhdGVkIGBydW5TY3JpcHQoKWAgYXMgdGhlIGRlcGxveS5cbiAqL1xuXG4vKiogQ2Fub25pY2FsIHVwc3RyZWFtIHBsYXRmb3JtIHJlcG8sIHVzZWQgd2hlbiBgLS1yZXBvYCBpcyBnaXZlbiB3aXRob3V0IGEgdmFsdWUuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRVBPID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9td2FzaGJ1cm4xNjAvcGlwZWxpbmUtYnVpbGRlci5naXQnO1xuLyoqIERlZmF1bHQgcmVmIHRvIGNoZWNrIG91dCB3aGVuIGJvb3RzdHJhcHBpbmcgKGEgYnJhbmNoIG9yIHRhZyDigJQgc2VlIGJlbG93KS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFRiA9ICdtYWluJztcbi8qKiBEZWZhdWx0IGRpcmVjdG9yeSB0byBjbG9uZSBpbnRvIC8gcnVuIGZyb20uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9XT1JLRElSID0gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcFNwZWMge1xuICAvKiogR2l0IFVSTCB0byBjbG9uZS4gKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuICAvKiogQnJhbmNoIG9yIHRhZyB0byBjaGVjayBvdXQuIChBcmJpdHJhcnkgU0hBcyBtYXkgbm90IGZldGNoIHVuZGVyIC0tZGVwdGggMS4pICovXG4gIHJlYWRvbmx5IHJlZjogc3RyaW5nO1xuICAvKiogRGlyZWN0b3J5IHRvIGNsb25lIGludG8gLyBydW4gZnJvbSAocmVsYXRpdmUgdG8gdGhlIGxhdW5jaCBjd2QpLiAqL1xuICByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG4gIC8qKiBEZXBsb3kgZm9sZGVycyB0byBtYXRlcmlhbGl6ZSAoY29uZSBzcGFyc2UtY2hlY2tvdXQgcGF0aHMpLiAqL1xuICByZWFkb25seSBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBXaGVuIHRydWUsIHNraXAgdGhlIHBhcnRpYWwvc3BhcnNlIGZsYWdzIGFuZCBkbyBhIHBsYWluIGZ1bGwgY2xvbmUgKGdpdCA8IDIuMjcpLiAqL1xuICByZWFkb25seSBmdWxsPzogYm9vbGVhbjtcbn1cblxuLyoqIEZpbGwgcGFydGlhbCBib290c3RyYXAgaW5wdXRzIHdpdGggZGVmYXVsdHM7IGBwYXRoc2AgaXMgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQm9vdHN0cmFwKFxuICBvcHRzOiB7IHJlcG8/OiBzdHJpbmc7IHJlZj86IHN0cmluZzsgd29ya2Rpcj86IHN0cmluZzsgZnVsbD86IGJvb2xlYW4gfSxcbiAgcGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogQm9vdHN0cmFwU3BlYyB7XG4gIGNvbnN0IHBpY2sgPSAodjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYudHJpbSgpICE9PSAnJyA/IHYudHJpbSgpIDogZmFsbGJhY2s7XG4gIHJldHVybiB7XG4gICAgcmVwbzogcGljayhvcHRzLnJlcG8sIERFRkFVTFRfUkVQTyksXG4gICAgcmVmOiBwaWNrKG9wdHMucmVmLCBERUZBVUxUX1JFRiksXG4gICAgd29ya2RpcjogcGljayhvcHRzLndvcmtkaXIsIERFRkFVTFRfV09SS0RJUiksXG4gICAgcGF0aHMsXG4gICAgZnVsbDogb3B0cy5mdWxsID8/IGZhbHNlLFxuICB9O1xufVxuXG4vKiogU2luZ2xlLXF1b3RlIGEgdmFsdWUgZm9yIHNhZmUgc2hlbGwgaW50ZXJwb2xhdGlvbiAoaGFuZGxlcyBlbWJlZGRlZCBxdW90ZXMpLiAqL1xuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYDtcbn1cblxuLyoqXG4gKiBBc3NlbWJsZSB0aGUgaWRlbXBvdGVudCBib290c3RyYXAgY29tbWFuZC4gUmUtcnVubmFibGUsIGFuZCAqKmFkZGl0aXZlKiogYWNyb3NzXG4gKiBydW5zOiBpZiBgPHdvcmtkaXI+YCBpcyBhbHJlYWR5IGEgY2hlY2tvdXQgaXQgYHNwYXJzZS1jaGVja291dCBhZGRgcyB0aGUgY3VycmVudFxuICogcGF0aHMgKHNvIGZvbGRlcnMgZnJvbSBwcmV2aW91c2x5LXByb3Zpc2lvbmVkIHRhcmdldHMvb3B0aW9ucyBhcmUgcmV0YWluZWQpIGFuZFxuICogcmUtc3luY3MgdG8gYDxyZWY+YDsgb3RoZXJ3aXNlIGl0IHBhcnRpYWwtY2xvbmVzLCBzZXRzIHRoZSBjb25lLCBhbmQgY2hlY2tzIG91dC5cbiAqXG4gKiAtIGAtLWZpbHRlcj1ibG9iOm5vbmVgIGxhemlseSBmZXRjaGVzIGJsb2JzOyBgLS1uby1jaGVja291dGAgKyBjb25lIHNwYXJzZS1jaGVja291dFxuICogICDih5Igb25seSB0aGUgbGlzdGVkIGRlcGxveSBmb2xkZXJzIGxhbmQgb24gZGlzayAoZ2l0IOKJpSAyLjI3KS5cbiAqIC0gYHNwZWMuZnVsbGAgZmFsbHMgYmFjayB0byBhIHBsYWluIGZ1bGwgY2xvbmUgKG9sZGVyIGdpdCkuXG4gKiAtIEFsbCBpbnRlcnBvbGF0ZWQgdmFsdWVzIGFyZSBzaW5nbGUtcXVvdGVkLCBzbyBhIGhvc3RpbGUgcmVwby9yZWYvd29ya2Rpci9wYXRoXG4gKiAgIGNhbm5vdCBicmVhayBvdXQgb2YgdGhlIGNvbW1hbmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXBDb21tYW5kKHNwZWM6IEJvb3RzdHJhcFNwZWMpOiBzdHJpbmcge1xuICBjb25zdCByZXBvID0gc2hlbGxRdW90ZShzcGVjLnJlcG8pO1xuICBjb25zdCByZWYgPSBzaGVsbFF1b3RlKHNwZWMucmVmKTtcbiAgY29uc3Qgb3JpZ2luUmVmID0gc2hlbGxRdW90ZShgb3JpZ2luLyR7c3BlYy5yZWZ9YCk7XG4gIGNvbnN0IGRpciA9IHNoZWxsUXVvdGUoc3BlYy53b3JrZGlyKTtcbiAgY29uc3QgcGF0aHMgPSBzcGVjLnBhdGhzLm1hcChzaGVsbFF1b3RlKS5qb2luKCcgJyk7XG5cbiAgaWYgKHNwZWMuZnVsbCkge1xuICAgIC8vIEZ1bGwtY2xvbmUgZmFsbGJhY2sgKG5vIHBhcnRpYWwvc3BhcnNlKSBmb3IgZ2l0IDwgMi4yNy5cbiAgICByZXR1cm4gW1xuICAgICAgYGlmIFsgLWQgJHtkaXJ9Ly5naXQgXTsgdGhlbmAsXG4gICAgICBgICBnaXQgLUMgJHtkaXJ9IGZldGNoIC0tYWxsIC0tdGFncyAtLXBydW5lICYmIGdpdCAtQyAke2Rpcn0gY2hlY2tvdXQgJHtyZWZ9ICYmIHsgZ2l0IC1DICR7ZGlyfSByZXNldCAtLWhhcmQgJHtvcmlnaW5SZWZ9IDI+L2Rldi9udWxsIHx8IGdpdCAtQyAke2Rpcn0gcmVzZXQgLS1oYXJkICR7cmVmfTsgfTtgLFxuICAgICAgJ2Vsc2UnLFxuICAgICAgYCAgZ2l0IGNsb25lICR7cmVwb30gJHtkaXJ9ICYmIGdpdCAtQyAke2Rpcn0gY2hlY2tvdXQgJHtyZWZ9O2AsXG4gICAgICAnZmknLFxuICAgIF0uam9pbignXFxuJyk7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGBpZiBbIC1kICR7ZGlyfS8uZ2l0IF07IHRoZW5gLFxuICAgIC8vIEFkZGl0aXZlOiBrZWVwIGZvbGRlcnMgZnJvbSBlYXJsaWVyIHRhcmdldHMvb3B0aW9ucyBhbHJlYWR5IGluIHRoZSBjb25lLlxuICAgIGAgIGdpdCAtQyAke2Rpcn0gc3BhcnNlLWNoZWNrb3V0IGFkZCAke3BhdGhzfSAmJiBnaXQgLUMgJHtkaXJ9IGZldGNoIC0tZmlsdGVyPWJsb2I6bm9uZSAtLWRlcHRoIDEgb3JpZ2luICR7cmVmfSAmJiBnaXQgLUMgJHtkaXJ9IGNoZWNrb3V0ICR7cmVmfSAmJiB7IGdpdCAtQyAke2Rpcn0gcmVzZXQgLS1oYXJkICR7b3JpZ2luUmVmfSAyPi9kZXYvbnVsbCB8fCBnaXQgLUMgJHtkaXJ9IHJlc2V0IC0taGFyZCAke3JlZn07IH07YCxcbiAgICAnZWxzZScsXG4gICAgYCAgZ2l0IGNsb25lIC0tZmlsdGVyPWJsb2I6bm9uZSAtLW5vLWNoZWNrb3V0IC0tZGVwdGggMSAke3JlcG99ICR7ZGlyfSAmJiBnaXQgLUMgJHtkaXJ9IHNwYXJzZS1jaGVja291dCBzZXQgLS1jb25lICR7cGF0aHN9ICYmIGdpdCAtQyAke2Rpcn0gY2hlY2tvdXQgJHtyZWZ9O2AsXG4gICAgJ2ZpJyxcbiAgXS5qb2luKCdcXG4nKTtcbn1cbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxzREFBc0QsQ0FBQztBQUNuRixpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDO0FBZWxELHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQXVFLEVBQ3ZFLEtBQXdCO0lBRXhCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBcUIsRUFBRSxRQUFnQixFQUFVLEVBQUUsQ0FDL0QsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2pFLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO1FBQ25DLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUM7UUFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQztRQUM1QyxLQUFLO1FBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSztLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELG1GQUFtRjtBQUNuRixTQUFTLFVBQVUsQ0FBQyxLQUFhO0lBQy9CLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFtQjtJQUNsRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbkQsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbkQsbUZBQW1GO0lBQ25GLE1BQU0sS0FBSyxHQUFHLFlBQVksR0FBRyxpQkFBaUIsU0FBUywwQkFBMEIsR0FBRyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDOUcsMkVBQTJFO0lBQzNFLE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxLQUFhLEVBQVUsRUFBRSxDQUN4RCxDQUFDLFdBQVcsR0FBRyxlQUFlLEVBQUUsS0FBSyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUYsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCwwREFBMEQ7UUFDMUQsT0FBTyxLQUFLLENBQ1YsVUFBVSxHQUFHLHlDQUF5QyxHQUFHLGFBQWEsR0FBRyxPQUFPLEtBQUssR0FBRyxFQUN4RixhQUFhLElBQUksSUFBSSxHQUFHLGNBQWMsR0FBRyxhQUFhLEdBQUcsR0FBRyxDQUM3RCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sS0FBSztJQUNWLDJFQUEyRTtJQUMzRSxVQUFVLEdBQUcsd0JBQXdCLEtBQUssY0FBYyxHQUFHLDhDQUE4QyxHQUFHLGNBQWMsR0FBRyxhQUFhLEdBQUcsT0FBTyxLQUFLLEdBQUcsRUFDNUosd0RBQXdELElBQUksSUFBSSxHQUFHLGNBQWMsR0FBRywrQkFBK0IsS0FBSyxjQUFjLEdBQUcsYUFBYSxHQUFHLEdBQUcsQ0FDN0osQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBCb290c3RyYXAgdGhlIHBsYXRmb3JtIHJlcG8gKHNwYXJzZSwgcGFydGlhbCBjbG9uZSkuXG4gKlxuICogYHByb3Zpc2lvbmAgbm9ybWFsbHkgcnVucyBmcm9tIGEgY2hlY2tvdXQgb2YgdGhpcyByZXBvLCBiZWNhdXNlIHRoZSBkZXBsb3lcbiAqIHNjcmlwdHMgbGl2ZSB1bmRlciBgZGVwbG95L2AuIFRvIHByb3Zpc2lvbiBhIGZyZXNoIG1hY2hpbmUgaW4gb25lIGNvbW1hbmQsIHRoZVxuICogb3BlcmF0b3IgcGFzc2VzIGAtLXJlcG9gOiBwcm92aXNpb24gZ2l0LWNsb25lcyB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCwgdGhlblxuICogcnVucyBldmVyeSBzdWJzZXF1ZW50IHN0ZXAgKGRlcGxveSwgaW5pdC1wbGF0Zm9ybSwgcG9zdC1zdGVwcykgZnJvbSB0aGUgY2xvbmUuXG4gKlxuICogQSBmdWxsIGNsb25lIGlzIHdhc3RlZnVsIOKAlCB0aGUgcmVwbyBjYXJyaWVzIGBwYWNrYWdlcy9gLCBgYXBpL2AsIGBwbGF0Zm9ybS9gLFxuICogYGZyb250ZW5kL2AsIOKApiBub25lIG9mIHdoaWNoIHRoZSBkZXBsb3kgc3RhY2sgbmVlZHMuIFNvIHRoZSBjbG9uZSBpcyBhXG4gKiAqKnBhcnRpYWwqKiAoYC0tZmlsdGVyPWJsb2I6bm9uZWApICsgKipjb25lIHNwYXJzZS1jaGVja291dCoqIHRoYXQgbWF0ZXJpYWxpemVzXG4gKiBvbmx5IHRoZSBkZXBsb3kgZm9sZGVycyB0aGUgc2VsZWN0ZWQgdGFyZ2V0ICsgb3B0aW9ucyBhY3R1YWxseSB1c2UuIFB1cmVcbiAqIGNvbW1hbmQgYXNzZW1ibHkgaGVyZSDigJQgbm8gZ2l0IGlzIHJ1bjsgdGhlIGNhbGxlciBleGVjdXRlcyB0aGUgY29tbWFuZCB2aWEgdGhlXG4gKiBzYW1lIGdhdGVkIGBydW5TY3JpcHQoKWAgYXMgdGhlIGRlcGxveS5cbiAqL1xuXG4vKiogQ2Fub25pY2FsIHVwc3RyZWFtIHBsYXRmb3JtIHJlcG8sIHVzZWQgd2hlbiBgLS1yZXBvYCBpcyBnaXZlbiB3aXRob3V0IGEgdmFsdWUuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRVBPID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9td2FzaGJ1cm4xNjAvcGlwZWxpbmUtYnVpbGRlci5naXQnO1xuLyoqIERlZmF1bHQgcmVmIHRvIGNoZWNrIG91dCB3aGVuIGJvb3RzdHJhcHBpbmcgKGEgYnJhbmNoIG9yIHRhZyDigJQgc2VlIGJlbG93KS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFRiA9ICdtYWluJztcbi8qKiBEZWZhdWx0IGRpcmVjdG9yeSB0byBjbG9uZSBpbnRvIC8gcnVuIGZyb20uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9XT1JLRElSID0gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcFNwZWMge1xuICAvKiogR2l0IFVSTCB0byBjbG9uZS4gKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuICAvKiogQnJhbmNoIG9yIHRhZyB0byBjaGVjayBvdXQuIChBcmJpdHJhcnkgU0hBcyBtYXkgbm90IGZldGNoIHVuZGVyIC0tZGVwdGggMS4pICovXG4gIHJlYWRvbmx5IHJlZjogc3RyaW5nO1xuICAvKiogRGlyZWN0b3J5IHRvIGNsb25lIGludG8gLyBydW4gZnJvbSAocmVsYXRpdmUgdG8gdGhlIGxhdW5jaCBjd2QpLiAqL1xuICByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG4gIC8qKiBEZXBsb3kgZm9sZGVycyB0byBtYXRlcmlhbGl6ZSAoY29uZSBzcGFyc2UtY2hlY2tvdXQgcGF0aHMpLiAqL1xuICByZWFkb25seSBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBXaGVuIHRydWUsIHNraXAgdGhlIHBhcnRpYWwvc3BhcnNlIGZsYWdzIGFuZCBkbyBhIHBsYWluIGZ1bGwgY2xvbmUgKGdpdCA8IDIuMjcpLiAqL1xuICByZWFkb25seSBmdWxsPzogYm9vbGVhbjtcbn1cblxuLyoqIEZpbGwgcGFydGlhbCBib290c3RyYXAgaW5wdXRzIHdpdGggZGVmYXVsdHM7IGBwYXRoc2AgaXMgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQm9vdHN0cmFwKFxuICBvcHRzOiB7IHJlcG8/OiBzdHJpbmc7IHJlZj86IHN0cmluZzsgd29ya2Rpcj86IHN0cmluZzsgZnVsbD86IGJvb2xlYW4gfSxcbiAgcGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogQm9vdHN0cmFwU3BlYyB7XG4gIGNvbnN0IHBpY2sgPSAodjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYudHJpbSgpICE9PSAnJyA/IHYudHJpbSgpIDogZmFsbGJhY2s7XG4gIHJldHVybiB7XG4gICAgcmVwbzogcGljayhvcHRzLnJlcG8sIERFRkFVTFRfUkVQTyksXG4gICAgcmVmOiBwaWNrKG9wdHMucmVmLCBERUZBVUxUX1JFRiksXG4gICAgd29ya2RpcjogcGljayhvcHRzLndvcmtkaXIsIERFRkFVTFRfV09SS0RJUiksXG4gICAgcGF0aHMsXG4gICAgZnVsbDogb3B0cy5mdWxsID8/IGZhbHNlLFxuICB9O1xufVxuXG4vKiogU2luZ2xlLXF1b3RlIGEgdmFsdWUgZm9yIHNhZmUgc2hlbGwgaW50ZXJwb2xhdGlvbiAoaGFuZGxlcyBlbWJlZGRlZCBxdW90ZXMpLiAqL1xuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYDtcbn1cblxuLyoqXG4gKiBBc3NlbWJsZSB0aGUgaWRlbXBvdGVudCBib290c3RyYXAgY29tbWFuZC4gUmUtcnVubmFibGUsIGFuZCAqKmFkZGl0aXZlKiogYWNyb3NzXG4gKiBydW5zOiBpZiBgPHdvcmtkaXI+YCBpcyBhbHJlYWR5IGEgY2hlY2tvdXQgaXQgYHNwYXJzZS1jaGVja291dCBhZGRgcyB0aGUgY3VycmVudFxuICogcGF0aHMgKHNvIGZvbGRlcnMgZnJvbSBwcmV2aW91c2x5LXByb3Zpc2lvbmVkIHRhcmdldHMvb3B0aW9ucyBhcmUgcmV0YWluZWQpIGFuZFxuICogcmUtc3luY3MgdG8gYDxyZWY+YDsgb3RoZXJ3aXNlIGl0IHBhcnRpYWwtY2xvbmVzLCBzZXRzIHRoZSBjb25lLCBhbmQgY2hlY2tzIG91dC5cbiAqXG4gKiAtIGAtLWZpbHRlcj1ibG9iOm5vbmVgIGxhemlseSBmZXRjaGVzIGJsb2JzOyBgLS1uby1jaGVja291dGAgKyBjb25lIHNwYXJzZS1jaGVja291dFxuICogICDih5Igb25seSB0aGUgbGlzdGVkIGRlcGxveSBmb2xkZXJzIGxhbmQgb24gZGlzayAoZ2l0IOKJpSAyLjI3KS5cbiAqIC0gYHNwZWMuZnVsbGAgZmFsbHMgYmFjayB0byBhIHBsYWluIGZ1bGwgY2xvbmUgKG9sZGVyIGdpdCkuXG4gKiAtIEFsbCBpbnRlcnBvbGF0ZWQgdmFsdWVzIGFyZSBzaW5nbGUtcXVvdGVkLCBzbyBhIGhvc3RpbGUgcmVwby9yZWYvd29ya2Rpci9wYXRoXG4gKiAgIGNhbm5vdCBicmVhayBvdXQgb2YgdGhlIGNvbW1hbmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXBDb21tYW5kKHNwZWM6IEJvb3RzdHJhcFNwZWMpOiBzdHJpbmcge1xuICBjb25zdCByZXBvID0gc2hlbGxRdW90ZShzcGVjLnJlcG8pO1xuICBjb25zdCByZWYgPSBzaGVsbFF1b3RlKHNwZWMucmVmKTtcbiAgY29uc3Qgb3JpZ2luUmVmID0gc2hlbGxRdW90ZShgb3JpZ2luLyR7c3BlYy5yZWZ9YCk7XG4gIGNvbnN0IGRpciA9IHNoZWxsUXVvdGUoc3BlYy53b3JrZGlyKTtcbiAgY29uc3QgcGF0aHMgPSBzcGVjLnBhdGhzLm1hcChzaGVsbFF1b3RlKS5qb2luKCcgJyk7XG5cbiAgLy8gU2hhcmVkIHJlLXN5bmMgdGFpbDogcHJlZmVyIHRoZSByZW1vdGUtdHJhY2tpbmcgcmVmLCBmYWxsIGJhY2sgdG8gdGhlIGxvY2FsIHJlZi5cbiAgY29uc3QgcmVzZXQgPSBgeyBnaXQgLUMgJHtkaXJ9IHJlc2V0IC0taGFyZCAke29yaWdpblJlZn0gMj4vZGV2L251bGwgfHwgZ2l0IC1DICR7ZGlyfSByZXNldCAtLWhhcmQgJHtyZWZ9OyB9YDtcbiAgLy8gU2hhcmVkIGlkZW1wb3RlbnQgZnJhbWU6IHJlLXN5bmMgYW4gZXhpc3RpbmcgY2hlY2tvdXQsIGVsc2UgZnJlc2gtY2xvbmUuXG4gIGNvbnN0IGZyYW1lID0gKGV4aXN0aW5nOiBzdHJpbmcsIGZyZXNoOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICBbYGlmIFsgLWQgJHtkaXJ9Ly5naXQgXTsgdGhlbmAsIGAgICR7ZXhpc3Rpbmd9YCwgJ2Vsc2UnLCBgICAke2ZyZXNofWAsICdmaSddLmpvaW4oJ1xcbicpO1xuXG4gIGlmIChzcGVjLmZ1bGwpIHtcbiAgICAvLyBGdWxsLWNsb25lIGZhbGxiYWNrIChubyBwYXJ0aWFsL3NwYXJzZSkgZm9yIGdpdCA8IDIuMjcuXG4gICAgcmV0dXJuIGZyYW1lKFxuICAgICAgYGdpdCAtQyAke2Rpcn0gZmV0Y2ggLS1hbGwgLS10YWdzIC0tcHJ1bmUgJiYgZ2l0IC1DICR7ZGlyfSBjaGVja291dCAke3JlZn0gJiYgJHtyZXNldH07YCxcbiAgICAgIGBnaXQgY2xvbmUgJHtyZXBvfSAke2Rpcn0gJiYgZ2l0IC1DICR7ZGlyfSBjaGVja291dCAke3JlZn07YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lKFxuICAgIC8vIEFkZGl0aXZlOiBrZWVwIGZvbGRlcnMgZnJvbSBlYXJsaWVyIHRhcmdldHMvb3B0aW9ucyBhbHJlYWR5IGluIHRoZSBjb25lLlxuICAgIGBnaXQgLUMgJHtkaXJ9IHNwYXJzZS1jaGVja291dCBhZGQgJHtwYXRoc30gJiYgZ2l0IC1DICR7ZGlyfSBmZXRjaCAtLWZpbHRlcj1ibG9iOm5vbmUgLS1kZXB0aCAxIG9yaWdpbiAke3JlZn0gJiYgZ2l0IC1DICR7ZGlyfSBjaGVja291dCAke3JlZn0gJiYgJHtyZXNldH07YCxcbiAgICBgZ2l0IGNsb25lIC0tZmlsdGVyPWJsb2I6bm9uZSAtLW5vLWNoZWNrb3V0IC0tZGVwdGggMSAke3JlcG99ICR7ZGlyfSAmJiBnaXQgLUMgJHtkaXJ9IHNwYXJzZS1jaGVja291dCBzZXQgLS1jb25lICR7cGF0aHN9ICYmIGdpdCAtQyAke2Rpcn0gY2hlY2tvdXQgJHtyZWZ9O2AsXG4gICk7XG59XG4iXX0=
@@ -2,6 +2,12 @@ import type { TargetId } from './targets.js';
2
2
  export interface HealthResult {
3
3
  readonly url: string;
4
4
  readonly healthy: boolean;
5
+ /**
6
+ * True only when BOTH /health and /ready passed. Distinguishes a fully-ready
7
+ * platform from the degraded "health OK but /ready never came, proceeding anyway"
8
+ * state — both have healthy:true, so callers should style success on `ready`.
9
+ */
10
+ readonly ready: boolean;
5
11
  readonly detail: string;
6
12
  }
7
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/agent/health.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAIhG;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC5G,OAAO,CAAC,YAAY,CAAC,CAuCvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACxE,OAAO,CAAC,IAAI,CAAC,CAef"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/agent/health.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAIhG;AAeD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC5G,OAAO,CAAC,YAAY,CAAC,CAwCvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACxE,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -54,13 +54,14 @@ export async function waitHealthy(url, opts = {}) {
54
54
  if (healthSeenAt === 0)
55
55
  healthSeenAt = Date.now();
56
56
  if (await probe(`${url}/ready`)) {
57
- return { url, healthy: true, detail: 'health + ready OK' };
57
+ return { url, healthy: true, ready: true, detail: 'health + ready OK' };
58
58
  }
59
59
  const leftMs = readyGraceMs - (Date.now() - healthSeenAt);
60
60
  if (leftMs <= 0) {
61
61
  return {
62
62
  url,
63
63
  healthy: true,
64
+ ready: false,
64
65
  detail: `health OK, but /ready didn't pass within ${Math.round(readyGraceMs / 1000)}s — a backend service is likely down (check \`docker compose ps\` / its logs). Continuing; routes for that service may 502 until it's healthy.`,
65
66
  };
66
67
  }
@@ -73,8 +74,8 @@ export async function waitHealthy(url, opts = {}) {
73
74
  }
74
75
  // Overall timeout. If /health came up but /ready never did, proceed (non-fatal).
75
76
  return healthSeenAt > 0
76
- ? { url, healthy: true, detail: 'health OK but /ready not reached — the platform is still warming up; post-install steps (register) may need a re-run' }
77
- : { url, healthy: false, detail: `not reachable within ${Math.round(timeoutMs / 1000)}s — check the stack / DNS / health logs` };
77
+ ? { url, healthy: true, ready: false, detail: 'health OK but /ready not reached — the platform is still warming up; post-install steps (register) may need a re-run' }
78
+ : { url, healthy: false, ready: false, detail: `not reachable within ${Math.round(timeoutMs / 1000)}s — check the stack / DNS / health logs` };
78
79
  }
79
80
  /**
80
81
  * Minikube only: the gateway (https://localhost:8443) is reached through a
@@ -103,4 +104,4 @@ export async function ensureMinikubeGateway(url, opts = {}) {
103
104
  }
104
105
  await delay(2000); // let it bind before the caller polls
105
106
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBUzFCOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQWdCLEVBQUUsTUFBK0I7SUFDL0UsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxVQUFVO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUNqRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzdCLE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO0FBRTlGLEtBQUssVUFBVSxLQUFLLENBQUMsR0FBVztJQUM5QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDL0MsQ0FBQztJQUFDLE1B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SSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQy9CLElBQUksTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxxQ0FBcUM7SUFDL0UsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLHdFQUF3RSxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkgsSUFBSSxDQUFDO1FBQ0gsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQzNFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMscUVBQXFFO0lBQ25GLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsdUZBQXVGLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNySSxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQb3N0LWRlcGxveSBoZWFsdGggdmVyaWZpY2F0aW9uLiBBIENsb3VkRm9ybWF0aW9uIENSRUFURV9DT01QTEVURSAob3IgYVxuICogZmluaXNoZWQgc2V0dXAuc2gpIGRvZXMgTk9UIG1lYW4gdGhlIGFwcCBpcyBzZXJ2aW5nIOKAlCB0aGUgQUxCIHRhcmdldHMgc3RheVxuICogdW5oZWFsdGh5IHVudGlsIHRhc2tzL3BvZHMgY29tZSB1cC4gVGhlIHJlYWwgZG9uZS1zaWduYWwgaXMgdGhlIHBsYXRmb3JtJ3NcbiAqIGAvaGVhbHRoYCArIGAvcmVhZHlgIGVuZHBvaW50cywgc28gdGhlIGV4ZWN1dG9yIHBvbGxzIHRoZW0gd2l0aCBiYWNrb2ZmLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWx0aFJlc3VsdCB7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICByZWFkb25seSBoZWFsdGh5OiBib29sZWFuO1xuICByZWFkb25seSBkZXRhaWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXJpdmUgdGhlIFVSTCB0aGUgcGxhdGZvcm0gc2hvdWxkIGJlIHJlYWNoYWJsZSBhdC4gTG9jYWwvbWluaWt1YmUgZnJvbnQgdGhlXG4gKiBzdGFjayBvbiBsb2NhbGhvc3Q6ODQ0MzsgRUMyL0ZhcmdhdGUgdXNlIHRoZSBkZXBsb3kgZG9tYWluLiBSZXR1cm5zIG51bGwgd2hlblxuICogaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZCAoY2FsbGVyIHN1cmZhY2VzIGEgXCJ2ZXJpZnkgbWFudWFsbHlcIiBub3RlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUhlYWx0aFVybCh0YXJnZXQ6IFRhcmdldElkLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0YXJnZXQgPT09ICdsb2NhbCcgfHwgdGFyZ2V0ID09PSAnbWluaWt1YmUnKSByZXR1cm4gJ2h0dHBzOi8vbG9jYWxob3N0Ojg0NDMnO1xuICBjb25zdCBkb21haW4gPSBwYXJhbXMuZG9tYWluO1xuICByZXR1cm4gdHlwZW9mIGRvbWFpbiA9PT0gJ3N0cmluZycgJiYgZG9tYWluID8gYGh0dHBzOi8vJHtkb21haW59YCA6IG51bGw7XG59XG5cbmNvbnN0IGFnZW50ID0gbmV3IGh0dHBzLkFnZW50KHsgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSB9KTsgLy8gbG9jYWwgdXNlcyBhIHNlbGYtc2lnbmVkIGNlcnRcblxuYXN5bmMgZnVuY3Rpb24gcHJvYmUodXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodXJsLCB7IHRpbWVvdXQ6IDUwMDAsIGh0dHBzQWdlbnQ6IGFnZW50LCB2YWxpZGF0ZVN0YXR1czogKCkgPT4gdHJ1ZSB9KTtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyA+PSAyMDAgJiYgcmVzLnN0YXR1cyA8IDMwMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmNvbnN0IGRlbGF5ID0gKG1zOiBudW1iZXIpID0+IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG5cbi8qKlxuICogUG9sbCBgPHVybD4vaGVhbHRoYCB0aGVuIGA8dXJsPi9yZWFkeWAgdW50aWwgYm90aCBwYXNzIG9yIHRoZSB0aW1lb3V0IGVsYXBzZXMuXG4gKiBOb24tZmF0YWwgYnkgZGVzaWduOiBhIHRpbWVvdXQgcmV0dXJucyBgaGVhbHRoeTogZmFsc2VgIHdpdGggZ3VpZGFuY2UsIG5ldmVyIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRIZWFsdGh5KFxuICB1cmw6IHN0cmluZyxcbiAgb3B0czogeyB0aW1lb3V0TXM/OiBudW1iZXI7IGludGVydmFsTXM/OiBudW1iZXI7IHJlYWR5R3JhY2VNcz86IG51bWJlcjsgb25UaWNrPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkIH0gPSB7fSxcbik6IFByb21pc2U8SGVhbHRoUmVzdWx0PiB7XG4gIGNvbnN0IHRpbWVvdXRNcyA9IG9wdHMudGltZW91dE1zID8/IDMwMF8wMDA7IC8vIDUgbWluIOKAlCBzZXJ2aWNlcyBjb21lIHVwIGFzeW5jXG4gIGNvbnN0IGludGVydmFsTXMgPSBvcHRzLmludGVydmFsTXMgPz8gMTBfMDAwO1xuICAvLyBPbmNlIC9oZWFsdGggaXMgdXAsIG9ubHkgd2FpdCB0aGlzIG11Y2ggbG9uZ2VyIGZvciAvcmVhZHkgYmVmb3JlIHByb2NlZWRpbmcuXG4gIGNvbnN0IHJlYWR5R3JhY2VNcyA9IG9wdHMucmVhZHlHcmFjZU1zID8/IDkwXzAwMDsgLy8gOTBzIGNvdmVycyBub3JtYWwgd2FybXVwXG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIHRpbWVvdXRNcztcblxuICAvLyBXYWl0IGZvciAvaGVhbHRoLCB0aGVuIGdpdmUgL3JlYWR5IGEgQk9VTkRFRCBncmFjZSB3aW5kb3cuIC9oZWFsdGggZmxpcHMgZmlyc3RcbiAgLy8gKHRoZSBwcm9jZXNzIGlzIHVwKTsgL3JlYWR5IGFsc28gcmVxdWlyZXMgZXZlcnkgYmFja2VuZCBkZXBlbmRlbmN5IHRvIGJlIHVwLlxuICAvLyBXZSBwcmVmZXIgL3JlYWR5IChwb3N0LWluc3RhbGwgcmVnaXN0ZXIgaGl0cyBhIG5vdC15ZXQtcmVhZHkgcGxhdGZvcm0g4oaSIDUwMiksXG4gIC8vIGJ1dCBpZiBhIGRlcGVuZGVuY3kgaXMgRE9XTiAoZS5nLiBhIGNyYXNoLWxvb3Bpbmcgc2VydmljZSkgL3JlYWR5IG5ldmVyIGZsaXBzIOKAlFxuICAvLyBzbyB3ZSBtdXN0IG5vdCBibG9jayB0aGUgZnVsbCB0aW1lb3V0IG9uIGl0LiBPbmNlIC9oZWFsdGggaXMgdXAgd2Ugd2FpdCBhdCBtb3N0XG4gIC8vIGByZWFkeUdyYWNlTXNgIG1vcmUsIHRoZW4gcHJvY2VlZCB3aXRoIGEgd2FybmluZyAocmVnaXN0ZXIgb25seSBuZWVkcyB0aGVcbiAgLy8gcGxhdGZvcm0gc2VydmljZSwgd2hpY2ggL2hlYWx0aCBhbHJlYWR5IGNvbmZpcm1zIGlzIHVwKS5cbiAgbGV0IGhlYWx0aFNlZW5BdCA9IDA7XG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICBpZiAoYXdhaXQgcHJvYmUoYCR7dXJsfS9oZWFsdGhgKSkge1xuICAgICAgaWYgKGhlYWx0aFNlZW5BdCA9PT0gMCkgaGVhbHRoU2VlbkF0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmIChhd2FpdCBwcm9iZShgJHt1cmx9L3JlYWR5YCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdXJsLCBoZWFsdGh5OiB0cnVlLCBkZXRhaWw6ICdoZWFsdGggKyByZWFkeSBPSycgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxlZnRNcyA9IHJlYWR5R3JhY2VNcyAtIChEYXRlLm5vdygpIC0gaGVhbHRoU2VlbkF0KTtcbiAgICAgIGlmIChsZWZ0TXMgPD0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBoZWFsdGh5OiB0cnVlLFxuICAgICAgICAgIGRldGFpbDogYGhlYWx0aCBPSywgYnV0IC9yZWFkeSBkaWRuJ3QgcGFzcyB3aXRoaW4gJHtNYXRoLnJvdW5kKHJlYWR5R3JhY2VNcyAvIDEwMDApfXMg4oCUIGEgYmFja2VuZCBzZXJ2aWNlIGlzIGxpa2VseSBkb3duIChjaGVjayBcXGBkb2NrZXIgY29tcG9zZSBwc1xcYCAvIGl0cyBsb2dzKS4gQ29udGludWluZzsgcm91dGVzIGZvciB0aGF0IHNlcnZpY2UgbWF5IDUwMiB1bnRpbCBpdCdzIGhlYWx0aHkuYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG9wdHMub25UaWNrPy4oYGhlYWx0aCBPSyDigJQgd2FpdGluZyB1cCB0byAke01hdGguY2VpbChsZWZ0TXMgLyAxMDAwKX1zIGZvciAke3VybH0vcmVhZHkgKGRlcGVuZGVuY2llcyB3YXJtaW5nIHVwKSDigKZgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0cy5vblRpY2s/Lihgd2FpdGluZyBmb3IgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICB9XG4gICAgYXdhaXQgZGVsYXkoaW50ZXJ2YWxNcyk7XG4gIH1cbiAgLy8gT3ZlcmFsbCB0aW1lb3V0LiBJZiAvaGVhbHRoIGNhbWUgdXAgYnV0IC9yZWFkeSBuZXZlciBkaWQsIHByb2NlZWQgKG5vbi1mYXRhbCkuXG4gIHJldHVybiBoZWFsdGhTZWVuQXQgPiAwXG4gICAgPyB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgZGV0YWlsOiAnaGVhbHRoIE9LIGJ1dCAvcmVhZHkgbm90IHJlYWNoZWQg4oCUIHRoZSBwbGF0Zm9ybSBpcyBzdGlsbCB3YXJtaW5nIHVwOyBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyKSBtYXkgbmVlZCBhIHJlLXJ1bicgfVxuICAgIDogeyB1cmwsIGhlYWx0aHk6IGZhbHNlLCBkZXRhaWw6IGBub3QgcmVhY2hhYmxlIHdpdGhpbiAke01hdGgucm91bmQodGltZW91dE1zIC8gMTAwMCl9cyDigJQgY2hlY2sgdGhlIHN0YWNrIC8gRE5TIC8gaGVhbHRoIGxvZ3NgIH07XG59XG5cbi8qKlxuICogTWluaWt1YmUgb25seTogdGhlIGdhdGV3YXkgKGh0dHBzOi8vbG9jYWxob3N0Ojg0NDMpIGlzIHJlYWNoZWQgdGhyb3VnaCBhXG4gKiBga3ViZWN0bCBwb3J0LWZvcndhcmQgc3ZjL25naW54YCB0aGF0IHNldHVwLnNoIGJhY2tncm91bmRzIOKAlCB3aGljaCBjYW4gZGllIG9yXG4gKiBmYWlsIHRvIGJpbmQgKGUuZy4gYSBidXN5IHBvcnQpIHdoaWxlIHRoZSBwb2RzIHN0YXkgaGVhbHRoeSwgbGVhdmluZyB0aGUgZ2F0ZXdheVxuICogdW5yZWFjaGFibGUgc28gdGhlIGhlYWx0aCBwb2xsIGp1c3QgdGltZXMgb3V0LiBCZWZvcmUgcG9sbGluZywgcHJvYmUgdGhlIGdhdGV3YXk7XG4gKiBpZiBpdCdzIGRvd24sIChyZSlzdGFydCB0aGUgZm9yd2FyZCBERVRBQ0hFRCBzbyBpdCBvdXRsaXZlcyB0aGlzIENMSSwgdGhlbiBnaXZlXG4gKiBpdCBhIG1vbWVudCB0byBiaW5kLiBCZXN0LWVmZm9ydDogbmV2ZXIgdGhyb3dzOyBvbiBuby1rdWJlY3RsIGl0IGxvZ3MgdGhlIG1hbnVhbFxuICogY29tbWFuZC4gKHNldHVwLnNoIG5vdyBmb3J3YXJkcyA4NDQzIG9ubHksIHNvIGEgYnVzeSA4MDgwIGNhbid0IHRha2UgaXQgZG93bi4pXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVNaW5pa3ViZUdhdGV3YXkoXG4gIHVybDogc3RyaW5nLFxuICBvcHRzOiB7IG5zPzogc3RyaW5nOyBwb3J0PzogbnVtYmVyOyBvbkluZm8/OiAobXNnOiBzdHJpbmcpID0+IHZvaWQgfSA9IHt9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5zID0gb3B0cy5ucyA/PyAncGlwZWxpbmUtYnVpbGRlcic7XG4gIGNvbnN0IHBvcnQgPSBvcHRzLnBvcnQgPz8gODQ0MztcbiAgaWYgKGF3YWl0IHByb2JlKGAke3VybH0vaGVhbHRoYCkpIHJldHVybjsgLy8gZm9yd2FyZCBhbHJlYWR5IHVwIOKAlCBub3RoaW5nIHRvIGRvXG4gIG9wdHMub25JbmZvPy4oYEdhdGV3YXkgdW5yZWFjaGFibGUg4oCUIChyZSlzdGFydGluZyB0aGUgbmdpbnggcG9ydC1mb3J3YXJkIChzdmMvbmdpbnggJHtwb3J0fToke3BvcnR9LCBucyAke25zfSkg4oCmYCk7XG4gIHRyeSB7XG4gICAgc3Bhd24oJ2t1YmVjdGwnLCBbJ3BvcnQtZm9yd2FyZCcsICctbicsIG5zLCAnc3ZjL25naW54JywgYCR7cG9ydH06JHtwb3J0fWBdLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiAnaWdub3JlJyxcbiAgICB9KS51bnJlZigpOyAvLyBkZXRhY2hlZCArIHVucmVmIOKGkiBzdXJ2aXZlcyB0aGlzIENMSSBzbyB0aGUgdXNlciBrZWVwcyB0aGUgZ2F0ZXdheVxuICB9IGNhdGNoIHtcbiAgICBvcHRzLm9uSW5mbz8uKGBDb3VsZG4ndCBzdGFydCBpdCAoaXMga3ViZWN0bCBvbiBQQVRIPykuIFN0YXJ0IGl0IG1hbnVhbGx5OiBrdWJlY3RsIHBvcnQtZm9yd2FyZCAtbiAke25zfSBzdmMvbmdpbnggJHtwb3J0fToke3BvcnR9YCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGRlbGF5KDIwMDApOyAvLyBsZXQgaXQgYmluZCBiZWZvcmUgdGhlIGNhbGxlciBwb2xsc1xufVxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBZTFCOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQWdCLEVBQUUsTUFBK0I7SUFDL0UsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxVQUFVO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUNqRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzdCLE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO0FBRTlGLEtBQUssVUFBVSxLQUFLLENBQUMsR0FBVztJQUM5QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDL0MsQ0FBQztJQUFDLE1B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Q1gsT0FBdUUsRUFBRTtJQUV6RSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQy9CLElBQUksTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxxQ0FBcUM7SUFDL0UsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLHdFQUF3RSxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkgsSUFBSSxDQUFDO1FBQ0gsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQzNFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMscUVBQXFFO0lBQ25GLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsdUZBQXVGLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNySSxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQb3N0LWRlcGxveSBoZWFsdGggdmVyaWZpY2F0aW9uLiBBIENsb3VkRm9ybWF0aW9uIENSRUFURV9DT01QTEVURSAob3IgYVxuICogZmluaXNoZWQgc2V0dXAuc2gpIGRvZXMgTk9UIG1lYW4gdGhlIGFwcCBpcyBzZXJ2aW5nIOKAlCB0aGUgQUxCIHRhcmdldHMgc3RheVxuICogdW5oZWFsdGh5IHVudGlsIHRhc2tzL3BvZHMgY29tZSB1cC4gVGhlIHJlYWwgZG9uZS1zaWduYWwgaXMgdGhlIHBsYXRmb3JtJ3NcbiAqIGAvaGVhbHRoYCArIGAvcmVhZHlgIGVuZHBvaW50cywgc28gdGhlIGV4ZWN1dG9yIHBvbGxzIHRoZW0gd2l0aCBiYWNrb2ZmLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWx0aFJlc3VsdCB7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICByZWFkb25seSBoZWFsdGh5OiBib29sZWFuO1xuICAvKipcbiAgICogVHJ1ZSBvbmx5IHdoZW4gQk9USCAvaGVhbHRoIGFuZCAvcmVhZHkgcGFzc2VkLiBEaXN0aW5ndWlzaGVzIGEgZnVsbHktcmVhZHlcbiAgICogcGxhdGZvcm0gZnJvbSB0aGUgZGVncmFkZWQgXCJoZWFsdGggT0sgYnV0IC9yZWFkeSBuZXZlciBjYW1lLCBwcm9jZWVkaW5nIGFueXdheVwiXG4gICAqIHN0YXRlIOKAlCBib3RoIGhhdmUgaGVhbHRoeTp0cnVlLCBzbyBjYWxsZXJzIHNob3VsZCBzdHlsZSBzdWNjZXNzIG9uIGByZWFkeWAuXG4gICAqL1xuICByZWFkb25seSByZWFkeTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0YWlsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVyaXZlIHRoZSBVUkwgdGhlIHBsYXRmb3JtIHNob3VsZCBiZSByZWFjaGFibGUgYXQuIExvY2FsL21pbmlrdWJlIGZyb250IHRoZVxuICogc3RhY2sgb24gbG9jYWxob3N0Ojg0NDM7IEVDMi9GYXJnYXRlIHVzZSB0aGUgZGVwbG95IGRvbWFpbi4gUmV0dXJucyBudWxsIHdoZW5cbiAqIGl0IGNhbid0IGJlIGRldGVybWluZWQgKGNhbGxlciBzdXJmYWNlcyBhIFwidmVyaWZ5IG1hbnVhbGx5XCIgbm90ZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0OiBUYXJnZXRJZCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBpZiAodGFyZ2V0ID09PSAnbG9jYWwnIHx8IHRhcmdldCA9PT0gJ21pbmlrdWJlJykgcmV0dXJuICdodHRwczovL2xvY2FsaG9zdDo4NDQzJztcbiAgY29uc3QgZG9tYWluID0gcGFyYW1zLmRvbWFpbjtcbiAgcmV0dXJuIHR5cGVvZiBkb21haW4gPT09ICdzdHJpbmcnICYmIGRvbWFpbiA/IGBodHRwczovLyR7ZG9tYWlufWAgOiBudWxsO1xufVxuXG5jb25zdCBhZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7IHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSk7IC8vIGxvY2FsIHVzZXMgYSBzZWxmLXNpZ25lZCBjZXJ0XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2JlKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCwgeyB0aW1lb3V0OiA1MDAwLCBodHRwc0FnZW50OiBhZ2VudCwgdmFsaWRhdGVTdGF0dXM6ICgpID0+IHRydWUgfSk7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuXG4vKipcbiAqIFBvbGwgYDx1cmw+L2hlYWx0aGAgdGhlbiBgPHVybD4vcmVhZHlgIHVudGlsIGJvdGggcGFzcyBvciB0aGUgdGltZW91dCBlbGFwc2VzLlxuICogTm9uLWZhdGFsIGJ5IGRlc2lnbjogYSB0aW1lb3V0IHJldHVybnMgYGhlYWx0aHk6IGZhbHNlYCB3aXRoIGd1aWRhbmNlLCBuZXZlciB0aHJvd3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0SGVhbHRoeShcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdHM6IHsgdGltZW91dE1zPzogbnVtYmVyOyBpbnRlcnZhbE1zPzogbnVtYmVyOyByZWFkeUdyYWNlTXM/OiBudW1iZXI7IG9uVGljaz86IChtc2c6IHN0cmluZykgPT4gdm9pZCB9ID0ge30sXG4pOiBQcm9taXNlPEhlYWx0aFJlc3VsdD4ge1xuICBjb25zdCB0aW1lb3V0TXMgPSBvcHRzLnRpbWVvdXRNcyA/PyAzMDBfMDAwOyAvLyA1IG1pbiDigJQgc2VydmljZXMgY29tZSB1cCBhc3luY1xuICBjb25zdCBpbnRlcnZhbE1zID0gb3B0cy5pbnRlcnZhbE1zID8/IDEwXzAwMDtcbiAgLy8gT25jZSAvaGVhbHRoIGlzIHVwLCBvbmx5IHdhaXQgdGhpcyBtdWNoIGxvbmdlciBmb3IgL3JlYWR5IGJlZm9yZSBwcm9jZWVkaW5nLlxuICBjb25zdCByZWFkeUdyYWNlTXMgPSBvcHRzLnJlYWR5R3JhY2VNcyA/PyA5MF8wMDA7IC8vIDkwcyBjb3ZlcnMgbm9ybWFsIHdhcm11cFxuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0TXM7XG5cbiAgLy8gV2FpdCBmb3IgL2hlYWx0aCwgdGhlbiBnaXZlIC9yZWFkeSBhIEJPVU5ERUQgZ3JhY2Ugd2luZG93LiAvaGVhbHRoIGZsaXBzIGZpcnN0XG4gIC8vICh0aGUgcHJvY2VzcyBpcyB1cCk7IC9yZWFkeSBhbHNvIHJlcXVpcmVzIGV2ZXJ5IGJhY2tlbmQgZGVwZW5kZW5jeSB0byBiZSB1cC5cbiAgLy8gV2UgcHJlZmVyIC9yZWFkeSAocG9zdC1pbnN0YWxsIHJlZ2lzdGVyIGhpdHMgYSBub3QteWV0LXJlYWR5IHBsYXRmb3JtIOKGkiA1MDIpLFxuICAvLyBidXQgaWYgYSBkZXBlbmRlbmN5IGlzIERPV04gKGUuZy4gYSBjcmFzaC1sb29waW5nIHNlcnZpY2UpIC9yZWFkeSBuZXZlciBmbGlwcyDigJRcbiAgLy8gc28gd2UgbXVzdCBub3QgYmxvY2sgdGhlIGZ1bGwgdGltZW91dCBvbiBpdC4gT25jZSAvaGVhbHRoIGlzIHVwIHdlIHdhaXQgYXQgbW9zdFxuICAvLyBgcmVhZHlHcmFjZU1zYCBtb3JlLCB0aGVuIHByb2NlZWQgd2l0aCBhIHdhcm5pbmcgKHJlZ2lzdGVyIG9ubHkgbmVlZHMgdGhlXG4gIC8vIHBsYXRmb3JtIHNlcnZpY2UsIHdoaWNoIC9oZWFsdGggYWxyZWFkeSBjb25maXJtcyBpcyB1cCkuXG4gIGxldCBoZWFsdGhTZWVuQXQgPSAwO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgaWYgKGF3YWl0IHByb2JlKGAke3VybH0vaGVhbHRoYCkpIHtcbiAgICAgIGlmIChoZWFsdGhTZWVuQXQgPT09IDApIGhlYWx0aFNlZW5BdCA9IERhdGUubm93KCk7XG4gICAgICBpZiAoYXdhaXQgcHJvYmUoYCR7dXJsfS9yZWFkeWApKSB7XG4gICAgICAgIHJldHVybiB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgcmVhZHk6IHRydWUsIGRldGFpbDogJ2hlYWx0aCArIHJlYWR5IE9LJyB9O1xuICAgICAgfVxuICAgICAgY29uc3QgbGVmdE1zID0gcmVhZHlHcmFjZU1zIC0gKERhdGUubm93KCkgLSBoZWFsdGhTZWVuQXQpO1xuICAgICAgaWYgKGxlZnRNcyA8PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDogYGhlYWx0aCBPSywgYnV0IC9yZWFkeSBkaWRuJ3QgcGFzcyB3aXRoaW4gJHtNYXRoLnJvdW5kKHJlYWR5R3JhY2VNcyAvIDEwMDApfXMg4oCUIGEgYmFja2VuZCBzZXJ2aWNlIGlzIGxpa2VseSBkb3duIChjaGVjayBcXGBkb2NrZXIgY29tcG9zZSBwc1xcYCAvIGl0cyBsb2dzKS4gQ29udGludWluZzsgcm91dGVzIGZvciB0aGF0IHNlcnZpY2UgbWF5IDUwMiB1bnRpbCBpdCdzIGhlYWx0aHkuYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG9wdHMub25UaWNrPy4oYGhlYWx0aCBPSyDigJQgd2FpdGluZyB1cCB0byAke01hdGguY2VpbChsZWZ0TXMgLyAxMDAwKX1zIGZvciAke3VybH0vcmVhZHkgKGRlcGVuZGVuY2llcyB3YXJtaW5nIHVwKSDigKZgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0cy5vblRpY2s/Lihgd2FpdGluZyBmb3IgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICB9XG4gICAgYXdhaXQgZGVsYXkoaW50ZXJ2YWxNcyk7XG4gIH1cbiAgLy8gT3ZlcmFsbCB0aW1lb3V0LiBJZiAvaGVhbHRoIGNhbWUgdXAgYnV0IC9yZWFkeSBuZXZlciBkaWQsIHByb2NlZWQgKG5vbi1mYXRhbCkuXG4gIHJldHVybiBoZWFsdGhTZWVuQXQgPiAwXG4gICAgPyB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgcmVhZHk6IGZhbHNlLCBkZXRhaWw6ICdoZWFsdGggT0sgYnV0IC9yZWFkeSBub3QgcmVhY2hlZCDigJQgdGhlIHBsYXRmb3JtIGlzIHN0aWxsIHdhcm1pbmcgdXA7IHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIpIG1heSBuZWVkIGEgcmUtcnVuJyB9XG4gICAgOiB7IHVybCwgaGVhbHRoeTogZmFsc2UsIHJlYWR5OiBmYWxzZSwgZGV0YWlsOiBgbm90IHJlYWNoYWJsZSB3aXRoaW4gJHtNYXRoLnJvdW5kKHRpbWVvdXRNcyAvIDEwMDApfXMg4oCUIGNoZWNrIHRoZSBzdGFjayAvIEROUyAvIGhlYWx0aCBsb2dzYCB9O1xufVxuXG4vKipcbiAqIE1pbmlrdWJlIG9ubHk6IHRoZSBnYXRld2F5IChodHRwczovL2xvY2FsaG9zdDo4NDQzKSBpcyByZWFjaGVkIHRocm91Z2ggYVxuICogYGt1YmVjdGwgcG9ydC1mb3J3YXJkIHN2Yy9uZ2lueGAgdGhhdCBzZXR1cC5zaCBiYWNrZ3JvdW5kcyDigJQgd2hpY2ggY2FuIGRpZSBvclxuICogZmFpbCB0byBiaW5kIChlLmcuIGEgYnVzeSBwb3J0KSB3aGlsZSB0aGUgcG9kcyBzdGF5IGhlYWx0aHksIGxlYXZpbmcgdGhlIGdhdGV3YXlcbiAqIHVucmVhY2hhYmxlIHNvIHRoZSBoZWFsdGggcG9sbCBqdXN0IHRpbWVzIG91dC4gQmVmb3JlIHBvbGxpbmcsIHByb2JlIHRoZSBnYXRld2F5O1xuICogaWYgaXQncyBkb3duLCAocmUpc3RhcnQgdGhlIGZvcndhcmQgREVUQUNIRUQgc28gaXQgb3V0bGl2ZXMgdGhpcyBDTEksIHRoZW4gZ2l2ZVxuICogaXQgYSBtb21lbnQgdG8gYmluZC4gQmVzdC1lZmZvcnQ6IG5ldmVyIHRocm93czsgb24gbm8ta3ViZWN0bCBpdCBsb2dzIHRoZSBtYW51YWxcbiAqIGNvbW1hbmQuIChzZXR1cC5zaCBub3cgZm9yd2FyZHMgODQ0MyBvbmx5LCBzbyBhIGJ1c3kgODA4MCBjYW4ndCB0YWtlIGl0IGRvd24uKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTWluaWt1YmVHYXRld2F5KFxuICB1cmw6IHN0cmluZyxcbiAgb3B0czogeyBucz86IHN0cmluZzsgcG9ydD86IG51bWJlcjsgb25JbmZvPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkIH0gPSB7fSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBucyA9IG9wdHMubnMgPz8gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuICBjb25zdCBwb3J0ID0gb3B0cy5wb3J0ID8/IDg0NDM7XG4gIGlmIChhd2FpdCBwcm9iZShgJHt1cmx9L2hlYWx0aGApKSByZXR1cm47IC8vIGZvcndhcmQgYWxyZWFkeSB1cCDigJQgbm90aGluZyB0byBkb1xuICBvcHRzLm9uSW5mbz8uKGBHYXRld2F5IHVucmVhY2hhYmxlIOKAlCAocmUpc3RhcnRpbmcgdGhlIG5naW54IHBvcnQtZm9yd2FyZCAoc3ZjL25naW54ICR7cG9ydH06JHtwb3J0fSwgbnMgJHtuc30pIOKApmApO1xuICB0cnkge1xuICAgIHNwYXduKCdrdWJlY3RsJywgWydwb3J0LWZvcndhcmQnLCAnLW4nLCBucywgJ3N2Yy9uZ2lueCcsIGAke3BvcnR9OiR7cG9ydH1gXSwge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogJ2lnbm9yZScsXG4gICAgfSkudW5yZWYoKTsgLy8gZGV0YWNoZWQgKyB1bnJlZiDihpIgc3Vydml2ZXMgdGhpcyBDTEkgc28gdGhlIHVzZXIga2VlcHMgdGhlIGdhdGV3YXlcbiAgfSBjYXRjaCB7XG4gICAgb3B0cy5vbkluZm8/LihgQ291bGRuJ3Qgc3RhcnQgaXQgKGlzIGt1YmVjdGwgb24gUEFUSD8pLiBTdGFydCBpdCBtYW51YWxseToga3ViZWN0bCBwb3J0LWZvcndhcmQgLW4gJHtuc30gc3ZjL25naW54ICR7cG9ydH06JHtwb3J0fWApO1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBkZWxheSgyMDAwKTsgLy8gbGV0IGl0IGJpbmQgYmVmb3JlIHRoZSBjYWxsZXIgcG9sbHNcbn1cbiJdfQ==
@@ -1,9 +1,26 @@
1
- import type { TargetSpec } from './targets.js';
2
- export interface PortCheck {
1
+ import type { TargetId, TargetSpec } from './targets.js';
2
+ export interface HostPort {
3
3
  readonly service: string;
4
4
  readonly port: number;
5
+ }
6
+ export interface PortCheck extends HostPort {
5
7
  readonly available: boolean;
6
8
  }
7
- /** Probe every host port a target binds; returns one PortCheck per port. */
8
- export declare function checkHostPorts(spec: TargetSpec): Promise<PortCheck[]>;
9
+ /**
10
+ * Derive the host ports a target binds from its ACTUAL (cloned) deploy source, so the
11
+ * list can't drift from the deploy. local → docker-compose.yml; minikube → setup.sh;
12
+ * ec2/fargate → none (CloudFormation binds nothing on the operator's machine). Needs
13
+ * the deploy files on disk (run post-clone); falls back to the target's static
14
+ * `hostPorts` if the source is missing/unreadable.
15
+ */
16
+ export declare function discoverHostPorts(target: TargetId, cwd: string, spec: TargetSpec): HostPort[];
17
+ /** Probe each host port; returns one PortCheck per port (probed in parallel). */
18
+ export declare function checkHostPorts(ports: readonly HostPort[]): Promise<PortCheck[]>;
19
+ /**
20
+ * Is the target's OWN deploy stack already running? (local docker-compose only.) Used
21
+ * so the port pre-flight doesn't block an idempotent RE-RUN: if the "taken" ports are
22
+ * held by the stack you already have up, `docker compose up` just no-ops them — that's
23
+ * not a conflict. Read-only `docker compose ps`; false on any error / non-local target.
24
+ */
25
+ export declare function stackRunning(target: TargetId, cwd: string, spec: TargetSpec): boolean;
9
26
  //# sourceMappingURL=ports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/agent/ports.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAwBD,4EAA4E;AAC5E,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAI3E"}
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/agent/ports.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAqED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,EAAE,CAQ7F;AAED,iFAAiF;AACjF,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAErF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAWrF"}
@@ -1,13 +1,24 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  /**
4
- * Host-port pre-flight. Local (Docker-published) and minikube (kubectl
5
- * port-forward) deploys bind fixed ports on the operator's machine; if one is
6
- * already taken, the container/forward fails to bind — and for the gateway that
7
- * surfaces as a silent "/health never reachable" hang. We probe the ports up
8
- * front so provision can stop with a clear summary instead of failing mid-deploy.
4
+ * Host-port pre-flight. Local (Docker-published) and minikube (kubectl port-forward)
5
+ * deploys bind fixed ports on the operator's machine; if one is already taken, the
6
+ * container/forward fails to bind — and for the gateway that surfaces as a silent
7
+ * "/health never reachable" hang. We probe the ports before deploying so provision
8
+ * can stop with a clear summary instead of failing mid-deploy.
9
+ *
10
+ * The port list is DERIVED from each target's actual (cloned) deploy source — so it
11
+ * can't drift from the deploy: local from `docker-compose.yml`'s published ports,
12
+ * minikube from `setup.sh`'s kubectl port-forwards. ec2/fargate deploy via
13
+ * CloudFormation and bind NOTHING on the operator's machine (only the remote ALB),
14
+ * so they yield no host ports. `targets.hostPorts` is only a fallback when the source
15
+ * file can't be read.
9
16
  */
17
+ import { execSync } from 'child_process';
18
+ import { readFileSync } from 'fs';
10
19
  import net from 'net';
20
+ import path from 'path';
21
+ import { parse as parseYaml } from 'yaml';
11
22
  /** Try to bind <host>:<port>; true if free, false on EADDRINUSE/EACCES. */
12
23
  function canBind(port, host) {
13
24
  return new Promise((resolve) => {
@@ -18,18 +29,104 @@ function canBind(port, host) {
18
29
  });
19
30
  }
20
31
  /**
21
- * Is `port` free? Probes BOTH interfaces the deploy paths bind: `0.0.0.0` (Docker
22
- * publishes `0.0.0.0:<port>`) and `127.0.0.1` (kubectl port-forward, Docker Desktop
23
- * localhost). A holder on either makes the matching bind fail, so requiring both to
24
- * succeed catches the real conflict (e.g. macOS AirPlay on 5000) without
25
- * SO_REUSEADDR false-negatives.
32
+ * Is `port` free? Probes BOTH `0.0.0.0` (where Docker publishes `0.0.0.0:<port>`)
33
+ * AND `127.0.0.1` (where kubectl port-forward / Docker Desktop bind), requiring both.
34
+ *
35
+ * This is NOT redundant do not "simplify" to one bind. Verified empirically on
36
+ * macOS (Node sets SO_REUSEADDR): neither interface subsumes the other. With a holder
37
+ * on 127.0.0.1, binding 0.0.0.0 still SUCCEEDS (a single 0.0.0.0 probe would MISS a
38
+ * port-forward squatting the gateway on loopback); with a holder on 0.0.0.0, binding
39
+ * 127.0.0.1 still succeeds. Only checking both reliably catches the real conflict (a
40
+ * port-forward on 8443, AirPlay on 5000, …). For a pre-flight, a false positive
41
+ * (over-cautious) beats a false negative (miss it → the deploy fails mid-way).
26
42
  */
27
43
  async function isPortFree(port) {
28
44
  const [allIfaces, loopback] = await Promise.all([canBind(port, '0.0.0.0'), canBind(port, '127.0.0.1')]);
29
45
  return allIfaces && loopback;
30
46
  }
31
- /** Probe every host port a target binds; returns one PortCheck per port. */
32
- export async function checkHostPorts(spec) {
33
- return Promise.all(spec.hostPorts.map(async ({ service, port }) => ({ service, port, available: await isPortFree(port) })));
47
+ /**
48
+ * Host (left-side) ports a docker-compose.yml publishes, keyed by service. Handles
49
+ * the short forms "HOST:CONTAINER", "HOST:CONTAINER/proto", "IP:HOST:CONTAINER" and
50
+ * the long form `{ published, target }`. Bare "CONTAINER" (random host port) is
51
+ * skipped — it can't conflict on a fixed port.
52
+ */
53
+ function composeHostPorts(file) {
54
+ const doc = parseYaml(readFileSync(file, 'utf8'));
55
+ const out = [];
56
+ for (const [service, def] of Object.entries(doc?.services ?? {})) {
57
+ for (const entry of def?.ports ?? []) {
58
+ let host;
59
+ if (typeof entry === 'string') {
60
+ const parts = (entry.split('/')[0] ?? '').split(':'); // strip /proto, split ip:host:container
61
+ if (parts.length >= 2)
62
+ host = Number(parts[parts.length - 2] ?? ''); // host is second-from-last
63
+ }
64
+ else if (entry && typeof entry === 'object' && 'published' in entry) {
65
+ host = Number(entry.published);
66
+ }
67
+ if (host !== undefined && Number.isInteger(host))
68
+ out.push({ service, port: host });
69
+ }
70
+ }
71
+ return out;
72
+ }
73
+ /** Host ports from minikube setup.sh's `port_forward "Name" svc "HOST:CONTAINER …"` calls. */
74
+ function forwardHostPorts(file) {
75
+ const out = [];
76
+ const re = /port_forward\s+"([^"]+)"\s+\S+\s+"([^"]+)"/g;
77
+ const text = readFileSync(file, 'utf8');
78
+ let m;
79
+ while ((m = re.exec(text)) !== null) {
80
+ const service = m[1] ?? '';
81
+ for (const pair of (m[2] ?? '').trim().split(/\s+/)) {
82
+ const host = Number(pair.split(':')[0] ?? '');
83
+ if (Number.isInteger(host))
84
+ out.push({ service, port: host });
85
+ }
86
+ }
87
+ return out;
88
+ }
89
+ /**
90
+ * Derive the host ports a target binds from its ACTUAL (cloned) deploy source, so the
91
+ * list can't drift from the deploy. local → docker-compose.yml; minikube → setup.sh;
92
+ * ec2/fargate → none (CloudFormation binds nothing on the operator's machine). Needs
93
+ * the deploy files on disk (run post-clone); falls back to the target's static
94
+ * `hostPorts` if the source is missing/unreadable.
95
+ */
96
+ export function discoverHostPorts(target, cwd, spec) {
97
+ try {
98
+ if (target === 'local')
99
+ return composeHostPorts(path.join(cwd, spec.dir, 'docker-compose.yml'));
100
+ if (target === 'minikube')
101
+ return forwardHostPorts(path.join(cwd, spec.dir, 'bin', 'setup.sh'));
102
+ return []; // ec2/fargate deploy remotely — nothing binds locally
103
+ }
104
+ catch {
105
+ return spec.hostPorts.map((p) => ({ ...p }));
106
+ }
107
+ }
108
+ /** Probe each host port; returns one PortCheck per port (probed in parallel). */
109
+ export async function checkHostPorts(ports) {
110
+ return Promise.all(ports.map(async ({ service, port }) => ({ service, port, available: await isPortFree(port) })));
111
+ }
112
+ /**
113
+ * Is the target's OWN deploy stack already running? (local docker-compose only.) Used
114
+ * so the port pre-flight doesn't block an idempotent RE-RUN: if the "taken" ports are
115
+ * held by the stack you already have up, `docker compose up` just no-ops them — that's
116
+ * not a conflict. Read-only `docker compose ps`; false on any error / non-local target.
117
+ */
118
+ export function stackRunning(target, cwd, spec) {
119
+ if (target !== 'local')
120
+ return false;
121
+ try {
122
+ const compose = path.join(cwd, spec.dir, 'docker-compose.yml');
123
+ const out = execSync(`docker compose -f '${compose}' ps -q`, { stdio: ['ignore', 'pipe', 'ignore'], timeout: 10000 })
124
+ .toString()
125
+ .trim();
126
+ return out.length > 0;
127
+ }
128
+ catch {
129
+ return false;
130
+ }
34
131
  }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQvcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7O0dBTUc7QUFFSCxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFTdEIsMkVBQTJFO0FBQzNFLFNBQVMsT0FBTyxDQUFDLElBQVksRUFBRSxJQUFZO0lBQ3pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILEtBQUssVUFBVSxVQUFVLENBQUMsSUFBWTtJQUNwQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEcsT0FBTyxTQUFTLElBQUksUUFBUSxDQUFDO0FBQy9CLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsSUFBZ0I7SUFDbkQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDeEcsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBIb3N0LXBvcnQgcHJlLWZsaWdodC4gTG9jYWwgKERvY2tlci1wdWJsaXNoZWQpIGFuZCBtaW5pa3ViZSAoa3ViZWN0bFxuICogcG9ydC1mb3J3YXJkKSBkZXBsb3lzIGJpbmQgZml4ZWQgcG9ydHMgb24gdGhlIG9wZXJhdG9yJ3MgbWFjaGluZTsgaWYgb25lIGlzXG4gKiBhbHJlYWR5IHRha2VuLCB0aGUgY29udGFpbmVyL2ZvcndhcmQgZmFpbHMgdG8gYmluZCDigJQgYW5kIGZvciB0aGUgZ2F0ZXdheSB0aGF0XG4gKiBzdXJmYWNlcyBhcyBhIHNpbGVudCBcIi9oZWFsdGggbmV2ZXIgcmVhY2hhYmxlXCIgaGFuZy4gV2UgcHJvYmUgdGhlIHBvcnRzIHVwXG4gKiBmcm9udCBzbyBwcm92aXNpb24gY2FuIHN0b3Agd2l0aCBhIGNsZWFyIHN1bW1hcnkgaW5zdGVhZCBvZiBmYWlsaW5nIG1pZC1kZXBsb3kuXG4gKi9cblxuaW1wb3J0IG5ldCBmcm9tICduZXQnO1xuaW1wb3J0IHR5cGUgeyBUYXJnZXRTcGVjIH0gZnJvbSAnLi90YXJnZXRzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBQb3J0Q2hlY2sge1xuICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgYXZhaWxhYmxlOiBib29sZWFuO1xufVxuXG4vKiogVHJ5IHRvIGJpbmQgPGhvc3Q+Ojxwb3J0PjsgdHJ1ZSBpZiBmcmVlLCBmYWxzZSBvbiBFQUREUklOVVNFL0VBQ0NFUy4gKi9cbmZ1bmN0aW9uIGNhbkJpbmQocG9ydDogbnVtYmVyLCBob3N0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc3J2ID0gbmV0LmNyZWF0ZVNlcnZlcigpO1xuICAgIHNydi5vbmNlKCdlcnJvcicsICgpID0+IHJlc29sdmUoZmFsc2UpKTtcbiAgICBzcnYub25jZSgnbGlzdGVuaW5nJywgKCkgPT4gc3J2LmNsb3NlKCgpID0+IHJlc29sdmUodHJ1ZSkpKTtcbiAgICBzcnYubGlzdGVuKHBvcnQsIGhvc3QpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJcyBgcG9ydGAgZnJlZT8gUHJvYmVzIEJPVEggaW50ZXJmYWNlcyB0aGUgZGVwbG95IHBhdGhzIGJpbmQ6IGAwLjAuMC4wYCAoRG9ja2VyXG4gKiBwdWJsaXNoZXMgYDAuMC4wLjA6PHBvcnQ+YCkgYW5kIGAxMjcuMC4wLjFgIChrdWJlY3RsIHBvcnQtZm9yd2FyZCwgRG9ja2VyIERlc2t0b3BcbiAqIGxvY2FsaG9zdCkuIEEgaG9sZGVyIG9uIGVpdGhlciBtYWtlcyB0aGUgbWF0Y2hpbmcgYmluZCBmYWlsLCBzbyByZXF1aXJpbmcgYm90aCB0b1xuICogc3VjY2VlZCBjYXRjaGVzIHRoZSByZWFsIGNvbmZsaWN0IChlLmcuIG1hY09TIEFpclBsYXkgb24gNTAwMCkgd2l0aG91dFxuICogU09fUkVVU0VBRERSIGZhbHNlLW5lZ2F0aXZlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNQb3J0RnJlZShwb3J0OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgW2FsbElmYWNlcywgbG9vcGJhY2tdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2NhbkJpbmQocG9ydCwgJzAuMC4wLjAnKSwgY2FuQmluZChwb3J0LCAnMTI3LjAuMC4xJyldKTtcbiAgcmV0dXJuIGFsbElmYWNlcyAmJiBsb29wYmFjaztcbn1cblxuLyoqIFByb2JlIGV2ZXJ5IGhvc3QgcG9ydCBhIHRhcmdldCBiaW5kczsgcmV0dXJucyBvbmUgUG9ydENoZWNrIHBlciBwb3J0LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrSG9zdFBvcnRzKHNwZWM6IFRhcmdldFNwZWMpOiBQcm9taXNlPFBvcnRDaGVja1tdPiB7XG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICBzcGVjLmhvc3RQb3J0cy5tYXAoYXN5bmMgKHsgc2VydmljZSwgcG9ydCB9KSA9PiAoeyBzZXJ2aWNlLCBwb3J0LCBhdmFpbGFibGU6IGF3YWl0IGlzUG9ydEZyZWUocG9ydCkgfSkpLFxuICApO1xufVxuIl19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQvcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ2xDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFZMUMsMkVBQTJFO0FBQzNFLFNBQVMsT0FBTyxDQUFDLElBQVksRUFBRSxJQUFZO0lBQ3pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsS0FBSyxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3BDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FB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SUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsT0FBTyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNsSCxRQUFRLEVBQUU7YUFDVixJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBIb3N0LXBvcnQgcHJlLWZsaWdodC4gTG9jYWwgKERvY2tlci1wdWJsaXNoZWQpIGFuZCBtaW5pa3ViZSAoa3ViZWN0bCBwb3J0LWZvcndhcmQpXG4gKiBkZXBsb3lzIGJpbmQgZml4ZWQgcG9ydHMgb24gdGhlIG9wZXJhdG9yJ3MgbWFjaGluZTsgaWYgb25lIGlzIGFscmVhZHkgdGFrZW4sIHRoZVxuICogY29udGFpbmVyL2ZvcndhcmQgZmFpbHMgdG8gYmluZCDigJQgYW5kIGZvciB0aGUgZ2F0ZXdheSB0aGF0IHN1cmZhY2VzIGFzIGEgc2lsZW50XG4gKiBcIi9oZWFsdGggbmV2ZXIgcmVhY2hhYmxlXCIgaGFuZy4gV2UgcHJvYmUgdGhlIHBvcnRzIGJlZm9yZSBkZXBsb3lpbmcgc28gcHJvdmlzaW9uXG4gKiBjYW4gc3RvcCB3aXRoIGEgY2xlYXIgc3VtbWFyeSBpbnN0ZWFkIG9mIGZhaWxpbmcgbWlkLWRlcGxveS5cbiAqXG4gKiBUaGUgcG9ydCBsaXN0IGlzIERFUklWRUQgZnJvbSBlYWNoIHRhcmdldCdzIGFjdHVhbCAoY2xvbmVkKSBkZXBsb3kgc291cmNlIOKAlCBzbyBpdFxuICogY2FuJ3QgZHJpZnQgZnJvbSB0aGUgZGVwbG95OiBsb2NhbCBmcm9tIGBkb2NrZXItY29tcG9zZS55bWxgJ3MgcHVibGlzaGVkIHBvcnRzLFxuICogbWluaWt1YmUgZnJvbSBgc2V0dXAuc2hgJ3Mga3ViZWN0bCBwb3J0LWZvcndhcmRzLiBlYzIvZmFyZ2F0ZSBkZXBsb3kgdmlhXG4gKiBDbG91ZEZvcm1hdGlvbiBhbmQgYmluZCBOT1RISU5HIG9uIHRoZSBvcGVyYXRvcidzIG1hY2hpbmUgKG9ubHkgdGhlIHJlbW90ZSBBTEIpLFxuICogc28gdGhleSB5aWVsZCBubyBob3N0IHBvcnRzLiBgdGFyZ2V0cy5ob3N0UG9ydHNgIGlzIG9ubHkgYSBmYWxsYmFjayB3aGVuIHRoZSBzb3VyY2VcbiAqIGZpbGUgY2FuJ3QgYmUgcmVhZC5cbiAqL1xuXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IG5ldCBmcm9tICduZXQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQsIFRhcmdldFNwZWMgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RQb3J0IHtcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydENoZWNrIGV4dGVuZHMgSG9zdFBvcnQge1xuICByZWFkb25seSBhdmFpbGFibGU6IGJvb2xlYW47XG59XG5cbi8qKiBUcnkgdG8gYmluZCA8aG9zdD46PHBvcnQ+OyB0cnVlIGlmIGZyZWUsIGZhbHNlIG9uIEVBRERSSU5VU0UvRUFDQ0VTLiAqL1xuZnVuY3Rpb24gY2FuQmluZChwb3J0OiBudW1iZXIsIGhvc3Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzcnYgPSBuZXQuY3JlYXRlU2VydmVyKCk7XG4gICAgc3J2Lm9uY2UoJ2Vycm9yJywgKCkgPT4gcmVzb2x2ZShmYWxzZSkpO1xuICAgIHNydi5vbmNlKCdsaXN0ZW5pbmcnLCAoKSA9PiBzcnYuY2xvc2UoKCkgPT4gcmVzb2x2ZSh0cnVlKSkpO1xuICAgIHNydi5saXN0ZW4ocG9ydCwgaG9zdCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIElzIGBwb3J0YCBmcmVlPyBQcm9iZXMgQk9USCBgMC4wLjAuMGAgKHdoZXJlIERvY2tlciBwdWJsaXNoZXMgYDAuMC4wLjA6PHBvcnQ+YClcbiAqIEFORCBgMTI3LjAuMC4xYCAod2hlcmUga3ViZWN0bCBwb3J0LWZvcndhcmQgLyBEb2NrZXIgRGVza3RvcCBiaW5kKSwgcmVxdWlyaW5nIGJvdGguXG4gKlxuICogVGhpcyBpcyBOT1QgcmVkdW5kYW50IOKAlCBkbyBub3QgXCJzaW1wbGlmeVwiIHRvIG9uZSBiaW5kLiBWZXJpZmllZCBlbXBpcmljYWxseSBvblxuICogbWFjT1MgKE5vZGUgc2V0cyBTT19SRVVTRUFERFIpOiBuZWl0aGVyIGludGVyZmFjZSBzdWJzdW1lcyB0aGUgb3RoZXIuIFdpdGggYSBob2xkZXJcbiAqIG9uIDEyNy4wLjAuMSwgYmluZGluZyAwLjAuMC4wIHN0aWxsIFNVQ0NFRURTIChhIHNpbmdsZSAwLjAuMC4wIHByb2JlIHdvdWxkIE1JU1MgYVxuICogcG9ydC1mb3J3YXJkIHNxdWF0dGluZyB0aGUgZ2F0ZXdheSBvbiBsb29wYmFjayk7IHdpdGggYSBob2xkZXIgb24gMC4wLjAuMCwgYmluZGluZ1xuICogMTI3LjAuMC4xIHN0aWxsIHN1Y2NlZWRzLiBPbmx5IGNoZWNraW5nIGJvdGggcmVsaWFibHkgY2F0Y2hlcyB0aGUgcmVhbCBjb25mbGljdCAoYVxuICogcG9ydC1mb3J3YXJkIG9uIDg0NDMsIEFpclBsYXkgb24gNTAwMCwg4oCmKS4gRm9yIGEgcHJlLWZsaWdodCwgYSBmYWxzZSBwb3NpdGl2ZVxuICogKG92ZXItY2F1dGlvdXMpIGJlYXRzIGEgZmFsc2UgbmVnYXRpdmUgKG1pc3MgaXQg4oaSIHRoZSBkZXBsb3kgZmFpbHMgbWlkLXdheSkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzUG9ydEZyZWUocG9ydDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IFthbGxJZmFjZXMsIGxvb3BiYWNrXSA9IGF3YWl0IFByb21pc2UuYWxsKFtjYW5CaW5kKHBvcnQsICcwLjAuMC4wJyksIGNhbkJpbmQocG9ydCwgJzEyNy4wLjAuMScpXSk7XG4gIHJldHVybiBhbGxJZmFjZXMgJiYgbG9vcGJhY2s7XG59XG5cbi8qKlxuICogSG9zdCAobGVmdC1zaWRlKSBwb3J0cyBhIGRvY2tlci1jb21wb3NlLnltbCBwdWJsaXNoZXMsIGtleWVkIGJ5IHNlcnZpY2UuIEhhbmRsZXNcbiAqIHRoZSBzaG9ydCBmb3JtcyBcIkhPU1Q6Q09OVEFJTkVSXCIsIFwiSE9TVDpDT05UQUlORVIvcHJvdG9cIiwgXCJJUDpIT1NUOkNPTlRBSU5FUlwiIGFuZFxuICogdGhlIGxvbmcgZm9ybSBgeyBwdWJsaXNoZWQsIHRhcmdldCB9YC4gQmFyZSBcIkNPTlRBSU5FUlwiIChyYW5kb20gaG9zdCBwb3J0KSBpc1xuICogc2tpcHBlZCDigJQgaXQgY2FuJ3QgY29uZmxpY3Qgb24gYSBmaXhlZCBwb3J0LlxuICovXG5mdW5jdGlvbiBjb21wb3NlSG9zdFBvcnRzKGZpbGU6IHN0cmluZyk6IEhvc3RQb3J0W10ge1xuICBjb25zdCBkb2MgPSBwYXJzZVlhbWwocmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4JykpIGFzIHsgc2VydmljZXM/OiBSZWNvcmQ8c3RyaW5nLCB7IHBvcnRzPzogdW5rbm93bltdIH0+IH07XG4gIGNvbnN0IG91dDogSG9zdFBvcnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFtzZXJ2aWNlLCBkZWZdIG9mIE9iamVjdC5lbnRyaWVzKGRvYz8uc2VydmljZXMgPz8ge30pKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBkZWY/LnBvcnRzID8/IFtdKSB7XG4gICAgICBsZXQgaG9zdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSAoZW50cnkuc3BsaXQoJy8nKVswXSA/PyAnJykuc3BsaXQoJzonKTsgLy8gc3RyaXAgL3Byb3RvLCBzcGxpdCBpcDpob3N0OmNvbnRhaW5lclxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID49IDIpIGhvc3QgPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMl0gPz8gJycpOyAvLyBob3N0IGlzIHNlY29uZC1mcm9tLWxhc3RcbiAgICAgIH0gZWxzZSBpZiAoZW50cnkgJiYgdHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiAncHVibGlzaGVkJyBpbiBlbnRyeSkge1xuICAgICAgICBob3N0ID0gTnVtYmVyKChlbnRyeSBhcyB7IHB1Ymxpc2hlZDogdW5rbm93biB9KS5wdWJsaXNoZWQpO1xuICAgICAgfVxuICAgICAgaWYgKGhvc3QgIT09IHVuZGVmaW5lZCAmJiBOdW1iZXIuaXNJbnRlZ2VyKGhvc3QpKSBvdXQucHVzaCh7IHNlcnZpY2UsIHBvcnQ6IGhvc3QgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBIb3N0IHBvcnRzIGZyb20gbWluaWt1YmUgc2V0dXAuc2gncyBgcG9ydF9mb3J3YXJkIFwiTmFtZVwiIHN2YyBcIkhPU1Q6Q09OVEFJTkVSIOKAplwiYCBjYWxscy4gKi9cbmZ1bmN0aW9uIGZvcndhcmRIb3N0UG9ydHMoZmlsZTogc3RyaW5nKTogSG9zdFBvcnRbXSB7XG4gIGNvbnN0IG91dDogSG9zdFBvcnRbXSA9IFtdO1xuICBjb25zdCByZSA9IC9wb3J0X2ZvcndhcmRcXHMrXCIoW15cIl0rKVwiXFxzK1xcUytcXHMrXCIoW15cIl0rKVwiL2c7XG4gIGNvbnN0IHRleHQgPSByZWFkRmlsZVN5bmMoZmlsZSwgJ3V0ZjgnKTtcbiAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gIHdoaWxlICgobSA9IHJlLmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2VydmljZSA9IG1bMV0gPz8gJyc7XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIChtWzJdID8/ICcnKS50cmltKCkuc3BsaXQoL1xccysvKSkge1xuICAgICAgY29uc3QgaG9zdCA9IE51bWJlcihwYWlyLnNwbGl0KCc6JylbMF0gPz8gJycpO1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaG9zdCkpIG91dC5wdXNoKHsgc2VydmljZSwgcG9ydDogaG9zdCB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBEZXJpdmUgdGhlIGhvc3QgcG9ydHMgYSB0YXJnZXQgYmluZHMgZnJvbSBpdHMgQUNUVUFMIChjbG9uZWQpIGRlcGxveSBzb3VyY2UsIHNvIHRoZVxuICogbGlzdCBjYW4ndCBkcmlmdCBmcm9tIHRoZSBkZXBsb3kuIGxvY2FsIOKGkiBkb2NrZXItY29tcG9zZS55bWw7IG1pbmlrdWJlIOKGkiBzZXR1cC5zaDtcbiAqIGVjMi9mYXJnYXRlIOKGkiBub25lIChDbG91ZEZvcm1hdGlvbiBiaW5kcyBub3RoaW5nIG9uIHRoZSBvcGVyYXRvcidzIG1hY2hpbmUpLiBOZWVkc1xuICogdGhlIGRlcGxveSBmaWxlcyBvbiBkaXNrIChydW4gcG9zdC1jbG9uZSk7IGZhbGxzIGJhY2sgdG8gdGhlIHRhcmdldCdzIHN0YXRpY1xuICogYGhvc3RQb3J0c2AgaWYgdGhlIHNvdXJjZSBpcyBtaXNzaW5nL3VucmVhZGFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNjb3Zlckhvc3RQb3J0cyh0YXJnZXQ6IFRhcmdldElkLCBjd2Q6IHN0cmluZywgc3BlYzogVGFyZ2V0U3BlYyk6IEhvc3RQb3J0W10ge1xuICB0cnkge1xuICAgIGlmICh0YXJnZXQgPT09ICdsb2NhbCcpIHJldHVybiBjb21wb3NlSG9zdFBvcnRzKHBhdGguam9pbihjd2QsIHNwZWMuZGlyLCAnZG9ja2VyLWNvbXBvc2UueW1sJykpO1xuICAgIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHJldHVybiBmb3J3YXJkSG9zdFBvcnRzKHBhdGguam9pbihjd2QsIHNwZWMuZGlyLCAnYmluJywgJ3NldHVwLnNoJykpO1xuICAgIHJldHVybiBbXTsgLy8gZWMyL2ZhcmdhdGUgZGVwbG95IHJlbW90ZWx5IOKAlCBub3RoaW5nIGJpbmRzIGxvY2FsbHlcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNwZWMuaG9zdFBvcnRzLm1hcCgocCkgPT4gKHsgLi4ucCB9KSk7XG4gIH1cbn1cblxuLyoqIFByb2JlIGVhY2ggaG9zdCBwb3J0OyByZXR1cm5zIG9uZSBQb3J0Q2hlY2sgcGVyIHBvcnQgKHByb2JlZCBpbiBwYXJhbGxlbCkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tIb3N0UG9ydHMocG9ydHM6IHJlYWRvbmx5IEhvc3RQb3J0W10pOiBQcm9taXNlPFBvcnRDaGVja1tdPiB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwb3J0cy5tYXAoYXN5bmMgKHsgc2VydmljZSwgcG9ydCB9KSA9PiAoeyBzZXJ2aWNlLCBwb3J0LCBhdmFpbGFibGU6IGF3YWl0IGlzUG9ydEZyZWUocG9ydCkgfSkpKTtcbn1cblxuLyoqXG4gKiBJcyB0aGUgdGFyZ2V0J3MgT1dOIGRlcGxveSBzdGFjayBhbHJlYWR5IHJ1bm5pbmc/IChsb2NhbCBkb2NrZXItY29tcG9zZSBvbmx5LikgVXNlZFxuICogc28gdGhlIHBvcnQgcHJlLWZsaWdodCBkb2Vzbid0IGJsb2NrIGFuIGlkZW1wb3RlbnQgUkUtUlVOOiBpZiB0aGUgXCJ0YWtlblwiIHBvcnRzIGFyZVxuICogaGVsZCBieSB0aGUgc3RhY2sgeW91IGFscmVhZHkgaGF2ZSB1cCwgYGRvY2tlciBjb21wb3NlIHVwYCBqdXN0IG5vLW9wcyB0aGVtIOKAlCB0aGF0J3NcbiAqIG5vdCBhIGNvbmZsaWN0LiBSZWFkLW9ubHkgYGRvY2tlciBjb21wb3NlIHBzYDsgZmFsc2Ugb24gYW55IGVycm9yIC8gbm9uLWxvY2FsIHRhcmdldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YWNrUnVubmluZyh0YXJnZXQ6IFRhcmdldElkLCBjd2Q6IHN0cmluZywgc3BlYzogVGFyZ2V0U3BlYyk6IGJvb2xlYW4ge1xuICBpZiAodGFyZ2V0ICE9PSAnbG9jYWwnKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgY29tcG9zZSA9IHBhdGguam9pbihjd2QsIHNwZWMuZGlyLCAnZG9ja2VyLWNvbXBvc2UueW1sJyk7XG4gICAgY29uc3Qgb3V0ID0gZXhlY1N5bmMoYGRvY2tlciBjb21wb3NlIC1mICcke2NvbXBvc2V9JyBwcyAtcWAsIHsgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAnaWdub3JlJ10sIHRpbWVvdXQ6IDEwMDAwIH0pXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKTtcbiAgICByZXR1cm4gb3V0Lmxlbmd0aCA+IDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"post-steps.d.ts","sourceRoot":"","sources":["../../src/agent/post-steps.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CA6DzE"}
1
+ {"version":3,"file":"post-steps.d.ts","sourceRoot":"","sources":["../../src/agent/post-steps.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAiEzE"}
@@ -40,10 +40,13 @@ export function resolvePostSteps(opts) {
40
40
  if (opts.smokeTest) {
41
41
  if (opts.url) {
42
42
  // -k: local/minikube front a self-signed cert; harmless against real-cert AWS URLs.
43
+ // Probe /health — the one route guaranteed to exist and serve unauthenticated
44
+ // through nginx (every /api/* route requires auth → 401; /api/version doesn't
45
+ // exist and would fall through to the SPA, making `curl -f` meaningless).
43
46
  steps.push({
44
47
  id: 'smoke-test',
45
- label: 'Smoke test — read-only API check',
46
- command: `curl -fsSk ${opts.url}/api/version && echo 'smoke-test: API reachable'`,
48
+ label: 'Smoke test — gateway/API reachability',
49
+ command: `curl -fsSk ${opts.url}/health && echo 'smoke-test: API reachable'`,
47
50
  });
48
51
  }
49
52
  else {
@@ -55,10 +58,11 @@ export function resolvePostSteps(opts) {
55
58
  // Event ingestion needs a platform JWT in Secrets Manager BEFORE the Lambda
56
59
  // is wired up, so this is a two-step bundle: store-token writes the token,
57
60
  // then setup-events deploys the EventBridge → SQS → Lambda that reads it.
58
- // Neither takes a secret name both derive pipeline-builder's own pattern
59
- // (CoreConstants.secretPath → pipeline-builder/{orgId}/platform) from the
60
- // org, so they agree automatically. They get PLATFORM_BASE_URL (step env) +
61
- // admin creds (merged by the caller) to resolve the org.
61
+ // store-token derives the secret path from the JWT's org (CoreConstants pattern
62
+ // → pipeline-builder/{orgId}/platform). NOTE: setup-events still REQUIRES that
63
+ // name via --secret-name / PLATFORM_SECRET_NAME (it does not yet derive it), so
64
+ // the operator supplies it when running this bundle. provision surfaces (does not
65
+ // auto-run) the bundle on AWS — it needs a registered, in-VPC platform.
62
66
  const region = opts.region ? ` --region ${opts.region}` : '';
63
67
  const env = opts.url ? { PLATFORM_BASE_URL: opts.url } : undefined;
64
68
  steps.push({
@@ -84,4 +88,4 @@ export function resolvePostSteps(opts) {
84
88
  });
85
89
  return { steps, skipped };
86
90
  }
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1zdGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wb3N0LXN0ZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxjQUFjLENBQUM7QUEyQ3pELDJFQUEyRTtBQUMzRSxTQUFTLFdBQVcsQ0FBQyxjQUFpQyxFQUFFLGNBQXVCO0lBQzdFLE1BQU0sR0FBRyxHQUEyQixFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDcEYsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVO1FBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDNUYsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBcUI7SUFDcEQsTUFBTSxLQUFLLEdBQWUsRUFBRSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7SUFFbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFB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cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQb3N0LWluc3RhbGwgc3RlcHMuXG4gKlxuICogQWZ0ZXIgdGhlIHBsYXRmb3JtIGlzIGRlcGxveWVkICsgaGVhbHRoLWNoZWNrZWQsIHByb3Zpc2lvbiBydW5zIGFuIG9yZGVyZWQgc2V0XG4gKiBvZiBwb3N0LWluc3RhbGwgc3RlcHM6ICoqcmVnaXN0ZXIqKiAodGhlIGFkbWluLCB2aWEgYGluaXQtcGxhdGZvcm0uc2hgLCBkcml2ZW5cbiAqIG5vbi1pbnRlcmFjdGl2ZWx5IGJ5IGVudiDigJQgd2hpY2ggYWxzbyBwZXJmb3JtcyBhbnkgb3B0LWluIHBsdWdpbi9jb21wbGlhbmNlL1xuICogc2FtcGxlIGxvYWRzKSwgdGhlbiBhbiBvcHRpb25hbCAqKnNtb2tlLXRlc3QqKiwgKipldmVudHMqKiAoQVdTKSwgYW5kIGFueVxuICogb3BlcmF0b3IgKiotLXBvc3Qtc3RlcCoqIGNvbW1hbmRzLiBQdXJlLCBkZXRlcm1pbmlzdGljIGFzc2VtYmx5IGhlcmUg4oCUIHByb3Zpc2lvblxuICogcnVucyBlYWNoIHZpYSB0aGUgc2FtZSBnYXRlZCBgcnVuU2NyaXB0KClgIGFzIHRoZSBkZXBsb3kuXG4gKi9cblxuaW1wb3J0IHsgTE9BRF9TVEVQUywgdHlwZSBUYXJnZXRJZCB9IGZyb20gJy4vdGFyZ2V0cy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdFN0ZXAge1xuICAvKiogU3RhYmxlIGlkIChgcmVnaXN0ZXJgIC8gYHNtb2tlLXRlc3RgIC8gYGV2ZW50c2ApIG9yIGBjdXN0b20tTmAuICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbiBsYWJlbCBzaG93biBpbiB0aGUgcGxhbi4gKi9cbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSBleGFjdCBjb21tYW5kIHRvIHJ1bi4gKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogTm9uLXNlY3JldCBlbnYgYXBwbGllZCB0byB0aGUgY2hpbGQgZm9yIHRoaXMgc3RlcCAoZS5nLiBMT0FEXyogZm9yIHJlZ2lzdGVyKS4gKi9cbiAgcmVhZG9ubHkgZW52PzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG59XG5cbi8qKiBBIHJlcXVlc3RlZCBzdGVwIHRoYXQgZG9lc24ndCBhcHBseSB0byB0aGUgY2hvc2VuIHRhcmdldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2tpcHBlZFN0ZXAge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSByZWFzb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFBvc3RTdGVwcyB7XG4gIHJlYWRvbmx5IHN0ZXBzOiBQb3N0U3RlcFtdO1xuICByZWFkb25seSBza2lwcGVkOiBTa2lwcGVkU3RlcFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RTdGVwT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhcmdldDogVGFyZ2V0SWQ7XG4gIC8qKiBCYXNlIFVSTCBvZiB0aGUgZGVwbG95ZWQgcGxhdGZvcm0gKGZyb20gZGVyaXZlSGVhbHRoVXJsKSwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmcgfCBudWxsO1xuICAvKiogQVdTIHJlZ2lvbiAoZWMyL2ZhcmdhdGUpLCBpZiBwcm92aWRlZC4gKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICAvKiogTG9hZC1zdGVwIGlkcyBlbmFibGVkIHZpYSBgLS13aXRoLSpgIChkcml2ZSBpbml0LXBsYXRmb3JtJ3MgTE9BRF8qIGVudnMgKyBzcGFyc2UgcGF0aHMpLiAqL1xuICByZWFkb25seSBlbmFibGVkTG9hZElkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBgLS1idWlsZC1ib290c3RyYXBgOiBidWlsZCB0aGUgQ29kZUJ1aWxkIGJvb3RzdHJhcCBpbWFnZSBkdXJpbmcgcmVnaXN0ZXIuICovXG4gIHJlYWRvbmx5IGJ1aWxkQm9vdHN0cmFwOiBib29sZWFuO1xuICAvKiogRmFsc2Ugd2hlbiBgLS1uby1pbml0YCDigJQgc2tpcHMgdGhlIHJlZ2lzdGVyIHN0ZXAgZW50aXJlbHkuICovXG4gIHJlYWRvbmx5IGluaXQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNtb2tlVGVzdDogYm9vbGVhbjtcbiAgLyoqIGAtLXdpdGgtZXZlbnRzYDogdGhlIEFXUyBldmVudC1pbmdlc3Rpb24gYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKS4gKi9cbiAgcmVhZG9ubHkgZXZlbnRzOiBib29sZWFuO1xuICAvKiogUmF3IG9wZXJhdG9yIGAtLXBvc3Qtc3RlcGAgY29tbWFuZHMsIGluIG9yZGVyLiAqL1xuICByZWFkb25seSBzdGVwczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKiBDb21wdXRlIHRoZSBub24taW50ZXJhY3RpdmUgZW52IHRoYXQgZHJpdmVzIGluaXQtcGxhdGZvcm0ncyBwcm9tcHRzLiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJFbnYoZW5hYmxlZExvYWRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdLCBidWlsZEJvb3RzdHJhcDogYm9vbGVhbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IEJVSUxEX0JPT1RTVFJBUDogYnVpbGRCb290c3RyYXAgPyAneScgOiAnbicgfTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIExPQURfU1RFUFMpIGVudltzdGVwLmVudl0gPSBlbmFibGVkTG9hZElkcy5pbmNsdWRlcyhzdGVwLmlkKSA/ICd5JyA6ICduJztcbiAgcmV0dXJuIGVudjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBvcmRlcmVkIHBvc3QtaW5zdGFsbCBzdGVwIGxpc3Q6IHJlZ2lzdGVyIOKGkiBzbW9rZS10ZXN0IOKGkiBldmVudHMg4oaSXG4gKiBjdXN0b20uIGByZWdpc3RlcmAgY2FycmllcyB0aGUgbG9hZCArIEJVSUxEX0JPT1RTVFJBUCBlbnYgc28gaW5pdC1wbGF0Zm9ybSBydW5zXG4gKiB0aGUgZW5hYmxlZCBsb2FkcyBub24taW50ZXJhY3RpdmVseS4gUmVxdWVzdGVkLWJ1dC1pbmFwcGxpY2FibGUgc3RlcHMgbGFuZCBpblxuICogYHNraXBwZWRgIHNvIHRoZSBjYWxsZXIgY2FuIHdhcm4gcmF0aGVyIHRoYW4gc2lsZW50bHkgZHJvcCB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBvc3RTdGVwcyhvcHRzOiBQb3N0U3RlcE9wdGlvbnMpOiBSZXNvbHZlZFBvc3RTdGVwcyB7XG4gIGNvbnN0IHN0ZXBzOiBQb3N0U3RlcFtdID0gW107XG4gIGNvbnN0IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gPSBbXTtcblxuICBpZiAob3B0cy5pbml0KSB7XG4gICAgY29uc3QgZW5hYmxlZCA9IExPQURfU1RFUFMuZmlsdGVyKChzKSA9PiBvcHRzLmVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKHMuaWQpKS5tYXAoKHMpID0+IHMuaWQpO1xuICAgIGNvbnN0IGxvYWRzID0gZW5hYmxlZC5sZW5ndGggPiAwID8gYCAoKyAke2VuYWJsZWQuam9pbignLCAnKX0pYCA6ICcnO1xuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgaWQ6ICdyZWdpc3RlcicsXG4gICAgICBsYWJlbDogYFJlZ2lzdGVyIGFkbWluJHtsb2Fkc31gLFxuICAgICAgY29tbWFuZDogYC4vZGVwbG95L2Jpbi9pbml0LXBsYXRmb3JtLnNoICR7b3B0cy50YXJnZXR9YCxcbiAgICAgIGVudjogcmVnaXN0ZXJFbnYob3B0cy5lbmFibGVkTG9hZElkcywgb3B0cy5idWlsZEJvb3RzdHJhcCksXG4gICAgfSk7XG4gIH1cblxuICBpZiAob3B0cy5zbW9rZVRlc3QpIHtcbiAgICBpZiAob3B0cy51cmwpIHtcbiAgICAgIC8vIC1rOiBsb2NhbC9taW5pa3ViZSBmcm9udCBhIHNlbGYtc2lnbmVkIGNlcnQ7IGhhcm1sZXNzIGFnYWluc3QgcmVhbC1jZXJ0IEFXUyBVUkxzLlxuICAgICAgc3RlcHMucHVzaCh7XG4gICAgICAgIGlkOiAnc21va2UtdGVzdCcsXG4gICAgICAgIGxhYmVsOiAnU21va2UgdGVzdCDigJQgcmVhZC1vbmx5IEFQSSBjaGVjaycsXG4gICAgICAgIGNvbW1hbmQ6IGBjdXJsIC1mc1NrICR7b3B0cy51cmx9L2FwaS92ZXJzaW9uICYmIGVjaG8gJ3Ntb2tlLXRlc3Q6IEFQSSByZWFjaGFibGUnYCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBza2lwcGVkLnB1c2goeyBpZDogJ3Ntb2tlLXRlc3QnLCByZWFzb246ICdubyBwbGF0Zm9ybSBVUkwgdG8gcHJvYmUgZm9yIHRoaXMgdGFyZ2V0JyB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5ldmVudHMpIHtcbiAgICBpZiAob3B0cy50YXJnZXQgPT09ICdlYzInIHx8IG9wdHMudGFyZ2V0ID09PSAnZmFyZ2F0ZScpIHtcbiAgICAgIC8vIEV2ZW50IGluZ2VzdGlvbiBuZWVkcyBhIHBsYXRmb3JtIEpXVCBpbiBTZWNyZXRzIE1hbmFnZXIgQkVGT1JFIHRoZSBMYW1iZGFcbiAgICAgIC8vIGlzIHdpcmVkIHVwLCBzbyB0aGlzIGlzIGEgdHdvLXN0ZXAgYnVuZGxlOiBzdG9yZS10b2tlbiB3cml0ZXMgdGhlIHRva2VuLFxuICAgICAgLy8gdGhlbiBzZXR1cC1ldmVudHMgZGVwbG95cyB0aGUgRXZlbnRCcmlkZ2Ug4oaSIFNRUyDihpIgTGFtYmRhIHRoYXQgcmVhZHMgaXQuXG4gICAgICAvLyBOZWl0aGVyIHRha2VzIGEgc2VjcmV0IG5hbWUg4oCUIGJvdGggZGVyaXZlIHBpcGVsaW5lLWJ1aWxkZXIncyBvd24gcGF0dGVyblxuICAgICAgLy8gKENvcmVDb25zdGFudHMuc2VjcmV0UGF0aCDihpIgcGlwZWxpbmUtYnVpbGRlci97b3JnSWR9L3BsYXRmb3JtKSBmcm9tIHRoZVxuICAgICAgLy8gb3JnLCBzbyB0aGV5IGFncmVlIGF1dG9tYXRpY2FsbHkuIFRoZXkgZ2V0IFBMQVRGT1JNX0JBU0VfVVJMIChzdGVwIGVudikgK1xuICAgICAgLy8gYWRtaW4gY3JlZHMgKG1lcmdlZCBieSB0aGUgY2FsbGVyKSB0byByZXNvbHZlIHRoZSBvcmcuXG4gICAgICBjb25zdCByZWdpb24gPSBvcHRzLnJlZ2lvbiA/IGAgLS1yZWdpb24gJHtvcHRzLnJlZ2lvbn1gIDogJyc7XG4gICAgICBjb25zdCBlbnYgPSBvcHRzLnVybCA/IHsgUExBVEZPUk1fQkFTRV9VUkw6IG9wdHMudXJsIH0gOiB1bmRlZmluZWQ7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6ICdzdG9yZS10b2tlbicsXG4gICAgICAgIGxhYmVsOiAnU3RvcmUgcGxhdGZvcm0gdG9rZW4gaW4gQVdTIFNlY3JldHMgTWFuYWdlcicsXG4gICAgICAgIGNvbW1hbmQ6IGBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuJHtyZWdpb259YCxcbiAgICAgICAgZW52LFxuICAgICAgfSk7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6ICdldmVudHMnLFxuICAgICAgICBsYWJlbDogJ0V2ZW50QnJpZGdlIGluZ2VzdGlvbiAoc2V0dXAtZXZlbnRzKScsXG4gICAgICAgIGNvbW1hbmQ6IGBwaXBlbGluZS1tYW5hZ2VyIHNldHVwLWV2ZW50cyR7cmVnaW9ufWAsXG4gICAgICAgIGVudixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBza2lwcGVkLnB1c2goeyBpZDogJ2V2ZW50cycsIHJlYXNvbjogYG5vdCBhcHBsaWNhYmxlIHRvIHRhcmdldCAnJHtvcHRzLnRhcmdldH0nIChlYzIvZmFyZ2F0ZSBvbmx5KWAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3B0cy5zdGVwcy5mb3JFYWNoKChjb21tYW5kLCBpKSA9PiB7XG4gICAgaWYgKGNvbW1hbmQudHJpbSgpICE9PSAnJykgc3RlcHMucHVzaCh7IGlkOiBgY3VzdG9tLSR7aSArIDF9YCwgbGFiZWw6IGBDdXN0b20gc3RlcCAke2kgKyAxfWAsIGNvbW1hbmQgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7IHN0ZXBzLCBza2lwcGVkIH07XG59XG4iXX0=
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1zdGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wb3N0LXN0ZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxjQUFjLENBQUM7QUEyQ3pELDJFQUEyRTtBQUMzRSxTQUFTLFdBQVcsQ0FBQyxjQUFpQyxFQUFFLGNBQXVCO0lBQzdFLE1BQU0sR0FBRyxHQUEyQixFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDcEYsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVO1FBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDNUYsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBcUI7SUFDcEQsTUFBTSxLQUFLLEdBQWUsRUFBRSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7SUFFbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFB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QUFPLEVBQUUsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUG9zdC1pbnN0YWxsIHN0ZXBzLlxuICpcbiAqIEFmdGVyIHRoZSBwbGF0Zm9ybSBpcyBkZXBsb3llZCArIGhlYWx0aC1jaGVja2VkLCBwcm92aXNpb24gcnVucyBhbiBvcmRlcmVkIHNldFxuICogb2YgcG9zdC1pbnN0YWxsIHN0ZXBzOiAqKnJlZ2lzdGVyKiogKHRoZSBhZG1pbiwgdmlhIGBpbml0LXBsYXRmb3JtLnNoYCwgZHJpdmVuXG4gKiBub24taW50ZXJhY3RpdmVseSBieSBlbnYg4oCUIHdoaWNoIGFsc28gcGVyZm9ybXMgYW55IG9wdC1pbiBwbHVnaW4vY29tcGxpYW5jZS9cbiAqIHNhbXBsZSBsb2FkcyksIHRoZW4gYW4gb3B0aW9uYWwgKipzbW9rZS10ZXN0KiosICoqZXZlbnRzKiogKEFXUyksIGFuZCBhbnlcbiAqIG9wZXJhdG9yICoqLS1wb3N0LXN0ZXAqKiBjb21tYW5kcy4gUHVyZSwgZGV0ZXJtaW5pc3RpYyBhc3NlbWJseSBoZXJlIOKAlCBwcm92aXNpb25cbiAqIHJ1bnMgZWFjaCB2aWEgdGhlIHNhbWUgZ2F0ZWQgYHJ1blNjcmlwdCgpYCBhcyB0aGUgZGVwbG95LlxuICovXG5cbmltcG9ydCB7IExPQURfU1RFUFMsIHR5cGUgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RTdGVwIHtcbiAgLyoqIFN0YWJsZSBpZCAoYHJlZ2lzdGVyYCAvIGBzbW9rZS10ZXN0YCAvIGBldmVudHNgKSBvciBgY3VzdG9tLU5gLiAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICAvKiogSHVtYW4gbGFiZWwgc2hvd24gaW4gdGhlIHBsYW4uICovXG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBUaGUgZXhhY3QgY29tbWFuZCB0byBydW4uICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcbiAgLyoqIE5vbi1zZWNyZXQgZW52IGFwcGxpZWQgdG8gdGhlIGNoaWxkIGZvciB0aGlzIHN0ZXAgKGUuZy4gTE9BRF8qIGZvciByZWdpc3RlcikuICovXG4gIHJlYWRvbmx5IGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xufVxuXG4vKiogQSByZXF1ZXN0ZWQgc3RlcCB0aGF0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGNob3NlbiB0YXJnZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNraXBwZWRTdGVwIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRQb3N0U3RlcHMge1xuICByZWFkb25seSBzdGVwczogUG9zdFN0ZXBbXTtcbiAgcmVhZG9ubHkgc2tpcHBlZDogU2tpcHBlZFN0ZXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3N0U3RlcE9wdGlvbnMge1xuICByZWFkb25seSB0YXJnZXQ6IFRhcmdldElkO1xuICAvKiogQmFzZSBVUkwgb2YgdGhlIGRlcGxveWVkIHBsYXRmb3JtIChmcm9tIGRlcml2ZUhlYWx0aFVybCksIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIEFXUyByZWdpb24gKGVjMi9mYXJnYXRlKSwgaWYgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgLyoqIExvYWQtc3RlcCBpZHMgZW5hYmxlZCB2aWEgYC0td2l0aC0qYCAoZHJpdmUgaW5pdC1wbGF0Zm9ybSdzIExPQURfKiBlbnZzICsgc3BhcnNlIHBhdGhzKS4gKi9cbiAgcmVhZG9ubHkgZW5hYmxlZExvYWRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogYC0tYnVpbGQtYm9vdHN0cmFwYDogYnVpbGQgdGhlIENvZGVCdWlsZCBib290c3RyYXAgaW1hZ2UgZHVyaW5nIHJlZ2lzdGVyLiAqL1xuICByZWFkb25seSBidWlsZEJvb3RzdHJhcDogYm9vbGVhbjtcbiAgLyoqIEZhbHNlIHdoZW4gYC0tbm8taW5pdGAg4oCUIHNraXBzIHRoZSByZWdpc3RlciBzdGVwIGVudGlyZWx5LiAqL1xuICByZWFkb25seSBpbml0OiBib29sZWFuO1xuICByZWFkb25seSBzbW9rZVRlc3Q6IGJvb2xlYW47XG4gIC8qKiBgLS13aXRoLWV2ZW50c2A6IHRoZSBBV1MgZXZlbnQtaW5nZXN0aW9uIGJ1bmRsZSAoc3RvcmUtdG9rZW4g4oaSIHNldHVwLWV2ZW50cykuICovXG4gIHJlYWRvbmx5IGV2ZW50czogYm9vbGVhbjtcbiAgLyoqIFJhdyBvcGVyYXRvciBgLS1wb3N0LXN0ZXBgIGNvbW1hbmRzLCBpbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgc3RlcHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKiogQ29tcHV0ZSB0aGUgbm9uLWludGVyYWN0aXZlIGVudiB0aGF0IGRyaXZlcyBpbml0LXBsYXRmb3JtJ3MgcHJvbXB0cy4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyRW52KGVuYWJsZWRMb2FkSWRzOiByZWFkb25seSBzdHJpbmdbXSwgYnVpbGRCb290c3RyYXA6IGJvb2xlYW4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBCVUlMRF9CT09UU1RSQVA6IGJ1aWxkQm9vdHN0cmFwID8gJ3knIDogJ24nIH07XG4gIGZvciAoY29uc3Qgc3RlcCBvZiBMT0FEX1NURVBTKSBlbnZbc3RlcC5lbnZdID0gZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoc3RlcC5pZCkgPyAneScgOiAnbic7XG4gIHJldHVybiBlbnY7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgb3JkZXJlZCBwb3N0LWluc3RhbGwgc3RlcCBsaXN0OiByZWdpc3RlciDihpIgc21va2UtdGVzdCDihpIgZXZlbnRzIOKGklxuICogY3VzdG9tLiBgcmVnaXN0ZXJgIGNhcnJpZXMgdGhlIGxvYWQgKyBCVUlMRF9CT09UU1RSQVAgZW52IHNvIGluaXQtcGxhdGZvcm0gcnVuc1xuICogdGhlIGVuYWJsZWQgbG9hZHMgbm9uLWludGVyYWN0aXZlbHkuIFJlcXVlc3RlZC1idXQtaW5hcHBsaWNhYmxlIHN0ZXBzIGxhbmQgaW5cbiAqIGBza2lwcGVkYCBzbyB0aGUgY2FsbGVyIGNhbiB3YXJuIHJhdGhlciB0aGFuIHNpbGVudGx5IGRyb3AgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQb3N0U3RlcHMob3B0czogUG9zdFN0ZXBPcHRpb25zKTogUmVzb2x2ZWRQb3N0U3RlcHMge1xuICBjb25zdCBzdGVwczogUG9zdFN0ZXBbXSA9IFtdO1xuICBjb25zdCBza2lwcGVkOiBTa2lwcGVkU3RlcFtdID0gW107XG5cbiAgaWYgKG9wdHMuaW5pdCkge1xuICAgIGNvbnN0IGVuYWJsZWQgPSBMT0FEX1NURVBTLmZpbHRlcigocykgPT4gb3B0cy5lbmFibGVkTG9hZElkcy5pbmNsdWRlcyhzLmlkKSkubWFwKChzKSA9PiBzLmlkKTtcbiAgICBjb25zdCBsb2FkcyA9IGVuYWJsZWQubGVuZ3RoID4gMCA/IGAgKCsgJHtlbmFibGVkLmpvaW4oJywgJyl9KWAgOiAnJztcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIGlkOiAncmVnaXN0ZXInLFxuICAgICAgbGFiZWw6IGBSZWdpc3RlciBhZG1pbiR7bG9hZHN9YCxcbiAgICAgIGNvbW1hbmQ6IGAuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCAke29wdHMudGFyZ2V0fWAsXG4gICAgICBlbnY6IHJlZ2lzdGVyRW52KG9wdHMuZW5hYmxlZExvYWRJZHMsIG9wdHMuYnVpbGRCb290c3RyYXApLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9wdHMuc21va2VUZXN0KSB7XG4gICAgaWYgKG9wdHMudXJsKSB7XG4gICAgICAvLyAtazogbG9jYWwvbWluaWt1YmUgZnJvbnQgYSBzZWxmLXNpZ25lZCBjZXJ0OyBoYXJtbGVzcyBhZ2FpbnN0IHJlYWwtY2VydCBBV1MgVVJMcy5cbiAgICAgIC8vIFByb2JlIC9oZWFsdGgg4oCUIHRoZSBvbmUgcm91dGUgZ3VhcmFudGVlZCB0byBleGlzdCBhbmQgc2VydmUgdW5hdXRoZW50aWNhdGVkXG4gICAgICAvLyB0aHJvdWdoIG5naW54IChldmVyeSAvYXBpLyogcm91dGUgcmVxdWlyZXMgYXV0aCDihpIgNDAxOyAvYXBpL3ZlcnNpb24gZG9lc24ndFxuICAgICAgLy8gZXhpc3QgYW5kIHdvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGUgU1BBLCBtYWtpbmcgYGN1cmwgLWZgIG1lYW5pbmdsZXNzKS5cbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBpZDogJ3Ntb2tlLXRlc3QnLFxuICAgICAgICBsYWJlbDogJ1Ntb2tlIHRlc3Qg4oCUIGdhdGV3YXkvQVBJIHJlYWNoYWJpbGl0eScsXG4gICAgICAgIGNvbW1hbmQ6IGBjdXJsIC1mc1NrICR7b3B0cy51cmx9L2hlYWx0aCAmJiBlY2hvICdzbW9rZS10ZXN0OiBBUEkgcmVhY2hhYmxlJ2AsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2tpcHBlZC5wdXNoKHsgaWQ6ICdzbW9rZS10ZXN0JywgcmVhc29uOiAnbm8gcGxhdGZvcm0gVVJMIHRvIHByb2JlIGZvciB0aGlzIHRhcmdldCcgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMuZXZlbnRzKSB7XG4gICAgaWYgKG9wdHMudGFyZ2V0ID09PSAnZWMyJyB8fCBvcHRzLnRhcmdldCA9PT0gJ2ZhcmdhdGUnKSB7XG4gICAgICAvLyBFdmVudCBpbmdlc3Rpb24gbmVlZHMgYSBwbGF0Zm9ybSBKV1QgaW4gU2VjcmV0cyBNYW5hZ2VyIEJFRk9SRSB0aGUgTGFtYmRhXG4gICAgICAvLyBpcyB3aXJlZCB1cCwgc28gdGhpcyBpcyBhIHR3by1zdGVwIGJ1bmRsZTogc3RvcmUtdG9rZW4gd3JpdGVzIHRoZSB0b2tlbixcbiAgICAgIC8vIHRoZW4gc2V0dXAtZXZlbnRzIGRlcGxveXMgdGhlIEV2ZW50QnJpZGdlIOKGkiBTUVMg4oaSIExhbWJkYSB0aGF0IHJlYWRzIGl0LlxuICAgICAgLy8gc3RvcmUtdG9rZW4gZGVyaXZlcyB0aGUgc2VjcmV0IHBhdGggZnJvbSB0aGUgSldUJ3Mgb3JnIChDb3JlQ29uc3RhbnRzIHBhdHRlcm5cbiAgICAgIC8vIOKGkiBwaXBlbGluZS1idWlsZGVyL3tvcmdJZH0vcGxhdGZvcm0pLiBOT1RFOiBzZXR1cC1ldmVudHMgc3RpbGwgUkVRVUlSRVMgdGhhdFxuICAgICAgLy8gbmFtZSB2aWEgLS1zZWNyZXQtbmFtZSAvIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIChpdCBkb2VzIG5vdCB5ZXQgZGVyaXZlIGl0KSwgc29cbiAgICAgIC8vIHRoZSBvcGVyYXRvciBzdXBwbGllcyBpdCB3aGVuIHJ1bm5pbmcgdGhpcyBidW5kbGUuIHByb3Zpc2lvbiBzdXJmYWNlcyAoZG9lcyBub3RcbiAgICAgIC8vIGF1dG8tcnVuKSB0aGUgYnVuZGxlIG9uIEFXUyDigJQgaXQgbmVlZHMgYSByZWdpc3RlcmVkLCBpbi1WUEMgcGxhdGZvcm0uXG4gICAgICBjb25zdCByZWdpb24gPSBvcHRzLnJlZ2lvbiA/IGAgLS1yZWdpb24gJHtvcHRzLnJlZ2lvbn1gIDogJyc7XG4gICAgICBjb25zdCBlbnYgPSBvcHRzLnVybCA/IHsgUExBVEZPUk1fQkFTRV9VUkw6IG9wdHMudXJsIH0gOiB1bmRlZmluZWQ7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6ICdzdG9yZS10b2tlbicsXG4gICAgICAgIGxhYmVsOiAnU3RvcmUgcGxhdGZvcm0gdG9rZW4gaW4gQVdTIFNlY3JldHMgTWFuYWdlcicsXG4gICAgICAgIGNvbW1hbmQ6IGBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuJHtyZWdpb259YCxcbiAgICAgICAgZW52LFxuICAgICAgfSk7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6ICdldmVudHMnLFxuICAgICAgICBsYWJlbDogJ0V2ZW50QnJpZGdlIGluZ2VzdGlvbiAoc2V0dXAtZXZlbnRzKScsXG4gICAgICAgIGNvbW1hbmQ6IGBwaXBlbGluZS1tYW5hZ2VyIHNldHVwLWV2ZW50cyR7cmVnaW9ufWAsXG4gICAgICAgIGVudixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBza2lwcGVkLnB1c2goeyBpZDogJ2V2ZW50cycsIHJlYXNvbjogYG5vdCBhcHBsaWNhYmxlIHRvIHRhcmdldCAnJHtvcHRzLnRhcmdldH0nIChlYzIvZmFyZ2F0ZSBvbmx5KWAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3B0cy5zdGVwcy5mb3JFYWNoKChjb21tYW5kLCBpKSA9PiB7XG4gICAgaWYgKGNvbW1hbmQudHJpbSgpICE9PSAnJykgc3RlcHMucHVzaCh7IGlkOiBgY3VzdG9tLSR7aSArIDF9YCwgbGFiZWw6IGBDdXN0b20gc3RlcCAke2kgKyAxfWAsIGNvbW1hbmQgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7IHN0ZXBzLCBza2lwcGVkIH07XG59XG4iXX0=
@@ -15,7 +15,7 @@ export declare function gitAvailable(): boolean;
15
15
  export declare function gitSupportsSparseCheckout(): boolean;
16
16
  /**
17
17
  * Run the read-only prerequisite checks for a target. Pure inspection — safe to
18
- * run unconditionally (Phase-1 advisor calls this before assembling the command).
18
+ * run unconditionally (the plan assembles this before the gated execution).
19
19
  */
20
20
  export declare function checkPrereqs(target: TargetId, opts?: {
21
21
  bootstrap?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"prereqs.d.ts","sourceRoot":"","sources":["../../src/agent/prereqs.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AA0CD,uEAAuE;AACvE,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,WAAW,EAAE,CAkFvH;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAExE"}
1
+ {"version":3,"file":"prereqs.d.ts","sourceRoot":"","sources":["../../src/agent/prereqs.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AA0CD,uEAAuE;AACvE,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAGnD;AAWD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,WAAW,EAAE,CAoDvH;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAExE"}