@basou/cli 0.48.1 → 0.49.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.
package/dist/index.js CHANGED
@@ -2467,6 +2467,7 @@ import { join as join10 } from "path";
2467
2467
  import { fileURLToPath } from "url";
2468
2468
  import { promisify } from "util";
2469
2469
  import {
2470
+ basouPaths as basouPaths10,
2470
2471
  buildSessionStartHookCommand,
2471
2472
  buildStopHookCommand,
2472
2473
  DEFAULT_STOP_HOOK_MIN_EDITS,
@@ -2476,13 +2477,17 @@ import {
2476
2477
  isProtocolUpdateDue,
2477
2478
  ORIENTATION_END as ORIENTATION_END2,
2478
2479
  ORIENTATION_START as ORIENTATION_START2,
2480
+ observedRepoRoots,
2481
+ observeSessionChanges,
2479
2482
  PROTOCOL_END,
2480
2483
  PROTOCOL_START,
2481
2484
  parseMarkers as parseMarkers2,
2482
2485
  parseProtocolStamp,
2483
2486
  protocolSectionsFrom,
2484
2487
  protocolUpdateToken,
2488
+ readManifest as readManifest5,
2485
2489
  readMarkdownFile as readMarkdownFile6,
2490
+ recordSessionBaseline,
2486
2491
  removeSessionStartHook,
2487
2492
  removeStopHook,
2488
2493
  renderProtocolUpdate,
@@ -2911,7 +2916,9 @@ import {
2911
2916
  enumerateSessionDirs,
2912
2917
  findErrorCode as findErrorCode5,
2913
2918
  importSessionFromJson,
2919
+ observedFilesOf,
2914
2920
  readManifest as readManifest4,
2921
+ readSessionObservation,
2915
2922
  readSessionYaml as readSessionYaml2,
2916
2923
  reimportPreservingId,
2917
2924
  resolveRepositoryRoot as resolveRepositoryRoot5,
@@ -2996,10 +3003,13 @@ async function doRunImportClaudeCode(options, ctx) {
2996
3003
  const { records, sizeBytes } = await readJsonlRecords(file);
2997
3004
  const cwd = firstTranscriptCwd(records);
2998
3005
  if (cwd === void 0 || !projectSet.has(cwd)) return null;
3006
+ const observation = await readSessionObservation(paths.observations, externalId);
3007
+ const observedFiles = observation === null ? [] : observedFilesOf(observation);
2999
3008
  return claudeTranscriptToImportPayload(records, {
3000
3009
  workspaceId: manifest.workspace.id,
3001
3010
  externalId,
3002
- sourceSizeBytes: sizeBytes
3011
+ sourceSizeBytes: sizeBytes,
3012
+ ...observedFiles.length > 0 ? { observedFiles } : {}
3003
3013
  });
3004
3014
  }
3005
3015
  };
@@ -3972,6 +3982,8 @@ async function doRunHookStop(options, ctx) {
3972
3982
  }
3973
3983
  if (typeof payload !== "object" || payload === null) return;
3974
3984
  const fields = payload;
3985
+ const observe = ctx.observe ?? observeSessionFromPayload;
3986
+ await observe(fields, "changes", ctx.portfolioConfigPath).catch(() => void 0);
3975
3987
  if (fields.stop_hook_active === true) return;
3976
3988
  const transcriptPath = typeof fields.transcript_path === "string" ? fields.transcript_path : "";
3977
3989
  if (transcriptPath.length === 0) return;
@@ -4110,8 +4122,11 @@ async function doRunHookSessionStart(ctx) {
4110
4122
  return;
4111
4123
  }
4112
4124
  if (typeof payload !== "object" || payload === null) return;
4113
- const cwd = payload.cwd;
4125
+ const fields = payload;
4126
+ const cwd = fields.cwd;
4114
4127
  if (typeof cwd !== "string" || cwd.length === 0) return;
4128
+ const observe = ctx.observe ?? observeSessionFromPayload;
4129
+ await observe(fields, "baseline", ctx.portfolioConfigPath).catch(() => void 0);
4115
4130
  let body;
4116
4131
  try {
4117
4132
  body = (await render(cwd)).body;
@@ -4122,6 +4137,38 @@ async function doRunHookSessionStart(ctx) {
4122
4137
  write(`${body.replace(/\s+$/, "")}
4123
4138
  `);
4124
4139
  }
4140
+ async function observeSessionFromPayload(fields, pass, portfolioConfigPath) {
4141
+ const externalId = typeof fields.session_id === "string" ? fields.session_id : "";
4142
+ const cwd = typeof fields.cwd === "string" ? fields.cwd : "";
4143
+ if (externalId.length === 0 || cwd.length === 0) return;
4144
+ const configPath = portfolioConfigPath ?? DEFAULT_PORTFOLIO_CONFIG_PATH;
4145
+ let root;
4146
+ try {
4147
+ root = await resolveBasouRootForCommand(cwd, "hook observe", {
4148
+ portfolioConfigPath: configPath
4149
+ });
4150
+ } catch {
4151
+ return;
4152
+ }
4153
+ if (!await isRegisteredWorkspace(root, configPath)) return;
4154
+ const paths = basouPaths10(root);
4155
+ const nowIso = (/* @__PURE__ */ new Date()).toISOString();
4156
+ if (pass === "changes") {
4157
+ await observeSessionChanges({
4158
+ observationsDir: paths.observations,
4159
+ externalId,
4160
+ nowIso
4161
+ });
4162
+ return;
4163
+ }
4164
+ const manifest = await readManifest5(paths);
4165
+ await recordSessionBaseline({
4166
+ observationsDir: paths.observations,
4167
+ repoRoots: observedRepoRoots(root, manifest),
4168
+ externalId,
4169
+ nowIso
4170
+ });
4171
+ }
4125
4172
  function parseTranscript(transcript) {
4126
4173
  const records = [];
4127
4174
  for (const line of transcript.split(/\r?\n/)) {
@@ -4700,12 +4747,12 @@ import {
4700
4747
  acquireLock as acquireLock4,
4701
4748
  appendEventToExistingSession as appendEventToExistingSession2,
4702
4749
  assertBasouRootSafe as assertBasouRootSafe8,
4703
- basouPaths as basouPaths10,
4750
+ basouPaths as basouPaths11,
4704
4751
  createAdHocSessionWithEvent as createAdHocSessionWithEvent2,
4705
4752
  EVENT_SCHEMA_VERSION as EVENT_SCHEMA_VERSION4,
4706
4753
  findErrorCode as findErrorCode7,
4707
4754
  LOCAL_CLI_EVENT_SOURCE as LOCAL_CLI_EVENT_SOURCE3,
4708
- readManifest as readManifest5,
4755
+ readManifest as readManifest6,
4709
4756
  resolveSessionId as resolveSessionId2
4710
4757
  } from "@basou/core";
4711
4758
  import { InvalidArgumentError as InvalidArgumentError3 } from "commander";
@@ -4755,7 +4802,7 @@ async function doRunNote(body, options, ctx) {
4755
4802
  }
4756
4803
  const cwd = ctx.cwd ?? process.cwd();
4757
4804
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "note");
4758
- const paths = basouPaths10(repositoryRoot);
4805
+ const paths = basouPaths11(repositoryRoot);
4759
4806
  await assertWorkspaceInitialized7(paths.root);
4760
4807
  const now = ctx.nowProvider !== void 0 ? ctx.nowProvider() : /* @__PURE__ */ new Date();
4761
4808
  const occurredAt = now.toISOString();
@@ -4782,7 +4829,7 @@ async function doRunNote(body, options, ctx) {
4782
4829
  });
4783
4830
  return;
4784
4831
  }
4785
- const manifest = await readManifest5(paths);
4832
+ const manifest = await readManifest6(paths);
4786
4833
  const adHoc = await createAdHocSessionWithEvent2({
4787
4834
  paths,
4788
4835
  manifest,
@@ -4978,7 +5025,7 @@ import {
4978
5025
  import { basename as basename6, dirname as dirname4, isAbsolute as isAbsolute4, join as join12, relative as relative2, resolve as resolve8 } from "path";
4979
5026
  import {
4980
5027
  appendBasouGitignore as appendBasouGitignore2,
4981
- basouPaths as basouPaths11,
5028
+ basouPaths as basouPaths12,
4982
5029
  classifyRetrofit,
4983
5030
  createManifest as createManifest2,
4984
5031
  ensureBasouDirectory as ensureBasouDirectory2,
@@ -4993,7 +5040,7 @@ import {
4993
5040
  planRename,
4994
5041
  planRosterAdoption,
4995
5042
  planWorkspaceView,
4996
- readManifest as readManifest6,
5043
+ readManifest as readManifest7,
4997
5044
  readMarkdownFile as readMarkdownFile7,
4998
5045
  reconcileSourceRoots,
4999
5046
  removeMarkerSection as removeMarkerSection2,
@@ -5141,8 +5188,8 @@ function preservedUnknownLines(fields) {
5141
5188
  async function doRunProjectCheck(options, ctx) {
5142
5189
  const cwd = ctx.cwd ?? process.cwd();
5143
5190
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project check");
5144
- const paths = basouPaths11(repositoryRoot);
5145
- const manifest = await readManifest6(paths);
5191
+ const paths = basouPaths12(repositoryRoot);
5192
+ const manifest = await readManifest7(paths);
5146
5193
  const roster = summarizeRosterDrift({
5147
5194
  ...manifest.repos !== void 0 ? { repos: manifest.repos } : {},
5148
5195
  sourceRoots: effectiveSourceRoots(manifest)
@@ -5276,8 +5323,8 @@ async function runProjectSync(options, ctx = {}) {
5276
5323
  async function doRunProjectSync(options, ctx) {
5277
5324
  const cwd = ctx.cwd ?? process.cwd();
5278
5325
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project sync");
5279
- const paths = basouPaths11(repositoryRoot);
5280
- const manifest = await readManifest6(paths);
5326
+ const paths = basouPaths12(repositoryRoot);
5327
+ const manifest = await readManifest7(paths);
5281
5328
  const hasRoster = manifest.repos !== void 0 && manifest.repos.length > 0;
5282
5329
  const reconcile = reconcileSourceRoots({
5283
5330
  ...manifest.repos !== void 0 ? { repos: manifest.repos } : {},
@@ -5362,8 +5409,8 @@ function classifySourceRoot(repositoryRoot, declaredPath) {
5362
5409
  async function doRunProjectAdopt(options, ctx) {
5363
5410
  const cwd = ctx.cwd ?? process.cwd();
5364
5411
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project adopt");
5365
- const paths = basouPaths11(repositoryRoot);
5366
- const manifest = await readManifest6(paths);
5412
+ const paths = basouPaths12(repositoryRoot);
5413
+ const manifest = await readManifest7(paths);
5367
5414
  const alreadyDeclared = manifest.repos !== void 0 && manifest.repos.length > 0;
5368
5415
  const candidates = effectiveSourceRoots(manifest).map(
5369
5416
  (r) => classifySourceRoot(repositoryRoot, r)
@@ -5484,8 +5531,8 @@ async function gatherRepoWiring(repositoryRoot, entry) {
5484
5531
  async function doRunProjectWiring(options, ctx) {
5485
5532
  const cwd = ctx.cwd ?? process.cwd();
5486
5533
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project wiring");
5487
- const paths = basouPaths11(repositoryRoot);
5488
- const manifest = await readManifest6(paths);
5534
+ const paths = basouPaths12(repositoryRoot);
5535
+ const manifest = await readManifest7(paths);
5489
5536
  const roster = manifest.repos ?? [];
5490
5537
  const facts = [];
5491
5538
  for (const entry of roster) facts.push(await gatherRepoWiring(repositoryRoot, entry));
@@ -5617,8 +5664,8 @@ function applyGitignorePlan(repositoryRoot, plan) {
5617
5664
  async function doRunProjectGitignore(options, ctx) {
5618
5665
  const cwd = ctx.cwd ?? process.cwd();
5619
5666
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project gitignore");
5620
- const paths = basouPaths11(repositoryRoot);
5621
- const manifest = await readManifest6(paths);
5667
+ const paths = basouPaths12(repositoryRoot);
5668
+ const manifest = await readManifest7(paths);
5622
5669
  const roster = manifest.repos ?? [];
5623
5670
  const facts = roster.map((entry) => gatherRepoGitignore(repositoryRoot, entry));
5624
5671
  const summary = planGitignore({ repos: facts, required: [...INSTRUCTION_FILES] });
@@ -5876,8 +5923,8 @@ function applyViewSymlinks(viewDir, files) {
5876
5923
  async function doRunProjectSymlinks(options, ctx) {
5877
5924
  const cwd = ctx.cwd ?? process.cwd();
5878
5925
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project symlinks");
5879
- const paths = basouPaths11(repositoryRoot);
5880
- const manifest = await readManifest6(paths);
5926
+ const paths = basouPaths12(repositoryRoot);
5927
+ const manifest = await readManifest7(paths);
5881
5928
  const roster = manifest.repos ?? [];
5882
5929
  const anchorReal = realpathSync(repositoryRoot);
5883
5930
  const facts = roster.map((entry) => gatherRepoSymlinks(repositoryRoot, anchorReal, entry));
@@ -6206,8 +6253,8 @@ function pruneViewLinks(viewDir, toPrune, rosterRealpaths) {
6206
6253
  async function doRunProjectWorkspace(options, ctx) {
6207
6254
  const cwd = ctx.cwd ?? process.cwd();
6208
6255
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project workspace");
6209
- const paths = basouPaths11(repositoryRoot);
6210
- const manifest = await readManifest6(paths);
6256
+ const paths = basouPaths12(repositoryRoot);
6257
+ const manifest = await readManifest7(paths);
6211
6258
  const viewPath = manifest.workspace.view;
6212
6259
  const roster = manifest.repos ?? [];
6213
6260
  let result;
@@ -6566,8 +6613,8 @@ function presetFailureReason(error) {
6566
6613
  async function doRunProjectPreset(options, ctx) {
6567
6614
  const cwd = ctx.cwd ?? process.cwd();
6568
6615
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project preset");
6569
- const paths = basouPaths11(repositoryRoot);
6570
- const manifest = await readManifest6(paths);
6616
+ const paths = basouPaths12(repositoryRoot);
6617
+ const manifest = await readManifest7(paths);
6571
6618
  const roster = manifest.repos ?? [];
6572
6619
  const anchorReal = realpathSync(repositoryRoot);
6573
6620
  const facts = [];
@@ -7225,8 +7272,8 @@ function renderProjectTeardown(result) {
7225
7272
  async function doRunProjectTeardown(target, options, ctx = {}) {
7226
7273
  const cwd = ctx.cwd ?? process.cwd();
7227
7274
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project teardown");
7228
- const paths = basouPaths11(repositoryRoot);
7229
- const manifest = await readManifest6(paths);
7275
+ const paths = basouPaths12(repositoryRoot);
7276
+ const manifest = await readManifest7(paths);
7230
7277
  const plan = gatherRepoTeardown(repositoryRoot, manifest, target);
7231
7278
  const willApply = options.apply === true && !plan.isAnchor && plan.removableCount > 0;
7232
7279
  const { removed, failed } = willApply ? applyRepoTeardown(repositoryRoot, manifest, plan) : { removed: [], failed: [] };
@@ -7267,8 +7314,8 @@ function buildArchivedManifest(manifest, plan, updatedAt) {
7267
7314
  async function doRunProjectArchive(target, options, ctx) {
7268
7315
  const cwd = ctx.cwd ?? process.cwd();
7269
7316
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project archive");
7270
- const paths = basouPaths11(repositoryRoot);
7271
- const manifest = await readManifest6(paths);
7317
+ const paths = basouPaths12(repositoryRoot);
7318
+ const manifest = await readManifest7(paths);
7272
7319
  const roster = manifest.repos ?? [];
7273
7320
  let targetIsAnchor = false;
7274
7321
  try {
@@ -7424,8 +7471,8 @@ function buildRenamedManifest(manifest, plan, updatedAt) {
7424
7471
  async function doRunProjectRename(oldPath, newPath, options, ctx) {
7425
7472
  const cwd = ctx.cwd ?? process.cwd();
7426
7473
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project rename");
7427
- const paths = basouPaths11(repositoryRoot);
7428
- const manifest = await readManifest6(paths);
7474
+ const paths = basouPaths12(repositoryRoot);
7475
+ const manifest = await readManifest7(paths);
7429
7476
  const roster = manifest.repos ?? [];
7430
7477
  let oldIsAnchor = false;
7431
7478
  try {
@@ -7600,7 +7647,7 @@ async function doRunProjectNew(repos, options, ctx) {
7600
7647
  const roster = rosterPaths.map((path) => ({ path }));
7601
7648
  const viewPath = options.view === false ? null : options.view ?? `../${viewStem}-workspace`;
7602
7649
  const sourceRoots = [...rosterPaths, ...viewPath !== null ? [viewPath] : []];
7603
- const paths = basouPaths11(repositoryRoot);
7650
+ const paths = basouPaths12(repositoryRoot);
7604
7651
  const existed = existsSync2(paths.files.manifest);
7605
7652
  const manifest = createManifest2({
7606
7653
  workspaceName,
@@ -7711,8 +7758,8 @@ async function runProjectDerive(options, ctx = {}) {
7711
7758
  async function doRunProjectDerive(options, ctx) {
7712
7759
  const cwd = ctx.cwd ?? process.cwd();
7713
7760
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project derive");
7714
- const paths = basouPaths11(repositoryRoot);
7715
- const manifest = await readManifest6(paths);
7761
+ const paths = basouPaths12(repositoryRoot);
7762
+ const manifest = await readManifest7(paths);
7716
7763
  if (manifest.repos === void 0 || manifest.repos.length === 0) {
7717
7764
  console.log(
7718
7765
  "# Generate project wiring in one pass (declaration \u2192 wiring)\n\n\u2139\uFE0F No repo roster declared (manifest `repos`). Declare one first with `basou project new` (new project) or `basou project adopt` (bootstrap from existing source_roots)."
@@ -7752,8 +7799,8 @@ async function doRunProjectDerive(options, ctx) {
7752
7799
  async function doRunProjectSeedAnchor(options, ctx) {
7753
7800
  const cwd = ctx.cwd ?? process.cwd();
7754
7801
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project derive");
7755
- const paths = basouPaths11(repositoryRoot);
7756
- const manifest = await readManifest6(paths);
7802
+ const paths = basouPaths12(repositoryRoot);
7803
+ const manifest = await readManifest7(paths);
7757
7804
  const roster = manifest.repos ?? [];
7758
7805
  console.log("# Anchor instruction-file seed (the planning master's own AGENTS.md)");
7759
7806
  console.log("");
@@ -7946,8 +7993,8 @@ async function applyViewRetrofit(anchorReal, outcome) {
7946
7993
  async function doRunProjectRetrofit(repo, options, ctx) {
7947
7994
  const cwd = ctx.cwd ?? process.cwd();
7948
7995
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "project retrofit");
7949
- const paths = basouPaths11(repositoryRoot);
7950
- const manifest = await readManifest6(paths);
7996
+ const paths = basouPaths12(repositoryRoot);
7997
+ const manifest = await readManifest7(paths);
7951
7998
  const roster = manifest.repos ?? [];
7952
7999
  const anchorReal = realpathSync(repositoryRoot);
7953
8000
  const viewPath = manifest.workspace.view;
@@ -8383,9 +8430,9 @@ async function doRunProtocolUnsync(options) {
8383
8430
  // src/commands/refresh.ts
8384
8431
  import {
8385
8432
  assertBasouRootSafe as assertBasouRootSafe9,
8386
- basouPaths as basouPaths12,
8433
+ basouPaths as basouPaths13,
8387
8434
  findErrorCode as findErrorCode9,
8388
- readManifest as readManifest7
8435
+ readManifest as readManifest8
8389
8436
  } from "@basou/core";
8390
8437
  import { InvalidArgumentError as InvalidArgumentError4 } from "commander";
8391
8438
 
@@ -8625,7 +8672,7 @@ async function doRunRefreshWatch(options, ctx) {
8625
8672
  if (options.force === true) throw new Error("--watch cannot be combined with --force.");
8626
8673
  const cwd = ctx.cwd ?? process.cwd();
8627
8674
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "refresh");
8628
- const paths = basouPaths12(repositoryRoot);
8675
+ const paths = basouPaths13(repositoryRoot);
8629
8676
  await assertWorkspaceInitialized8(paths.root);
8630
8677
  const intervalMs = (options.interval ?? DEFAULT_WATCH_INTERVAL_SEC) * 1e3;
8631
8678
  const controller = new AbortController();
@@ -8653,7 +8700,7 @@ async function doRunRefreshWatch(options, ctx) {
8653
8700
  async function computeRefresh(options, ctx) {
8654
8701
  const cwd = ctx.cwd ?? process.cwd();
8655
8702
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "refresh");
8656
- const paths = basouPaths12(repositoryRoot);
8703
+ const paths = basouPaths13(repositoryRoot);
8657
8704
  await assertWorkspaceInitialized8(paths.root);
8658
8705
  const nowIso = (ctx.nowProvider?.() ?? /* @__PURE__ */ new Date()).toISOString();
8659
8706
  const result = await refreshAll({
@@ -8692,7 +8739,7 @@ async function warnPosition(paths, result, ctx) {
8692
8739
  }
8693
8740
  async function retiredChannelNotice(paths) {
8694
8741
  try {
8695
- const manifest = await readManifest7(paths);
8742
+ const manifest = await readManifest8(paths);
8696
8743
  if (manifest.channels?.codex !== true) return null;
8697
8744
  return "codex channel: retired \u2014 the manifest's channels.codex is ignored; a Codex session now receives this workspace's position from the SessionStart hook (see `basou hook status codex`), and nothing is written to the user-global ~/.codex/AGENTS.md";
8698
8745
  } catch {
@@ -8762,7 +8809,7 @@ async function assertWorkspaceInitialized8(basouRoot) {
8762
8809
  import { isAbsolute as isAbsolute5, resolve as resolve9 } from "path";
8763
8810
  import {
8764
8811
  assertBasouRootSafe as assertBasouRootSafe10,
8765
- basouPaths as basouPaths13,
8812
+ basouPaths as basouPaths14,
8766
8813
  findErrorCode as findErrorCode10,
8767
8814
  renderReport,
8768
8815
  resolveRepositoryRoot as resolveRepositoryRoot8,
@@ -8787,7 +8834,7 @@ async function runReportGenerate(options, ctx = {}) {
8787
8834
  async function doRunReportGenerate(options, ctx) {
8788
8835
  const cwd = ctx.cwd ?? process.cwd();
8789
8836
  const repositoryRoot = await resolveRepositoryRootForReport(cwd);
8790
- const paths = basouPaths13(repositoryRoot);
8837
+ const paths = basouPaths14(repositoryRoot);
8791
8838
  await assertWorkspaceInitialized9(paths.root);
8792
8839
  const nowIso = (ctx.nowProvider?.() ?? /* @__PURE__ */ new Date()).toISOString();
8793
8840
  const result = await renderReport({
@@ -8842,14 +8889,14 @@ import { homedir as homedir10 } from "os";
8842
8889
  import { resolve as resolve10 } from "path";
8843
8890
  import {
8844
8891
  assertBasouRootSafe as assertBasouRootSafe11,
8845
- basouPaths as basouPaths14,
8892
+ basouPaths as basouPaths15,
8846
8893
  buildReviewRecordedEvent,
8847
8894
  buildReviewRecordLabel,
8848
8895
  createAdHocSessionWithEvent as createAdHocSessionWithEvent3,
8849
8896
  findErrorCode as findErrorCode11,
8850
8897
  findUnbindableRepos,
8851
8898
  parseReviewRecordInput,
8852
- readManifest as readManifest8,
8899
+ readManifest as readManifest9,
8853
8900
  resolveRepoRoot,
8854
8901
  sanitizePath as sanitizePath2
8855
8902
  } from "@basou/core";
@@ -8924,7 +8971,7 @@ async function runReviewRecord(options, ctx = {}) {
8924
8971
  async function doRunReviewRecord(options, ctx) {
8925
8972
  const cwd = ctx.cwd ?? process.cwd();
8926
8973
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "review record");
8927
- const paths = basouPaths14(repositoryRoot);
8974
+ const paths = basouPaths15(repositoryRoot);
8928
8975
  await assertWorkspaceInitialized10(paths.root);
8929
8976
  const raw = await readReviewInput(options, ctx);
8930
8977
  const review = parseReviewRecordInput(raw);
@@ -8936,7 +8983,7 @@ async function doRunReviewRecord(options, ctx) {
8936
8983
  }
8937
8984
  const now = ctx.nowProvider !== void 0 ? ctx.nowProvider() : /* @__PURE__ */ new Date();
8938
8985
  const occurredAt = now.toISOString();
8939
- const manifest = await readManifest8(paths);
8986
+ const manifest = await readManifest9(paths);
8940
8987
  const invocationArgs = options.file !== void 0 ? [
8941
8988
  "--file",
8942
8989
  sanitizePath2(resolve10(cwd, options.file), {
@@ -9071,7 +9118,7 @@ async function assertWorkspaceInitialized10(basouRoot) {
9071
9118
 
9072
9119
  // src/commands/review-gaps.ts
9073
9120
  import {
9074
- basouPaths as basouPaths15,
9121
+ basouPaths as basouPaths16,
9075
9122
  findReviewGaps
9076
9123
  } from "@basou/core";
9077
9124
  import { InvalidArgumentError as InvalidArgumentError5 } from "commander";
@@ -9112,7 +9159,7 @@ async function runReviewGaps(options, ctx = {}) {
9112
9159
  async function doRunReviewGaps(options, ctx) {
9113
9160
  const cwd = ctx.cwd ?? process.cwd();
9114
9161
  const repositoryRoot = await resolveBasouRootForCommand(cwd, "review-gaps");
9115
- const paths = basouPaths15(repositoryRoot);
9162
+ const paths = basouPaths16(repositoryRoot);
9116
9163
  const nowIso = (ctx.nowProvider?.() ?? /* @__PURE__ */ new Date()).toISOString();
9117
9164
  const summary = await findReviewGaps({
9118
9165
  paths,
@@ -9280,7 +9327,7 @@ import { join as join14 } from "path";
9280
9327
  import {
9281
9328
  acquireLock as acquireLock5,
9282
9329
  assertBasouRootSafe as assertBasouRootSafe12,
9283
- basouPaths as basouPaths16,
9330
+ basouPaths as basouPaths17,
9284
9331
  ChildProcessRunner as ChildProcessRunner2,
9285
9332
  claudeCodeAdapterMetadata,
9286
9333
  codexAdapterMetadata,
@@ -9292,7 +9339,7 @@ import {
9292
9339
  getSnapshot as getSnapshot2,
9293
9340
  overwriteYamlFile as overwriteYamlFile2,
9294
9341
  prefixedUlid as prefixedUlid4,
9295
- readManifest as readManifest9,
9342
+ readManifest as readManifest10,
9296
9343
  readYamlFile as readYamlFile6,
9297
9344
  resolveClaudeCodeCommand,
9298
9345
  resolveCodexCommand,
@@ -9352,9 +9399,9 @@ async function runTrackedTool(args, options, ctx, adapter) {
9352
9399
  const childArgs = adapter.transformArgs ? adapter.transformArgs(args) : args;
9353
9400
  const cwd = options.cwd ?? process.cwd();
9354
9401
  const repoRoot = await resolveRepositoryRootForRun(cwd);
9355
- const paths = basouPaths16(repoRoot);
9402
+ const paths = basouPaths17(repoRoot);
9356
9403
  await assertBasouRootSafe12(paths.root);
9357
- const manifest = await readManifest9(paths);
9404
+ const manifest = await readManifest10(paths);
9358
9405
  const sessionId = prefixedUlid4("ses");
9359
9406
  const sessionDir = join14(paths.sessions, sessionId);
9360
9407
  await mkdir2(sessionDir, { recursive: true });
@@ -9741,7 +9788,7 @@ import {
9741
9788
  acquireLock as acquireLock6,
9742
9789
  appendEventToExistingSession as appendEventToExistingSession3,
9743
9790
  assertBasouRootSafe as assertBasouRootSafe13,
9744
- basouPaths as basouPaths17,
9791
+ basouPaths as basouPaths18,
9745
9792
  EVENT_SCHEMA_VERSION as EVENT_SCHEMA_VERSION6,
9746
9793
  enumerateSessionDirs as enumerateSessionDirs2,
9747
9794
  findErrorCode as findErrorCode12,
@@ -9749,7 +9796,7 @@ import {
9749
9796
  LOCAL_CLI_EVENT_SOURCE as LOCAL_CLI_EVENT_SOURCE4,
9750
9797
  loadSessionEntries as loadSessionEntries2,
9751
9798
  readAllEvents,
9752
- readManifest as readManifest10,
9799
+ readManifest as readManifest11,
9753
9800
  readObservedDuration,
9754
9801
  readYamlFile as readYamlFile7,
9755
9802
  rechainSessionInPlace,
@@ -9810,7 +9857,7 @@ async function runSessionList(options, ctx = {}) {
9810
9857
  async function doRunSessionList(options, ctx) {
9811
9858
  const cwd = ctx.cwd ?? process.cwd();
9812
9859
  const repositoryRoot = await resolveRepositoryRootForSession(cwd, "list");
9813
- const paths = basouPaths17(repositoryRoot);
9860
+ const paths = basouPaths18(repositoryRoot);
9814
9861
  await assertWorkspaceInitialized11(paths.root);
9815
9862
  const now = /* @__PURE__ */ new Date();
9816
9863
  const records = (await loadSessionEntries2(paths, {
@@ -9862,7 +9909,7 @@ async function runSessionShow(idInput, options, ctx = {}) {
9862
9909
  async function doRunSessionShow(idInput, options, ctx) {
9863
9910
  const cwd = ctx.cwd ?? process.cwd();
9864
9911
  const repositoryRoot = await resolveRepositoryRootForSession(cwd, "show");
9865
- const paths = basouPaths17(repositoryRoot);
9912
+ const paths = basouPaths18(repositoryRoot);
9866
9913
  await assertWorkspaceInitialized11(paths.root);
9867
9914
  const sessionId = await resolveSessionId3(paths, idInput);
9868
9915
  const sessionDir = join15(paths.sessions, sessionId);
@@ -10174,9 +10221,9 @@ async function runSessionImport(options, ctx = {}) {
10174
10221
  async function doRunSessionImport(options, ctx) {
10175
10222
  const cwd = ctx.cwd ?? process.cwd();
10176
10223
  const repositoryRoot = await resolveRepositoryRootForSession(cwd, "import");
10177
- const paths = basouPaths17(repositoryRoot);
10224
+ const paths = basouPaths18(repositoryRoot);
10178
10225
  await assertWorkspaceInitialized11(paths.root);
10179
- const manifest = await readManifest10(paths);
10226
+ const manifest = await readManifest11(paths);
10180
10227
  const rawBody = await readInputFile(options.from);
10181
10228
  const json = parseJsonStrict(rawBody);
10182
10229
  const parsed = SessionImportPayloadSchema2.safeParse(json);
@@ -10290,7 +10337,7 @@ async function doRunSessionNote(sessionIdInput, options, ctx) {
10290
10337
  }
10291
10338
  const cwd = ctx.cwd ?? process.cwd();
10292
10339
  const repositoryRoot = await resolveRepositoryRootForSession(cwd, "note");
10293
- const paths = basouPaths17(repositoryRoot);
10340
+ const paths = basouPaths18(repositoryRoot);
10294
10341
  await assertWorkspaceInitialized11(paths.root);
10295
10342
  const sessionId = await resolveSessionId3(paths, sessionIdInput);
10296
10343
  const body = hasBody ? options.body : await readNoteFile(options.fromFile);
@@ -10372,7 +10419,7 @@ async function doRunSessionRechain(options, ctx) {
10372
10419
  }
10373
10420
  const cwd = ctx.cwd ?? process.cwd();
10374
10421
  const repositoryRoot = await resolveRepositoryRootForSession(cwd, "rechain");
10375
- const paths = basouPaths17(repositoryRoot);
10422
+ const paths = basouPaths18(repositoryRoot);
10376
10423
  await assertWorkspaceInitialized11(paths.root);
10377
10424
  const sessionIds = options.session !== void 0 ? [await resolveSessionId3(paths, options.session)] : await enumerateSessionDirs2(paths);
10378
10425
  const dryRun = options.dryRun === true;
@@ -10427,7 +10474,7 @@ function renderRechainRow(row, dryRun) {
10427
10474
  // src/commands/stats.ts
10428
10475
  import {
10429
10476
  assertBasouRootSafe as assertBasouRootSafe14,
10430
- basouPaths as basouPaths18,
10477
+ basouPaths as basouPaths19,
10431
10478
  computeWorkStats,
10432
10479
  findErrorCode as findErrorCode13,
10433
10480
  resolveRepositoryRoot as resolveRepositoryRoot10
@@ -10448,7 +10495,7 @@ async function runStats(options, ctx = {}) {
10448
10495
  async function doRunStats(options, ctx) {
10449
10496
  const cwd = ctx.cwd ?? process.cwd();
10450
10497
  const repositoryRoot = await resolveRepositoryRootForStats(cwd);
10451
- const paths = basouPaths18(repositoryRoot);
10498
+ const paths = basouPaths19(repositoryRoot);
10452
10499
  await assertWorkspaceInitialized12(paths.root);
10453
10500
  const now = ctx.nowProvider?.() ?? /* @__PURE__ */ new Date();
10454
10501
  const result = await computeWorkStats({
@@ -10561,10 +10608,10 @@ async function assertWorkspaceInitialized12(basouRoot) {
10561
10608
  // src/commands/status.ts
10562
10609
  import {
10563
10610
  assertBasouRootSafe as assertBasouRootSafe15,
10564
- basouPaths as basouPaths19,
10611
+ basouPaths as basouPaths20,
10565
10612
  buildStatusSnapshot,
10566
10613
  findErrorCode as findErrorCode14,
10567
- readManifest as readManifest11,
10614
+ readManifest as readManifest12,
10568
10615
  resolveRepositoryRoot as resolveRepositoryRoot11,
10569
10616
  writeStatus
10570
10617
  } from "@basou/core";
@@ -10584,7 +10631,7 @@ async function runStatus(options, ctx = {}) {
10584
10631
  async function doRunStatus(options, ctx) {
10585
10632
  const cwd = ctx.cwd ?? process.cwd();
10586
10633
  const repositoryRoot = await resolveRepositoryRootForStatus(cwd);
10587
- const paths = basouPaths19(repositoryRoot);
10634
+ const paths = basouPaths20(repositoryRoot);
10588
10635
  try {
10589
10636
  await assertBasouRootSafe15(paths.root);
10590
10637
  } catch (error) {
@@ -10595,7 +10642,7 @@ async function doRunStatus(options, ctx) {
10595
10642
  }
10596
10643
  let manifest;
10597
10644
  try {
10598
- manifest = await readManifest11(paths);
10645
+ manifest = await readManifest12(paths);
10599
10646
  } catch (error) {
10600
10647
  if (findErrorCode14(error, "ENOENT")) {
10601
10648
  throw new Error("Workspace not initialized. Run 'basou init' first.");
@@ -10652,7 +10699,7 @@ import { join as join16 } from "path";
10652
10699
  import {
10653
10700
  archiveTask,
10654
10701
  assertBasouRootSafe as assertBasouRootSafe16,
10655
- basouPaths as basouPaths20,
10702
+ basouPaths as basouPaths21,
10656
10703
  createTaskWithEvent,
10657
10704
  deleteTask,
10658
10705
  editTask,
@@ -10661,7 +10708,7 @@ import {
10661
10708
  loadSessionEntries as loadSessionEntries3,
10662
10709
  loadTaskEntries,
10663
10710
  prefixedUlid as prefixedUlid5,
10664
- readManifest as readManifest12,
10711
+ readManifest as readManifest13,
10665
10712
  readTaskFile,
10666
10713
  readTaskFileWithArchiveFallback,
10667
10714
  reconcileAllTasks,
@@ -10753,7 +10800,7 @@ async function doRunTaskNew(options, ctx) {
10753
10800
  }
10754
10801
  const cwd = ctx.cwd ?? process.cwd();
10755
10802
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "new");
10756
- const paths = basouPaths20(repositoryRoot);
10803
+ const paths = basouPaths21(repositoryRoot);
10757
10804
  await assertWorkspaceInitialized13(paths.root);
10758
10805
  const description = options.description !== void 0 ? options.description : options.fromFile !== void 0 ? await readDescriptionFile(options.fromFile) : "";
10759
10806
  const now = ctx.nowProvider !== void 0 ? ctx.nowProvider() : /* @__PURE__ */ new Date();
@@ -10788,7 +10835,7 @@ async function doRunTaskNew(options, ctx) {
10788
10835
  });
10789
10836
  return;
10790
10837
  }
10791
- const manifest = await readManifest12(paths);
10838
+ const manifest = await readManifest13(paths);
10792
10839
  const result = await createTaskWithEvent({
10793
10840
  mode: "ad-hoc",
10794
10841
  paths,
@@ -10862,7 +10909,7 @@ async function runTaskList(options, ctx = {}) {
10862
10909
  async function doRunTaskList(options, ctx) {
10863
10910
  const cwd = ctx.cwd ?? process.cwd();
10864
10911
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "list");
10865
- const paths = basouPaths20(repositoryRoot);
10912
+ const paths = basouPaths21(repositoryRoot);
10866
10913
  await assertWorkspaceInitialized13(paths.root);
10867
10914
  const entries = await loadTaskEntries(paths, {
10868
10915
  onSkip: (id, reason) => printTaskSkip(id, reason)
@@ -10966,7 +11013,7 @@ async function runTaskShow(idInput, options, ctx = {}) {
10966
11013
  async function doRunTaskShow(idInput, options, ctx) {
10967
11014
  const cwd = ctx.cwd ?? process.cwd();
10968
11015
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "show");
10969
- const paths = basouPaths20(repositoryRoot);
11016
+ const paths = basouPaths21(repositoryRoot);
10970
11017
  await assertWorkspaceInitialized13(paths.root);
10971
11018
  const taskId = await resolveTaskId2(paths, idInput, { includeArchived: true });
10972
11019
  const { doc, archived } = await readTaskFileWithArchiveFallback(paths, taskId);
@@ -11110,7 +11157,7 @@ async function doRunTaskStatus(taskIdInput, newStatusInput, options, ctx) {
11110
11157
  const newStatus = parseTaskStatusPositional(newStatusInput);
11111
11158
  const cwd = ctx.cwd ?? process.cwd();
11112
11159
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "status");
11113
- const paths = basouPaths20(repositoryRoot);
11160
+ const paths = basouPaths21(repositoryRoot);
11114
11161
  await assertWorkspaceInitialized13(paths.root);
11115
11162
  const taskId = await resolveTaskId2(paths, taskIdInput);
11116
11163
  const now = ctx.nowProvider !== void 0 ? ctx.nowProvider() : /* @__PURE__ */ new Date();
@@ -11136,7 +11183,7 @@ async function doRunTaskStatus(taskIdInput, newStatusInput, options, ctx) {
11136
11183
  });
11137
11184
  return;
11138
11185
  }
11139
- const manifest = await readManifest12(paths);
11186
+ const manifest = await readManifest13(paths);
11140
11187
  const result = await updateTaskStatusWithEvent({
11141
11188
  mode: "ad-hoc",
11142
11189
  paths,
@@ -11187,9 +11234,9 @@ async function runTaskReconcile(options, ctx = {}) {
11187
11234
  async function doRunTaskReconcile(options, ctx) {
11188
11235
  const cwd = ctx.cwd ?? process.cwd();
11189
11236
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "reconcile");
11190
- const paths = basouPaths20(repositoryRoot);
11237
+ const paths = basouPaths21(repositoryRoot);
11191
11238
  await assertWorkspaceInitialized13(paths.root);
11192
- const manifest = await readManifest12(paths);
11239
+ const manifest = await readManifest13(paths);
11193
11240
  const nowProvider = ctx.nowProvider ?? (() => /* @__PURE__ */ new Date());
11194
11241
  const write = options.write === true;
11195
11242
  const verbose = isVerbose(options);
@@ -11367,9 +11414,9 @@ async function doRunTaskRefreshLinkage(taskIdInput, options, ctx) {
11367
11414
  }
11368
11415
  const cwd = ctx.cwd ?? process.cwd();
11369
11416
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "refresh-linkage");
11370
- const paths = basouPaths20(repositoryRoot);
11417
+ const paths = basouPaths21(repositoryRoot);
11371
11418
  await assertWorkspaceInitialized13(paths.root);
11372
- const manifest = await readManifest12(paths);
11419
+ const manifest = await readManifest13(paths);
11373
11420
  const taskId = await resolveTaskId2(paths, taskIdInput);
11374
11421
  const nowProvider = ctx.nowProvider ?? (() => /* @__PURE__ */ new Date());
11375
11422
  const write = options.write === true;
@@ -11447,9 +11494,9 @@ async function doRunTaskEdit(taskIdInput, options, ctx) {
11447
11494
  }
11448
11495
  const cwd = ctx.cwd ?? process.cwd();
11449
11496
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "edit");
11450
- const paths = basouPaths20(repositoryRoot);
11497
+ const paths = basouPaths21(repositoryRoot);
11451
11498
  await assertWorkspaceInitialized13(paths.root);
11452
- const manifest = await readManifest12(paths);
11499
+ const manifest = await readManifest13(paths);
11453
11500
  const taskId = await resolveTaskId2(paths, taskIdInput);
11454
11501
  const now = ctx.nowProvider !== void 0 ? ctx.nowProvider() : /* @__PURE__ */ new Date();
11455
11502
  const occurredAt = now.toISOString();
@@ -11503,9 +11550,9 @@ async function doRunTaskDelete(taskIdInput, options, ctx) {
11503
11550
  }
11504
11551
  const cwd = ctx.cwd ?? process.cwd();
11505
11552
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "delete");
11506
- const paths = basouPaths20(repositoryRoot);
11553
+ const paths = basouPaths21(repositoryRoot);
11507
11554
  await assertWorkspaceInitialized13(paths.root);
11508
- const manifest = await readManifest12(paths);
11555
+ const manifest = await readManifest13(paths);
11509
11556
  const taskId = await resolveTaskId2(paths, taskIdInput);
11510
11557
  if (options.yes !== true) {
11511
11558
  await confirmDestructiveAction("delete", taskId);
@@ -11548,9 +11595,9 @@ async function doRunTaskArchive(taskIdInput, options, ctx) {
11548
11595
  }
11549
11596
  const cwd = ctx.cwd ?? process.cwd();
11550
11597
  const repositoryRoot = await resolveRepositoryRootForTask(cwd, "archive");
11551
- const paths = basouPaths20(repositoryRoot);
11598
+ const paths = basouPaths21(repositoryRoot);
11552
11599
  await assertWorkspaceInitialized13(paths.root);
11553
- const manifest = await readManifest12(paths);
11600
+ const manifest = await readManifest13(paths);
11554
11601
  const taskId = await resolveTaskId2(paths, taskIdInput);
11555
11602
  if (options.yes !== true) {
11556
11603
  await confirmDestructiveAction("archive", taskId);
@@ -11769,7 +11816,7 @@ function maxLen3(values, floor) {
11769
11816
  // src/commands/verify.ts
11770
11817
  import {
11771
11818
  assertBasouRootSafe as assertBasouRootSafe17,
11772
- basouPaths as basouPaths21,
11819
+ basouPaths as basouPaths22,
11773
11820
  enumerateSessionDirs as enumerateSessionDirs3,
11774
11821
  findErrorCode as findErrorCode16,
11775
11822
  resolveRepositoryRoot as resolveRepositoryRoot12,
@@ -11795,7 +11842,7 @@ async function doRunVerify(options, ctx) {
11795
11842
  }
11796
11843
  const cwd = ctx.cwd ?? process.cwd();
11797
11844
  const repositoryRoot = await resolveRepositoryRootForVerify(cwd);
11798
- const paths = basouPaths21(repositoryRoot);
11845
+ const paths = basouPaths22(repositoryRoot);
11799
11846
  await assertWorkspaceInitialized14(paths.root);
11800
11847
  const sessionIds = options.session !== void 0 ? [await resolveSessionId5(paths, options.session)] : await enumerateSessionDirs3(paths);
11801
11848
  const rows = [];
@@ -11870,9 +11917,9 @@ import { createHash as createHash2 } from "crypto";
11870
11917
  import { basename as basename10, resolve as resolve13 } from "path";
11871
11918
  import {
11872
11919
  assertBasouRootSafe as assertBasouRootSafe18,
11873
- basouPaths as basouPaths23,
11920
+ basouPaths as basouPaths24,
11874
11921
  findErrorCode as findErrorCode18,
11875
- readManifest as readManifest16,
11922
+ readManifest as readManifest17,
11876
11923
  resolveRepositoryRoot as resolveRepositoryRoot14
11877
11924
  } from "@basou/core";
11878
11925
  import { InvalidArgumentError as InvalidArgumentError8 } from "commander";
@@ -11883,7 +11930,7 @@ import { readdir as readdir3, stat as stat7 } from "fs/promises";
11883
11930
  import { homedir as homedir12 } from "os";
11884
11931
  import { basename as basename8, dirname as dirname5, join as join17 } from "path";
11885
11932
  import { createInterface as createInterface2 } from "readline";
11886
- import { basouPaths as basouPaths22, readManifest as readManifest13, resolveRepositoryRoot as resolveRepositoryRoot13 } from "@basou/core";
11933
+ import { basouPaths as basouPaths23, readManifest as readManifest14, resolveRepositoryRoot as resolveRepositoryRoot13 } from "@basou/core";
11887
11934
  function uncapturedTotal(result) {
11888
11935
  return result.groups.reduce((sum, g) => sum + g.logs, 0) + result.unplaceable;
11889
11936
  }
@@ -11926,7 +11973,7 @@ async function collectDeclaredRoots(workspaces) {
11926
11973
  }
11927
11974
  let resolved;
11928
11975
  try {
11929
- const manifest = await readManifest13(basouPaths22(importRoot));
11976
+ const manifest = await readManifest14(basouPaths23(importRoot));
11930
11977
  resolved = resolveSourceRoots({
11931
11978
  projectFlags: [],
11932
11979
  manifest,
@@ -12197,7 +12244,7 @@ import { execFile as execFile2 } from "child_process";
12197
12244
  import { lstat as lstat2, realpath as realpath4 } from "fs/promises";
12198
12245
  import { isAbsolute as isAbsolute7, join as join18, relative as relative4, resolve as resolve11 } from "path";
12199
12246
  import { promisify as promisify2 } from "util";
12200
- import { readManifest as readManifest14 } from "@basou/core";
12247
+ import { readManifest as readManifest15 } from "@basou/core";
12201
12248
  var execFileAsync2 = promisify2(execFile2);
12202
12249
  function errorCode(error) {
12203
12250
  return error instanceof Error ? error.code : void 0;
@@ -12253,7 +12300,7 @@ async function checkPortfolioSafety(workspaces) {
12253
12300
  let viewPath;
12254
12301
  let isMaster = false;
12255
12302
  try {
12256
- const manifest = await readManifest14(ws.paths);
12303
+ const manifest = await readManifest15(ws.paths);
12257
12304
  sourceRoots = manifest.import?.source_roots ?? [];
12258
12305
  viewPath = manifest.workspace.view;
12259
12306
  isMaster = true;
@@ -12383,7 +12430,7 @@ import {
12383
12430
  loadSessionEntries as loadSessionEntries4,
12384
12431
  loadTaskEntries as loadTaskEntries2,
12385
12432
  readAllEvents as readAllEvents2,
12386
- readManifest as readManifest15,
12433
+ readManifest as readManifest16,
12387
12434
  readMarkdownFile as readMarkdownFile9,
12388
12435
  readSessionYaml as readSessionYaml3,
12389
12436
  readTaskFile as readTaskFile2,
@@ -13368,7 +13415,7 @@ async function captureStaleness(ws, nowIso) {
13368
13415
  async function overview(ws, nowProvider, resolveRemoteUrl) {
13369
13416
  let manifest;
13370
13417
  try {
13371
- manifest = await readManifest15(ws.paths);
13418
+ manifest = await readManifest16(ws.paths);
13372
13419
  } catch (error) {
13373
13420
  if (findErrorCode17(error, "ENOENT")) {
13374
13421
  return { initialized: false, repoRoot: ws.repoRoot };
@@ -13669,7 +13716,7 @@ async function doRunView(options, ctx) {
13669
13716
  }
13670
13717
  async function buildSingleDeps(ctx, cwd) {
13671
13718
  const repositoryRoot = await resolveRepositoryRootForView(cwd);
13672
- const paths = basouPaths23(repositoryRoot);
13719
+ const paths = basouPaths24(repositoryRoot);
13673
13720
  await assertWorkspaceInitialized15(paths.root);
13674
13721
  const entry = await buildWorkspaceEntry(repositoryRoot, ctx);
13675
13722
  return {
@@ -13703,14 +13750,14 @@ async function buildPortfolioDeps(workspaceFlags, ctx, cwd) {
13703
13750
  };
13704
13751
  }
13705
13752
  async function buildWorkspaceEntry(repoRoot, ctx, labelOverride) {
13706
- const paths = basouPaths23(repoRoot);
13753
+ const paths = basouPaths24(repoRoot);
13707
13754
  const importCtx = {
13708
13755
  cwd: repoRoot,
13709
13756
  ...ctx.claudeProjectsDir !== void 0 ? { claudeProjectsDir: ctx.claudeProjectsDir } : {},
13710
13757
  ...ctx.codexSessionsDir !== void 0 ? { codexSessionsDir: ctx.codexSessionsDir } : {}
13711
13758
  };
13712
13759
  try {
13713
- const manifest = await readManifest16(paths);
13760
+ const manifest = await readManifest17(paths);
13714
13761
  return {
13715
13762
  key: manifest.workspace.id,
13716
13763
  label: labelOverride ?? manifest.workspace.name,
@@ -13815,7 +13862,7 @@ async function assertWorkspaceInitialized15(basouRoot) {
13815
13862
  function readBuildStamp() {
13816
13863
  if (false) return void 0;
13817
13864
  try {
13818
- return JSON.parse('{"version":"0.48.1","commit":"bb3398c","committedAt":"2026-09-21T21:38:14+09:00"}');
13865
+ return JSON.parse('{"version":"0.49.0","commit":"6c4704a","committedAt":"2026-09-23T11:46:39+09:00"}');
13819
13866
  } catch {
13820
13867
  return void 0;
13821
13868
  }