@outerlayer/cli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +15 -21
  3. package/dist/build-info.json +1 -1
  4. package/dist/{chunk-DEDV5V4U.js → chunk-4TNZMO7V.js} +1874 -3191
  5. package/dist/{chunk-RCQXYLMO.js → chunk-65WXAANR.js} +2 -17
  6. package/dist/{chunk-4H56Y7O6.js → chunk-DCNOXRMV.js} +1 -1
  7. package/dist/{chunk-IWIUYLDR.js → chunk-I3ETLSNE.js} +7 -187
  8. package/dist/{chunk-XN2XZFTK.js → chunk-NTTPJV35.js} +1 -1
  9. package/dist/{chunk-A6NNKRJU.js → chunk-NXLLURA4.js} +4 -4
  10. package/dist/{chunk-VU34RWDU.js → chunk-Q6CL5THG.js} +3 -2
  11. package/dist/{chunk-ECSYRPCC.js → chunk-R5KBGVII.js} +50 -4
  12. package/dist/chunk-U32VSRLO.js +2225 -0
  13. package/dist/chunk-WZBHBH3J.js +20 -0
  14. package/dist/{chunk-YMTXR7PJ.js → chunk-YOOSBOKS.js} +1 -1
  15. package/dist/{cli-3JYGL2OB.js → cli-G7DILYJY.js} +127 -138
  16. package/dist/{context-materialize-J6CRQ7O7.js → context-materialize-6WKT3RBQ.js} +1 -1
  17. package/dist/{emit-artifact-cmd-23F4YKQ3.js → emit-artifact-cmd-UQVT3OKW.js} +8 -6
  18. package/dist/{emit-finding-cmd-6K7ERPKG.js → emit-finding-cmd-FDOU2OPD.js} +8 -6
  19. package/dist/{emit-result-cmd-NDFHMJX7.js → emit-result-cmd-H2T4C2K3.js} +8 -6
  20. package/dist/{hook-fast-CBW4ZETX.js → hook-fast-J5LCDHUJ.js} +2 -2
  21. package/dist/{hook-wrap-fast-36WGE6EX.js → hook-wrap-fast-KXYNX3AD.js} +2 -2
  22. package/dist/index.js +4 -4
  23. package/dist/{loop-NFSOBUUJ.js → loop-ASZRX3CZ.js} +12 -10
  24. package/dist/{status-WGOJTXZF.js → status-I27IST4L.js} +10 -8
  25. package/dist/{statusline-fast-Z5U5CEC6.js → statusline-fast-3C5OXHDD.js} +2 -2
  26. package/dist/{sync-cmd-C5UGI4SF.js → sync-cmd-BBAUZ5JD.js} +8 -6
  27. package/dist/{watch-V3K4PESQ.js → watch-3DTPJETH.js} +8 -6
  28. package/dist/{work-claim-cmd-FQDWQVT2.js → work-claim-cmd-5AUNCLS2.js} +10 -8
  29. package/dist/{work-cmd-CW26EZZO.js → work-cmd-2P4BVX47.js} +9 -7
  30. package/dist/{work-launch-YNNCKIH3.js → work-launch-LT663PB3.js} +2 -1
  31. package/dist/{work-pr-cmd-W2QNMWXP.js → work-pr-cmd-AZQPWH4H.js} +8 -6
  32. package/package.json +1 -1
  33. package/dist/emit-commit-credit-cmd-2GX5M2BR.js +0 -121
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { EmittedNameSchema, ARTIFACT_REVIEW_CHECK_NAME, EMITTED_RESULT_MAX_LINK_LENGTH, EMITTED_RESULTS, EMITTED_RESULT_MAX_BODY_LENGTH, resolveRepoIdentity, detectActiveSession, launchRefusalForSession, detectCi } from './chunk-DEDV5V4U.js';
3
+ import { detectActiveSession, launchRefusalForSession, detectCi } from './chunk-U32VSRLO.js';
4
+ import { EmittedNameSchema, ARTIFACT_REVIEW_CHECK_NAME, EMITTED_RESULT_MAX_LINK_LENGTH, EMITTED_RESULTS, EMITTED_RESULT_MAX_BODY_LENGTH, resolveRepoIdentity } from './chunk-4TNZMO7V.js';
4
5
  import './chunk-YRYMNBGQ.js';
5
- import { parseTrackerNumber, trackerNumberError } from './chunk-RCQXYLMO.js';
6
+ import './chunk-65WXAANR.js';
7
+ import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
6
8
  import './chunk-ZJSNLVCE.js';
7
- import './chunk-A6NNKRJU.js';
8
- import './chunk-IWIUYLDR.js';
9
- import './chunk-YMTXR7PJ.js';
10
- import './chunk-ECSYRPCC.js';
9
+ import './chunk-NXLLURA4.js';
10
+ import './chunk-I3ETLSNE.js';
11
+ import './chunk-YOOSBOKS.js';
12
+ import './chunk-R5KBGVII.js';
11
13
  import { readCloudConfig } from './chunk-TFUIDMOB.js';
12
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
13
15
  import './chunk-Z5GEFMRW.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { AUTO_SYNC_DEBOUNCE_MS, WORK_ADD_RETRIES, contextPossiblyGoverned, handleWorkLaunch, hookFiredMarkerPath, maybeAutoSync, runHookFast, spoolDir } from './chunk-A6NNKRJU.js';
4
- import './chunk-IWIUYLDR.js';
3
+ export { AUTO_SYNC_DEBOUNCE_MS, WORK_ADD_RETRIES, contextPossiblyGoverned, handleWorkLaunch, hookFiredMarkerPath, maybeAutoSync, runHookFast, spoolDir } from './chunk-NXLLURA4.js';
4
+ import './chunk-I3ETLSNE.js';
5
5
  import './chunk-VNVZDWO3.js';
6
6
  import './chunk-Z5GEFMRW.js';
7
7
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { hookExecSpoolPath, hookWrapStdio, installAbortForwarding, makeTailCollector, parseHookWrapArgs, runHookWrapFast, spoolDir } from './chunk-YMTXR7PJ.js';
4
- import './chunk-ECSYRPCC.js';
3
+ export { hookExecSpoolPath, hookWrapStdio, installAbortForwarding, makeTailCollector, parseHookWrapArgs, runHookWrapFast, spoolDir } from './chunk-YOOSBOKS.js';
4
+ import './chunk-R5KBGVII.js';
5
5
  import './chunk-VNVZDWO3.js';
6
6
  import './chunk-Z5GEFMRW.js';
7
7
 
package/dist/index.js CHANGED
@@ -6,20 +6,20 @@ createRequire(import.meta.url);
6
6
  // src/index.ts
7
7
  var argv = process.argv.slice(2);
8
8
  if (argv[0] === "hook") {
9
- const { runHookFast } = await import('./hook-fast-CBW4ZETX.js');
9
+ const { runHookFast } = await import('./hook-fast-J5LCDHUJ.js');
10
10
  await runHookFast(argv[1]);
11
11
  process.exit(0);
12
12
  }
13
13
  if (argv[0] === "hook-wrap") {
14
- const { runHookWrapFast, parseHookWrapArgs } = await import('./hook-wrap-fast-36WGE6EX.js');
14
+ const { runHookWrapFast, parseHookWrapArgs } = await import('./hook-wrap-fast-KXYNX3AD.js');
15
15
  const { id, captureOutput } = parseHookWrapArgs(argv.slice(1));
16
16
  const code = await runHookWrapFast(id, { captureOutput });
17
17
  process.exit(code);
18
18
  }
19
19
  if (argv[0] === "statusline") {
20
- const { runStatuslineFast } = await import('./statusline-fast-Z5U5CEC6.js');
20
+ const { runStatuslineFast } = await import('./statusline-fast-3C5OXHDD.js');
21
21
  await runStatuslineFast(argv.slice(1));
22
22
  process.exit(0);
23
23
  }
24
- var { runCli } = await import('./cli-3JYGL2OB.js');
24
+ var { runCli } = await import('./cli-G7DILYJY.js');
25
25
  await runCli(process.argv);
@@ -2,18 +2,20 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { loadRunnerConfig, checkHooks } from './chunk-WQ6VGRGZ.js';
4
4
  import { claimPidFile, readPidFile, releasePidFile } from './chunk-D77LS3UI.js';
5
- import { describeCallFailure, retrySend, LEASE_SECONDS, shortClaim, isUnfinished, writeJobFile, relativeToRunner, setStage, jobEnv, runHook, formatDuration, describeHookEnd, readProvisionOut, workdirProblem, runCommand, finishJob, isGroupAlive, outcomeFromExitCode, needsRenew, renewLease, formatClock, RENEW_INTERVAL_SECONDS, isTimedOut, readCpuUsec, isIdle, createRunnerLog, listAdoptableJobs, retryFailedReleases, recoverLostJobs, readJobFile, hookLimitsFor } from './chunk-4H56Y7O6.js';
5
+ import { describeCallFailure, retrySend, LEASE_SECONDS, shortClaim, isUnfinished, writeJobFile, relativeToRunner, setStage, jobEnv, runHook, formatDuration, describeHookEnd, readProvisionOut, workdirProblem, runCommand, finishJob, isGroupAlive, outcomeFromExitCode, needsRenew, renewLease, formatClock, RENEW_INTERVAL_SECONDS, isTimedOut, readCpuUsec, isIdle, createRunnerLog, listAdoptableJobs, retryFailedReleases, recoverLostJobs, readJobFile, hookLimitsFor } from './chunk-DCNOXRMV.js';
6
6
  import { startTimeOf, isSameProcess } from './chunk-OZ7C3XUE.js';
7
7
  import { RUNNER_DIR_MODE, runnerDir, attemptStamp, jobDir, jobsDir, pidFilePath } from './chunk-JJP7YLMN.js';
8
- import { WorkCommandError, getJson } from './chunk-VU34RWDU.js';
9
- import { RepoFilter } from './chunk-DEDV5V4U.js';
8
+ import { WorkCommandError, getJson } from './chunk-Q6CL5THG.js';
9
+ import { RepoFilter } from './chunk-U32VSRLO.js';
10
+ import './chunk-4TNZMO7V.js';
10
11
  import './chunk-YRYMNBGQ.js';
11
- import './chunk-RCQXYLMO.js';
12
+ import './chunk-65WXAANR.js';
13
+ import './chunk-WZBHBH3J.js';
12
14
  import './chunk-ZJSNLVCE.js';
13
- import './chunk-A6NNKRJU.js';
14
- import './chunk-IWIUYLDR.js';
15
- import './chunk-YMTXR7PJ.js';
16
- import './chunk-ECSYRPCC.js';
15
+ import './chunk-NXLLURA4.js';
16
+ import './chunk-I3ETLSNE.js';
17
+ import './chunk-YOOSBOKS.js';
18
+ import './chunk-R5KBGVII.js';
17
19
  import './chunk-TFUIDMOB.js';
18
20
  import './chunk-VNVZDWO3.js';
19
21
  import './chunk-Z5GEFMRW.js';
@@ -151,7 +153,7 @@ async function runTick(state) {
151
153
  );
152
154
  }
153
155
  async function tryClaimAndStart(state, item, queue) {
154
- const { postJson } = await import('./work-cmd-CW26EZZO.js');
156
+ const { postJson } = await import('./work-cmd-2P4BVX47.js');
155
157
  const log = logOf(state);
156
158
  const claim = await retrySend(
157
159
  () => postJson(
@@ -438,7 +440,7 @@ async function probeCredentials(config, fetchImpl = fetch) {
438
440
  return {
439
441
  ok: false,
440
442
  fatal: true,
441
- reason: `${config.configPath}: the API key was refused (${status}). A runner key needs git_connection.read to list and read work items, work_item_claim.insert to claim, and work_item_claim.update to renew and release.`
443
+ reason: `${config.configPath}: the API key was refused (${status}). A runner key needs git.read and work.read to list and read work items, and work.claim to claim, renew and release.`
442
444
  };
443
445
  }
444
446
  return { ok: false, fatal: false, reason: describeCallFailure(err) };
@@ -1,17 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { formatDuration, formatClock, relativeToRunner, LEASE_SECONDS, RENEW_INTERVAL_SECONDS } from './chunk-4H56Y7O6.js';
3
+ import { formatDuration, formatClock, relativeToRunner, LEASE_SECONDS, RENEW_INTERVAL_SECONDS } from './chunk-DCNOXRMV.js';
4
4
  import './chunk-OZ7C3XUE.js';
5
5
  import { runnerDir, jobsDir } from './chunk-JJP7YLMN.js';
6
- import './chunk-VU34RWDU.js';
7
- import './chunk-DEDV5V4U.js';
6
+ import './chunk-Q6CL5THG.js';
7
+ import './chunk-U32VSRLO.js';
8
+ import './chunk-4TNZMO7V.js';
8
9
  import './chunk-YRYMNBGQ.js';
9
- import './chunk-RCQXYLMO.js';
10
+ import './chunk-65WXAANR.js';
11
+ import './chunk-WZBHBH3J.js';
10
12
  import './chunk-ZJSNLVCE.js';
11
- import './chunk-A6NNKRJU.js';
12
- import './chunk-IWIUYLDR.js';
13
- import './chunk-YMTXR7PJ.js';
14
- import './chunk-ECSYRPCC.js';
13
+ import './chunk-NXLLURA4.js';
14
+ import './chunk-I3ETLSNE.js';
15
+ import './chunk-YOOSBOKS.js';
16
+ import './chunk-R5KBGVII.js';
15
17
  import './chunk-TFUIDMOB.js';
16
18
  import './chunk-VNVZDWO3.js';
17
19
  import './chunk-Z5GEFMRW.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { STATE_FRESH_MS, WRAP_TIMEOUT_MS, localDateString, parseStatuslineArgs, parseStatuslineStdin, readStatuslineState, renderStatusline, runStatuslineFast, runWrappedStatusline, statuslineStatePath } from './chunk-XN2XZFTK.js';
4
- import './chunk-ECSYRPCC.js';
3
+ export { STATE_FRESH_MS, WRAP_TIMEOUT_MS, localDateString, parseStatuslineArgs, parseStatuslineStdin, readStatuslineState, renderStatusline, runStatuslineFast, runWrappedStatusline, statuslineStatePath } from './chunk-NTTPJV35.js';
4
+ import './chunk-R5KBGVII.js';
5
5
  import './chunk-VNVZDWO3.js';
6
6
  import './chunk-Z5GEFMRW.js';
7
7
 
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { CHUNK_PART_TARGET_BYTES, RETRYABLE_STATUSES, SyncConfigError, SyncTransportError, detectCi, isLoopbackUrl, resolveTier, runSync } from './chunk-DEDV5V4U.js';
3
+ export { CHUNK_PART_TARGET_BYTES, RETRYABLE_STATUSES, SyncConfigError, SyncTransportError, detectCi, isLoopbackUrl, resolveTier, runSync } from './chunk-U32VSRLO.js';
4
+ import './chunk-4TNZMO7V.js';
4
5
  import './chunk-YRYMNBGQ.js';
5
- import './chunk-RCQXYLMO.js';
6
+ import './chunk-65WXAANR.js';
7
+ import './chunk-WZBHBH3J.js';
6
8
  import './chunk-ZJSNLVCE.js';
7
- import './chunk-A6NNKRJU.js';
8
- import './chunk-IWIUYLDR.js';
9
- import './chunk-YMTXR7PJ.js';
10
- import './chunk-ECSYRPCC.js';
9
+ import './chunk-NXLLURA4.js';
10
+ import './chunk-I3ETLSNE.js';
11
+ import './chunk-YOOSBOKS.js';
12
+ import './chunk-R5KBGVII.js';
11
13
  export { cloudConfigPath, readCloudConfig, writeCloudConfig } from './chunk-TFUIDMOB.js';
12
14
  import './chunk-VNVZDWO3.js';
13
15
  import './chunk-Z5GEFMRW.js';
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { StatuslineAggregator, CaptureDaemon, LiveUploader } from './chunk-DEDV5V4U.js';
3
+ import { LiveUploader } from './chunk-U32VSRLO.js';
4
+ import { StatuslineAggregator, CaptureDaemon } from './chunk-4TNZMO7V.js';
4
5
  import './chunk-YRYMNBGQ.js';
5
- import './chunk-RCQXYLMO.js';
6
+ import './chunk-65WXAANR.js';
7
+ import './chunk-WZBHBH3J.js';
6
8
  import './chunk-ZJSNLVCE.js';
7
- import './chunk-A6NNKRJU.js';
8
- import './chunk-IWIUYLDR.js';
9
- import './chunk-YMTXR7PJ.js';
10
- import './chunk-ECSYRPCC.js';
9
+ import './chunk-NXLLURA4.js';
10
+ import './chunk-I3ETLSNE.js';
11
+ import './chunk-YOOSBOKS.js';
12
+ import './chunk-R5KBGVII.js';
11
13
  import './chunk-TFUIDMOB.js';
12
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
13
15
  import './chunk-Z5GEFMRW.js';
@@ -1,15 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, resolveRepository, findLiveItem } from './chunk-VU34RWDU.js';
4
- export { WorkCommandError } from './chunk-VU34RWDU.js';
5
- import './chunk-DEDV5V4U.js';
3
+ import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, resolveRepository, findLiveItem } from './chunk-Q6CL5THG.js';
4
+ export { WorkCommandError } from './chunk-Q6CL5THG.js';
5
+ import './chunk-U32VSRLO.js';
6
+ import './chunk-4TNZMO7V.js';
6
7
  import './chunk-YRYMNBGQ.js';
7
- import './chunk-RCQXYLMO.js';
8
+ import './chunk-65WXAANR.js';
9
+ import './chunk-WZBHBH3J.js';
8
10
  import './chunk-ZJSNLVCE.js';
9
- import './chunk-A6NNKRJU.js';
10
- import './chunk-IWIUYLDR.js';
11
- import './chunk-YMTXR7PJ.js';
12
- import './chunk-ECSYRPCC.js';
11
+ import './chunk-NXLLURA4.js';
12
+ import './chunk-I3ETLSNE.js';
13
+ import './chunk-YOOSBOKS.js';
14
+ import './chunk-R5KBGVII.js';
13
15
  import './chunk-TFUIDMOB.js';
14
16
  import './chunk-VNVZDWO3.js';
15
17
  import './chunk-Z5GEFMRW.js';
@@ -1,14 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkCommandError, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkAdd, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-VU34RWDU.js';
4
- import './chunk-DEDV5V4U.js';
3
+ export { WorkCommandError, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkAdd, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-Q6CL5THG.js';
4
+ import './chunk-U32VSRLO.js';
5
+ import './chunk-4TNZMO7V.js';
5
6
  import './chunk-YRYMNBGQ.js';
6
- import './chunk-RCQXYLMO.js';
7
+ import './chunk-65WXAANR.js';
8
+ import './chunk-WZBHBH3J.js';
7
9
  import './chunk-ZJSNLVCE.js';
8
- import './chunk-A6NNKRJU.js';
9
- import './chunk-IWIUYLDR.js';
10
- import './chunk-YMTXR7PJ.js';
11
- import './chunk-ECSYRPCC.js';
10
+ import './chunk-NXLLURA4.js';
11
+ import './chunk-I3ETLSNE.js';
12
+ import './chunk-YOOSBOKS.js';
13
+ import './chunk-R5KBGVII.js';
12
14
  import './chunk-TFUIDMOB.js';
13
15
  import './chunk-VNVZDWO3.js';
14
16
  import './chunk-Z5GEFMRW.js';
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { appendLaunchRecord, launchStatusIsDecisive, launchedItemForSession, launchesPath, parseWorkItemEnv, readLaunchSpoolState } from './chunk-RCQXYLMO.js';
3
+ export { appendLaunchRecord, launchStatusIsDecisive, launchedItemForSession, launchesPath, parseWorkItemEnv, readLaunchSpoolState } from './chunk-65WXAANR.js';
4
+ import './chunk-WZBHBH3J.js';
4
5
  import './chunk-Z5GEFMRW.js';
5
6
 
6
7
  createRequire(import.meta.url);
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveRepoIdentity, detectActiveSession } from './chunk-DEDV5V4U.js';
3
+ import { detectActiveSession } from './chunk-U32VSRLO.js';
4
+ import { resolveRepoIdentity } from './chunk-4TNZMO7V.js';
4
5
  import './chunk-YRYMNBGQ.js';
5
- import { parseTrackerNumber, trackerNumberError } from './chunk-RCQXYLMO.js';
6
+ import './chunk-65WXAANR.js';
7
+ import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
6
8
  import './chunk-ZJSNLVCE.js';
7
- import './chunk-A6NNKRJU.js';
8
- import './chunk-IWIUYLDR.js';
9
- import './chunk-YMTXR7PJ.js';
10
- import './chunk-ECSYRPCC.js';
9
+ import './chunk-NXLLURA4.js';
10
+ import './chunk-I3ETLSNE.js';
11
+ import './chunk-YOOSBOKS.js';
12
+ import './chunk-R5KBGVII.js';
11
13
  import { readCloudConfig } from './chunk-TFUIDMOB.js';
12
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
13
15
  import './chunk-Z5GEFMRW.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "OuterLayer CLI: init/doctor (hooks + daemon onboarding), watch, scan, and eval (validate/mine/qualify/report — execution-verified evals from your own PRs)",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Magu Studios, Inc.",
@@ -1,121 +0,0 @@
1
- #!/usr/bin/env node
2
- import { createRequire } from 'node:module';
3
- import { resolveRepoIdentity, emitLaunchRefusal } from './chunk-DEDV5V4U.js';
4
- import './chunk-YRYMNBGQ.js';
5
- import { parseTrackerNumber, trackerNumberError } from './chunk-RCQXYLMO.js';
6
- import './chunk-ZJSNLVCE.js';
7
- import './chunk-A6NNKRJU.js';
8
- import './chunk-IWIUYLDR.js';
9
- import './chunk-YMTXR7PJ.js';
10
- import './chunk-ECSYRPCC.js';
11
- import { readCloudConfig } from './chunk-TFUIDMOB.js';
12
- import { homeFromEnv } from './chunk-VNVZDWO3.js';
13
- import './chunk-Z5GEFMRW.js';
14
-
15
- createRequire(import.meta.url);
16
-
17
- // src/emit-commit-credit-cmd.ts
18
- var GREEN = "\x1B[32m";
19
- var DIM = "\x1B[2m";
20
- var RESET = "\x1B[0m";
21
- var FULL_SHA = /^[0-9a-f]{40}$/i;
22
- var EmitCommitCreditError = class extends Error {
23
- };
24
- async function runEmitCommitCredit(opts) {
25
- const cwd = opts.cwd ?? process.cwd();
26
- const home = opts.home ?? homeFromEnv();
27
- const env = opts.env ?? process.env;
28
- const shaInput = opts.sha ?? "";
29
- if (!FULL_SHA.test(shaInput)) {
30
- throw new EmitCommitCreditError(
31
- `invalid --sha "${opts.sha ?? ""}" \u2014 expected a full 40-character hex SHA (git's abbreviated form isn't enough)`
32
- );
33
- }
34
- const sha = shaInput.toLowerCase();
35
- if (opts.pr === void 0) {
36
- throw new EmitCommitCreditError("--pr is required \u2014 an attestation carries its PR anchor at emit time");
37
- }
38
- const prNumber = parseTrackerNumber(opts.pr);
39
- if (prNumber === void 0) {
40
- throw new EmitCommitCreditError(trackerNumberError("--pr", opts.pr));
41
- }
42
- const identity = resolveRepoIdentity(cwd);
43
- const repository = env.GITHUB_REPOSITORY;
44
- const gitRepo = repository === void 0 ? identity.gitRepo : void 0;
45
- if (repository === void 0 && gitRepo === void 0) {
46
- throw new EmitCommitCreditError(
47
- "nothing to attach this to \u2014 no repository. Run in CI (GITHUB_REPOSITORY) or from a git checkout with a remote."
48
- );
49
- }
50
- const refusal = emitLaunchRefusal({
51
- env,
52
- home,
53
- cwds: identity.repoRoot !== void 0 ? [identity.repoRoot, cwd] : [cwd],
54
- nowMs: Date.now()
55
- });
56
- if (refusal !== void 0) throw new EmitCommitCreditError(refusal);
57
- const fileConfig = readCloudConfig(home);
58
- const url = opts.url ?? env.OUTERLAYER_URL ?? fileConfig.url;
59
- const apiKey = opts.apiKey ?? env.OUTERLAYER_API_KEY ?? fileConfig.apiKey;
60
- const appId = opts.appId ?? env.OUTERLAYER_APP_ID ?? fileConfig.appId;
61
- if (!url || !apiKey || !appId) {
62
- const missing = [!url && "--url", !apiKey && "--api-key", !appId && "--app-id"].filter(Boolean).join(", ");
63
- throw new EmitCommitCreditError(
64
- `missing ${missing}. Run \`outerlayer login --url <your gateway>\` and paste the key at the prompt, or set OUTERLAYER_URL / OUTERLAYER_API_KEY / OUTERLAYER_APP_ID. Mint a key in the dashboard: Settings \u2192 API keys.`
65
- );
66
- }
67
- const request = {
68
- schemaVersion: 1,
69
- commitCredit: {
70
- sha,
71
- prNumber,
72
- ...repository !== void 0 ? { repository } : {},
73
- ...gitRepo !== void 0 ? { gitRepo } : {}
74
- }
75
- };
76
- const fetchImpl = opts.fetchImpl ?? fetch;
77
- let endpoint;
78
- try {
79
- endpoint = new URL("/v1/commit-credit", url).toString();
80
- } catch {
81
- throw new EmitCommitCreditError(`invalid --url "${url}" \u2014 not a URL`);
82
- }
83
- let response;
84
- try {
85
- response = await fetchImpl(endpoint, {
86
- method: "POST",
87
- headers: {
88
- "content-type": "application/json",
89
- authorization: `Bearer ${apiKey}`,
90
- "x-outerlayer-app-id": appId
91
- },
92
- body: JSON.stringify(request)
93
- });
94
- } catch (err) {
95
- throw new EmitCommitCreditError(`network error reaching ${endpoint}: ${String(err)}`);
96
- }
97
- if (response.status === 401) {
98
- throw new EmitCommitCreditError(
99
- "not authorized \u2014 the API key is unknown, expired, or bound to a different app. Mint a fresh key: dashboard \u2192 Settings \u2192 API keys."
100
- );
101
- }
102
- if (!response.ok) {
103
- let detail = "";
104
- try {
105
- detail = (await response.text()).replace(/\s+/g, " ").trim().slice(0, 160);
106
- } catch {
107
- }
108
- throw new EmitCommitCreditError(`commit-credit emit failed (${response.status})${detail ? `: ${detail}` : ""}`);
109
- }
110
- let data = {};
111
- try {
112
- data = (await response.json()).data ?? {};
113
- } catch {
114
- }
115
- const output = opts.json ? JSON.stringify(data) : `${GREEN}\u2713${RESET} attested ${sha.slice(0, 7)} ${DIM}\xB7${RESET} PR #${prNumber}
116
- ${DIM}(if this PR was decided more than a few hours ago, its comment is frozen and won't re-render)${RESET}`;
117
- if (!opts.quiet) process.stdout.write(output + "\n");
118
- return { data, output, exitCode: 0 };
119
- }
120
-
121
- export { EmitCommitCreditError, runEmitCommitCredit };