@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 +147 -100
- package/dist/index.js.map +1 -1
- package/dist/program.js +147 -100
- package/dist/program.js.map +1 -1
- package/package.json +2 -2
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
5145
|
-
const manifest = await
|
|
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 =
|
|
5280
|
-
const manifest = await
|
|
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 =
|
|
5366
|
-
const manifest = await
|
|
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 =
|
|
5488
|
-
const manifest = await
|
|
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 =
|
|
5621
|
-
const manifest = await
|
|
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 =
|
|
5880
|
-
const manifest = await
|
|
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 =
|
|
6210
|
-
const manifest = await
|
|
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 =
|
|
6570
|
-
const manifest = await
|
|
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 =
|
|
7229
|
-
const manifest = await
|
|
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 =
|
|
7271
|
-
const manifest = await
|
|
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 =
|
|
7428
|
-
const manifest = await
|
|
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 =
|
|
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 =
|
|
7715
|
-
const manifest = await
|
|
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 =
|
|
7756
|
-
const manifest = await
|
|
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 =
|
|
7950
|
-
const manifest = await
|
|
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
|
|
8433
|
+
basouPaths as basouPaths13,
|
|
8387
8434
|
findErrorCode as findErrorCode9,
|
|
8388
|
-
readManifest as
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
9402
|
+
const paths = basouPaths17(repoRoot);
|
|
9356
9403
|
await assertBasouRootSafe12(paths.root);
|
|
9357
|
-
const manifest = await
|
|
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
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
10224
|
+
const paths = basouPaths18(repositoryRoot);
|
|
10178
10225
|
await assertWorkspaceInitialized11(paths.root);
|
|
10179
|
-
const manifest = await
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
10611
|
+
basouPaths as basouPaths20,
|
|
10565
10612
|
buildStatusSnapshot,
|
|
10566
10613
|
findErrorCode as findErrorCode14,
|
|
10567
|
-
readManifest as
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
11237
|
+
const paths = basouPaths21(repositoryRoot);
|
|
11191
11238
|
await assertWorkspaceInitialized13(paths.root);
|
|
11192
|
-
const manifest = await
|
|
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 =
|
|
11417
|
+
const paths = basouPaths21(repositoryRoot);
|
|
11371
11418
|
await assertWorkspaceInitialized13(paths.root);
|
|
11372
|
-
const manifest = await
|
|
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 =
|
|
11497
|
+
const paths = basouPaths21(repositoryRoot);
|
|
11451
11498
|
await assertWorkspaceInitialized13(paths.root);
|
|
11452
|
-
const manifest = await
|
|
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 =
|
|
11553
|
+
const paths = basouPaths21(repositoryRoot);
|
|
11507
11554
|
await assertWorkspaceInitialized13(paths.root);
|
|
11508
|
-
const manifest = await
|
|
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 =
|
|
11598
|
+
const paths = basouPaths21(repositoryRoot);
|
|
11552
11599
|
await assertWorkspaceInitialized13(paths.root);
|
|
11553
|
-
const manifest = await
|
|
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
|
|
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 =
|
|
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
|
|
11920
|
+
basouPaths as basouPaths24,
|
|
11874
11921
|
findErrorCode as findErrorCode18,
|
|
11875
|
-
readManifest as
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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.
|
|
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
|
}
|