@gitroll/tacitt-cli 0.5.0 → 0.6.1
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/README.md +4 -4
- package/bin/tacitt.cjs +1 -1
- package/dist/{agent-setup-BZbgLgHg.mjs → agent-setup-Dv_mQ38P.mjs} +1 -1
- package/dist/agent-setup-worker.mjs +4 -4
- package/dist/cli.mjs +6 -6
- package/dist/codex-title-worker.mjs +1 -1
- package/dist/configured-preview-worker.mjs +4 -4
- package/dist/configured-session-worker.mjs +4 -4
- package/dist/{heap-NDnGBXH6.mjs → heap-BR8WjR25.mjs} +4 -3
- package/dist/inspection-worker.mjs +3 -3
- package/dist/{job-BO0a67HQ.mjs → job-CYsjL4AT.mjs} +2 -2
- package/dist/{model-CmHypB0p.mjs → model-C1VzgKLi.mjs} +1 -1
- package/dist/operation-executor.mjs +2 -2
- package/dist/preview-worker.mjs +1 -1
- package/dist/{query-BZvNsP1u.mjs → query-BlisHJtP.mjs} +146 -50
- package/dist/{run-DvRM-NR8.mjs → run-hQ_W2p_Y.mjs} +2 -2
- package/dist/{src-C1SjCDx0.mjs → src--Ln5GHdz.mjs} +23 -6
- package/dist/{src-xidy0yF7.mjs → src-CGFwLUd6.mjs} +3 -3
- package/dist/{src-CQeUBG2Y.mjs → src-JoT3L94j.mjs} +2 -2
- package/dist/store-database-worker.mjs +1 -1
- package/dist/web/assets/index-C9LcK9ls.js +169 -0
- package/dist/web/assets/index-CYJBq1px.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/skills/tacitt/SKILL.md +5 -5
- package/skills/tacitt/references/b-method.md +1 -1
- package/skills/tacitt/references/bootstrap.md +1 -1
- package/skills/tacitt/references/classification.md +2 -2
- package/skills/tacitt/references/commands.md +15 -15
- package/skills/tacitt/references/journey.md +4 -4
- package/skills/tacitt/references/parallel-review.md +1 -1
- package/skills/tacitt/references/remote-workers.md +1 -1
- package/skills/tacitt/references/send.md +6 -6
- package/skills/tacitt/scripts/INDEX.md +36 -36
- package/skills/tacitt/scripts/journey-classification-metadata.mjs +1 -1
- package/skills/tacitt/scripts/journey-classification-tasks.mjs +1 -1
- package/skills/tacitt/scripts/journey-scan-timing.mjs +5 -4
- package/skills/tacitt/scripts/journey-state.d.mts +9 -0
- package/skills/tacitt/scripts/journey-state.mjs +19 -2
- package/skills/tacitt/scripts/journey.d.mts +4 -0
- package/skills/tacitt/scripts/journey.mjs +5 -3
- package/skills/tacitt/scripts/review.mjs +8 -8
- package/dist/web/assets/index-Bbck2aOB.css +0 -1
- package/dist/web/assets/index-D0j-mvf1.js +0 -69
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Tacitt CLI
|
|
2
2
|
|
|
3
3
|
Local session review and export through the public npm package. Requires Node.js
|
|
4
4
|
`>=24.19.0 <25`, npm and connectivity to the npm registry. Consumers do not need npm
|
|
@@ -38,7 +38,7 @@ Add `--agent codex` or `--agent claude` to select a client. Add `--scope project
|
|
|
38
38
|
from a workspace to install there instead. After installation, the terminal shows
|
|
39
39
|
the next step: enter `$tacitt` in a fresh Codex conversation or `/tacitt`
|
|
40
40
|
in Claude Code. The Skill prepares its exact matching CLI
|
|
41
|
-
through npx; no global
|
|
41
|
+
through npx; no global Tacitt CLI installation is necessary. Existing loaded tasks
|
|
42
42
|
keep that release; a later deliberate install affects new invocations. Retain the
|
|
43
43
|
recorded exact invocation when resuming a previous task after an agent restart.
|
|
44
44
|
|
|
@@ -58,7 +58,7 @@ Each direct category answer applies once. Certain/protected content stays hidden
|
|
|
58
58
|
delegated choices are attributed to the agent for the current run. Complete reading,
|
|
59
59
|
verified ZIP preview and Work review precede Send; a ready subset requires explicit scope
|
|
60
60
|
confirmation. Send uses official Identity, uploads the confirmed primary and
|
|
61
|
-
follows its actual assessment into the owner's current
|
|
61
|
+
follows its actual assessment into the owner's current Tacitt profile. Local export
|
|
62
62
|
remains available before upload. The standalone Manual journey uses its existing
|
|
63
63
|
static browser interface.
|
|
64
64
|
|
|
@@ -79,7 +79,7 @@ Package acquisition, network or version-verification failures stop setup before
|
|
|
79
79
|
dependent session work.
|
|
80
80
|
|
|
81
81
|
Bundled Web dependency notices are included in
|
|
82
|
-
`dist/web/THIRD_PARTY_LICENSES.md`.
|
|
82
|
+
`dist/web/THIRD_PARTY_LICENSES.md`. Tacitt CLI's own package license metadata remains
|
|
83
83
|
`UNLICENSED`.
|
|
84
84
|
|
|
85
85
|
Source, requirements and release evidence: [gitroll-dev/tacitt-cli](https://github.com/gitroll-dev/tacitt-cli).
|
package/bin/tacitt.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const [major, minor] = process.versions.node.split('.').map(Number)
|
|
4
4
|
if (major !== 24 || minor < 19) {
|
|
5
5
|
process.stderr.write(
|
|
6
|
-
'
|
|
6
|
+
'Tacitt CLI requires Node.js >=24.19.0 <25. Install a supported Node24 release and retry.\n',
|
|
7
7
|
)
|
|
8
8
|
process.exitCode = 1
|
|
9
9
|
} else {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { J as listAgentSetup } from "./src-
|
|
1
|
+
import { J as listAgentSetup } from "./src-JoT3L94j.mjs";
|
|
2
2
|
import { Dn as createStaticProcessor, dn as workspaceSchema, ln as sessionSchema } from "./locate-JYtFmKu-.mjs";
|
|
3
|
-
import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-
|
|
4
|
-
import { at as maximumAgentSetupSessions,
|
|
5
|
-
import "./agent-setup-
|
|
3
|
+
import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-CGFwLUd6.mjs";
|
|
4
|
+
import { at as maximumAgentSetupSessions, ui as effectiveTreatmentSchema } from "./src--Ln5GHdz.mjs";
|
|
5
|
+
import "./agent-setup-Dv_mQ38P.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { parentPort, workerData } from "node:worker_threads";
|
|
8
8
|
//#region apps/cli/src/agent-setup/worker.ts
|
package/dist/cli.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { _ as readStateDump, a as readAgentPresence, b as traceStartup, d as helpText, f as parseOptions, g as startupFailure, h as permissionDiagnostic, i as invoke, l as awaitingPassport, m as longCommands, n as readOperation, o as createRuntime, p as businessCommands, r as waitOperation, s as executorEventSchema, t as cancelOperation, u as createRenderActivity, v as createExecutionPort, y as startHost$1 } from "./query-
|
|
3
|
-
import { nt as makePrivateDirectory, rt as openPrivateFile } from "./src-
|
|
2
|
+
import { _ as readStateDump, a as readAgentPresence, b as traceStartup, d as helpText, f as parseOptions, g as startupFailure, h as permissionDiagnostic, i as invoke, l as awaitingPassport, m as longCommands, n as readOperation, o as createRuntime, p as businessCommands, r as waitOperation, s as executorEventSchema, t as cancelOperation, u as createRenderActivity, v as createExecutionPort, y as startHost$1 } from "./query-BlisHJtP.mjs";
|
|
3
|
+
import { nt as makePrivateDirectory, rt as openPrivateFile } from "./src-JoT3L94j.mjs";
|
|
4
4
|
import { $t as safeField, Qt as safeCode, Xt as ApplicationError } from "./locate-JYtFmKu-.mjs";
|
|
5
|
-
import { Zn as reviewTransportBytes, et as readWorkspaceOutcomes,
|
|
6
|
-
import { _t as isCoordinationBusy } from "./heap-
|
|
5
|
+
import { Zn as reviewTransportBytes, et as readWorkspaceOutcomes, oi as stateSchema, st as resolveFailureLocation } from "./src--Ln5GHdz.mjs";
|
|
6
|
+
import { _t as isCoordinationBusy } from "./heap-BR8WjR25.mjs";
|
|
7
7
|
import { constants, createReadStream, write } from "node:fs";
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
import { lstat, mkdir, mkdtemp, open, readFile, readdir, realpath, rename, rm, writeFile } from "node:fs/promises";
|
|
@@ -832,7 +832,7 @@ async function askAgentConfiguration(clients, scope) {
|
|
|
832
832
|
terminal: true
|
|
833
833
|
});
|
|
834
834
|
try {
|
|
835
|
-
process.stderr.write(`
|
|
835
|
+
process.stderr.write(`Tacitt CLI uses up to 16 analysis subagents for faster review.\nRaise the concurrent subagent limit to 16 for ${names}? Higher limits can increase concurrent usage.
|
|
836
836
|
` + (scope === "user" ? "This changes your client settings across projects.\n" : "This changes client settings for this project.\n") + "Save your work and fully restart the affected App or CLI afterward. We will not close it for you.\nAllow this change? [y/N] ");
|
|
837
837
|
return await new Promise((resolve) => {
|
|
838
838
|
terminal.once("line", (line) => resolve(/^y(?:es)?$/i.test(line.trim())));
|
|
@@ -930,7 +930,7 @@ function configurationFailure(agent, cause) {
|
|
|
930
930
|
function writeInstallNotice(result) {
|
|
931
931
|
const commands = result.installs.map(({ agent }) => agent === "codex" ? " Codex: $tacitt" : " Claude Code: /tacitt");
|
|
932
932
|
const message = [
|
|
933
|
-
"
|
|
933
|
+
"Tacitt CLI is installed.",
|
|
934
934
|
...result.agentConfiguration.flatMap(({ agent, status, count }) => {
|
|
935
935
|
const name = agent === "codex" ? "Codex" : "Claude Code";
|
|
936
936
|
if (status === "updated" || status === "unchanged") return [`${name}: concurrent subagent setting ${status === "updated" ? "saved" : "already set"} at ${count}.`, ...agent === "claude" ? ["Claude Code must be version 2.1.217 or newer for this setting. Update older versions first."] : []];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as errorCode } from "./model-
|
|
1
|
+
import { i as errorCode } from "./model-C1VzgKLi.mjs";
|
|
2
2
|
import { a as titleHintLimits, i as encodeTitleError, o as titleInputSchema, t as assertTitleHeap } from "./heap-1FYhGds4.mjs";
|
|
3
3
|
import { stat } from "node:fs/promises";
|
|
4
4
|
import { isAbsolute, join } from "node:path";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Y as createConfiguredPreviewStream } from "./src-
|
|
1
|
+
import { Y as createConfiguredPreviewStream } from "./src-JoT3L94j.mjs";
|
|
2
2
|
import { Dn as createStaticProcessor, dn as workspaceSchema, ln as sessionSchema } from "./locate-JYtFmKu-.mjs";
|
|
3
|
-
import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-
|
|
4
|
-
import {
|
|
5
|
-
import { a as classifyRecord, n as assertPreviewHeap, t as runPreview } from "./run-
|
|
3
|
+
import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-CGFwLUd6.mjs";
|
|
4
|
+
import { ui as effectiveTreatmentSchema } from "./src--Ln5GHdz.mjs";
|
|
5
|
+
import { a as classifyRecord, n as assertPreviewHeap, t as runPreview } from "./run-hQ_W2p_Y.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { parentPort, workerData } from "node:worker_threads";
|
|
8
8
|
//#region apps/cli/src/preview/run.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { et as safeError, h as captureConfiguredSessionJob, j as runConfiguredSessionJob, u as runConfiguredScanJob, z as gitSeedsProvider } from "./src-
|
|
1
|
+
import { et as safeError, h as captureConfiguredSessionJob, j as runConfiguredSessionJob, u as runConfiguredScanJob, z as gitSeedsProvider } from "./src-JoT3L94j.mjs";
|
|
2
2
|
import { Dn as createStaticProcessor, Qt as safeCode } from "./locate-JYtFmKu-.mjs";
|
|
3
|
-
import { l as createNativeAdapters } from "./src-
|
|
4
|
-
import "./src
|
|
5
|
-
import { d as runJourneyBaseJob, i as runJourneyOutputVerifyJob, n as runJourneyOutputJob, r as runJourneyOutputShardJob } from "./job-
|
|
3
|
+
import { l as createNativeAdapters } from "./src-CGFwLUd6.mjs";
|
|
4
|
+
import "./src--Ln5GHdz.mjs";
|
|
5
|
+
import { d as runJourneyBaseJob, i as runJourneyOutputVerifyJob, n as runJourneyOutputJob, r as runJourneyOutputShardJob } from "./job-CYsjL4AT.mjs";
|
|
6
6
|
import { parentPort } from "node:worker_threads";
|
|
7
7
|
//#region apps/cli/src/configured-session-worker.ts
|
|
8
8
|
const port = parentPort;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { S as readPrivateReviewPayload, at as windowsOwnerOnly, it as restrictToOwner, rt as openPrivateFile, tt as exclusiveLock, x as writePrivateReviewPayload } from "./src-
|
|
1
|
+
import { S as readPrivateReviewPayload, at as windowsOwnerOnly, it as restrictToOwner, rt as openPrivateFile, tt as exclusiveLock, x as writePrivateReviewPayload } from "./src-JoT3L94j.mjs";
|
|
2
2
|
import { At as journeyTermSchema, It as termTypeSchema, Mt as reviewTermsResultSchema, Xt as ApplicationError, _ as semanticFindingSchema, b as validateBReview, c as textDigest, d as reviewAlignmentAudit, dt as nativeJourneySchema, er as isStaticCategory, ft as journeyGuidanceSchema, g as validateReviewAlignment, gt as journeyWorkSuggestionSchema, ht as journeyDescribeSchema, i as reviewBatchSchema, it as journeyDigestSchema, jt as reviewTermsInputSchema, kt as privacyTermSchema, l as validateReview, m as reviewAlignmentSchema, nn as reviewFamilies, o as reviewDigest, ot as journeyIdSchema, r as reviewBatchChunks, s as reviewSubmitSchema, sn as fileIdentitySchema, tn as familySelected, tr as staticCategories, u as findingReferenceKey, v as bContextEvidence, wn as createDetectionSummary } from "./locate-JYtFmKu-.mjs";
|
|
3
|
-
import { $n as mergeBRepair, $t as journeyResourceSchema, At as validateAttemptAppend, B as validateInspectionBatch, Bt as newJourneyWork, Et as obsoleteJourney, Fn as confirmedHideGroupIds, Ft as applyClassificationProposal, G as validateInspectionFence, Gn as workPrivacyDecisions, Gr as
|
|
3
|
+
import { $n as mergeBRepair, $t as journeyResourceSchema, At as validateAttemptAppend, B as validateInspectionBatch, Bt as newJourneyWork, Et as obsoleteJourney, Fn as confirmedHideGroupIds, Ft as applyClassificationProposal, G as validateInspectionFence, Gn as workPrivacyDecisions, Gr as isSkippedWork, Gt as hideFinishSchema, Hn as syncTermGroups, Ht as journeyContextQuerySchema, In as confirmedHideKey, It as classificationCommitSchema, J as validateInspectionQuery, Jn as reviewCandidateResourceSchema, Jr as mergePrivacyTerms, Jt as journeySearchSaveSchema, K as validateInspectionHead, Kr as selectedWorks, Kt as hidePublishSchema, Mn as bMaskedHits, Nt as journeyBatchReadSchema, Pr as journeySendSchema, Pt as journeyReviewStorageQuerySchema, Qn as bReviewDigest, Qt as journeyResourceQuerySchema, Rn as confirmedHideTerms, Un as retireWorkDescription, Ur as isReadingComplete, Ut as journeyContextSchema, V as validateInspectionBatches, Vn as maskedHitsStale, W as validateInspectionClaim, Wn as workDecisionDigest, Wr as isSelectedWork, Wt as hideBeginSchema, X as validateDetectionSummary, Xn as reviewRepairResourceSchema, Xt as journeyPolicyRespondSchema, Y as validateInspectionContribution, Yt as searchScopeDigest, Z as inspectionInputs, Zt as projectPreparationProgress, _ as projectJourneyInventory, _n as journeyCommitResultSchema, _r as preparationSettlementSchema, an as reviewAttemptsResultSchema, ar as scanGitSeedsId, b as bReviewScope, c as reconstructBFields, cn as sessionReconciliationResourceSchema, en as journeyIsolateSchema, fn as sessionReviewQuerySchema, fr as journeyInventoryReadSchema, gn as sessionUsefulnessResourceSchema, gr as preparationBeginSchema, h as semanticGroupKey, hn as sessionUsefulnessInputSchema, ht as candidateSortAvailable, in as reviewAttemptsQuerySchema, ir as scanSessionResourceSchema, jt as journeyGuidance, kr as staticSessionId, kt as attemptBudgetCodePoints, l as reviseGroupMembership, lr as validateScanExclusion, m as hideScopeDigest, mn as sessionReviewStatusSchema, mr as journeyPreparationProgressSchema, nn as sortingApplySchema, nr as scanCanonicalResourceSchema, o as bRereadDigest, oi as stateSchema, pn as sessionReviewResourceSchema, pr as journeyInventorySchema, pt as manualUploadSchema, q as validateInspectionInputs, qr as withReadingProgress, qt as journeySearchResultSchema, rn as reviewAttemptResourceSchema, s as reconcileBSession, sn as sessionReconcileResultSchema, t as scanBatchContextDigest, tn as journeyPlaceSchema, tr as scanAliasResourceSchema, u as resolveGroupSplit, un as sessionRereadResourceSchema, ut as manualUploadBindingSchema, v as preparationScope, vn as journeyCommitSchema, vr as preparationStartSchema, wn as settleConfirmedHides, wt as settleCorrections, xn as confirmedHideDeltaSchema, xr as applyCardAnswers, yn as journeyEventSchema, yr as validatePreparationFacts, zn as dictionaryHides } from "./src--Ln5GHdz.mjs";
|
|
4
4
|
import { constants } from "node:fs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { copyFile, link, lstat, mkdir, mkdtemp, open, readFile, realpath, rm, unlink } from "node:fs/promises";
|
|
@@ -4820,12 +4820,13 @@ function commitJourneySend(db, input) {
|
|
|
4820
4820
|
...input.state,
|
|
4821
4821
|
revision
|
|
4822
4822
|
});
|
|
4823
|
+
const skipped = (workId) => current.journey.works.some((work) => work.id === workId && isSkippedWork(work));
|
|
4823
4824
|
const finished = send.status === "completed" && send.omitted.every((work) => [
|
|
4824
4825
|
"drop",
|
|
4825
4826
|
"empty",
|
|
4826
4827
|
"sent",
|
|
4827
4828
|
"skipped"
|
|
4828
|
-
].includes(work.reason));
|
|
4829
|
+
].includes(work.reason) || work.reason === "not-ready" && skipped(work.workId));
|
|
4829
4830
|
const journey = {
|
|
4830
4831
|
...current.journey,
|
|
4831
4832
|
phase: current.journey.phase === "paused" || prior?.status === "completed" ? current.journey.phase : finished ? "completed" : [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { X as createInspectionProcessor } from "./src-
|
|
1
|
+
import { X as createInspectionProcessor } from "./src-JoT3L94j.mjs";
|
|
2
2
|
import { Dn as createStaticProcessor } from "./locate-JYtFmKu-.mjs";
|
|
3
|
-
import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-
|
|
4
|
-
import { H as validateInspectionRequest } from "./src
|
|
3
|
+
import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-CGFwLUd6.mjs";
|
|
4
|
+
import { H as validateInspectionRequest } from "./src--Ln5GHdz.mjs";
|
|
5
5
|
import "./messages-D3m3bhva.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { parentPort, workerData } from "node:worker_threads";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { A as renderJobDigest, D as prepareCollectionProduction, V as writeLogicalJourneyOutput, W as readConfiguredOutputInfo, at as windowsOwnerOnly, b as writeLogicalJourneyBase, d as verifyOutputShard, f as writeOutputShard, nt as makePrivateDirectory, w as readConfiguredSearchFields, z as gitSeedsProvider } from "./src-
|
|
1
|
+
import { A as renderJobDigest, D as prepareCollectionProduction, V as writeLogicalJourneyOutput, W as readConfiguredOutputInfo, at as windowsOwnerOnly, b as writeLogicalJourneyBase, d as verifyOutputShard, f as writeOutputShard, nt as makePrivateDirectory, w as readConfiguredSearchFields, z as gitSeedsProvider } from "./src-JoT3L94j.mjs";
|
|
2
2
|
import { Xt as ApplicationError, nn as reviewFamilies, zt as filterInventoryByPeriod } from "./locate-JYtFmKu-.mjs";
|
|
3
|
-
import { Ar as staticSessionResourceSchema, Cn as renderedHideValue, Dn as hideKeyId, En as addHideIndexTokens, di as
|
|
3
|
+
import { Ar as staticSessionResourceSchema, Cn as renderedHideValue, Dn as hideKeyId, En as addHideIndexTokens, di as defaultScopedSettings, fi as freezeConfiguration, kn as packHideIndex, pi as selectFrozenConfiguration } from "./src--Ln5GHdz.mjs";
|
|
4
4
|
import { constants } from "node:fs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { copyFile, link, lstat, mkdir, mkdtemp, open, readFile, realpath, rename, rm, unlink, writeFile } from "node:fs/promises";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as executorRequestSchema, f as parseOptions, g as startupFailure, i as invoke, m as longCommands, n as readOperation, o as createRuntime, r as waitOperation } from "./query-
|
|
1
|
+
import { c as executorRequestSchema, f as parseOptions, g as startupFailure, i as invoke, m as longCommands, n as readOperation, o as createRuntime, r as waitOperation } from "./query-BlisHJtP.mjs";
|
|
2
2
|
import { $t as safeField, Qt as safeCode, Xt as ApplicationError } from "./locate-JYtFmKu-.mjs";
|
|
3
|
-
import "./src
|
|
3
|
+
import "./src--Ln5GHdz.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { setTimeout } from "node:timers/promises";
|
|
6
6
|
//#region apps/cli/src/operation/executor.ts
|
package/dist/preview-worker.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as assertPreviewHeap, o as previewInputSchema, t as runPreview } from "./run-
|
|
1
|
+
import { n as assertPreviewHeap, o as previewInputSchema, t as runPreview } from "./run-hQ_W2p_Y.mjs";
|
|
2
2
|
import { parentPort, workerData } from "node:worker_threads";
|
|
3
3
|
//#region packages/harnesses/src/preview/worker/index.ts
|
|
4
4
|
function notify(message) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { $ as createCleanup, B as parallelismLimits, C as readOriginalSearchFields, E as checkReusableBundle, F as SessionWorkerError, G as processJourneyMetadataFields, H as privateJourneyDirectory, I as sessionWorkerFailure, K as staticMaskCategory, L as privateCollectionDirectory, M as readCollectionIndex, N as parseCollectionWorkspaceSummary, O as captureLogicalJourneySources, P as createSharedSessionPool, Q as removeNamedTemporarySpools, R as defaultParallelism, T as createCollectionArtifacts, U as readLogicalJourneyFinalMasks, W as readConfiguredOutputInfo, Z as createTemporary, _ as processJourneyMetadata, a as scanReviewFields, at as windowsOwnerOnly, c as readSessionScanRecords, g as readCapturedOriginalRows, i as buildWorkScanBatches, it as restrictToOwner, j as runConfiguredSessionJob, k as capturedJourneyScope, l as scanPreparedSession, m as openConfiguredUpload, n as verifyPreparedSessionSources, nt as makePrivateDirectory, o as createWorkPieces, ot as isWindowsAclFailure, p as configuredSessionUploads, q as readWorkspacePair, r as prepareSessionScans, rt as openPrivateFile, s as readSessionScanFields, st as windowsAclCodes, t as preparedScanConfiguration, v as readStaticSessionMasks, w as readConfiguredSearchFields, y as staticSessionJobs, z as gitSeedsProvider } from "./src-
|
|
1
|
+
import { $ as createCleanup, B as parallelismLimits, C as readOriginalSearchFields, E as checkReusableBundle, F as SessionWorkerError, G as processJourneyMetadataFields, H as privateJourneyDirectory, I as sessionWorkerFailure, K as staticMaskCategory, L as privateCollectionDirectory, M as readCollectionIndex, N as parseCollectionWorkspaceSummary, O as captureLogicalJourneySources, P as createSharedSessionPool, Q as removeNamedTemporarySpools, R as defaultParallelism, T as createCollectionArtifacts, U as readLogicalJourneyFinalMasks, W as readConfiguredOutputInfo, Z as createTemporary, _ as processJourneyMetadata, a as scanReviewFields, at as windowsOwnerOnly, c as readSessionScanRecords, g as readCapturedOriginalRows, i as buildWorkScanBatches, it as restrictToOwner, j as runConfiguredSessionJob, k as capturedJourneyScope, l as scanPreparedSession, m as openConfiguredUpload, n as verifyPreparedSessionSources, nt as makePrivateDirectory, o as createWorkPieces, ot as isWindowsAclFailure, p as configuredSessionUploads, q as readWorkspacePair, r as prepareSessionScans, rt as openPrivateFile, s as readSessionScanFields, st as windowsAclCodes, t as preparedScanConfiguration, v as readStaticSessionMasks, w as readConfiguredSearchFields, y as staticSessionJobs, z as gitSeedsProvider } from "./src-JoT3L94j.mjs";
|
|
2
2
|
import { $t as safeField, Bt as sessionPeriodSchema, Dn as createStaticProcessor, F as bClassificationKey, Fn as entityDictionaryVersion, Ft as termTypeInfo, Gt as ownerProfileSchema, H as codePointLength, Ht as journeyProfileAddressActionSchema, K as utf16Offset, Kt as passportAddressSchema, N as bUnitFragments, Ot as privacyTermKey, Qt as safeCode, Sn as currentDetectorVersion, T as bLiteralTerms, Un as frameRecords, Ut as journeyProfileLinksActionSchema, V as bDigest, Wt as mergeOwnerProfile, Xt as ApplicationError, Zt as UnfinishedJourneyError, an as observeSource, ar as admitCustomTerm, b as validateBReview, c as textDigest, h as reviewFindingsDigest, ht as journeyDescribeSchema, ir as createEntityMatcher, jt as reviewTermsInputSchema, l as validateReview, n as compileBFindings, nn as reviewFamilies, or as admitGitName, qt as profileHasChoices, r as reviewBatchChunks, s as reviewSubmitSchema, t as locateTerms, tn as familySelected, z as bAnchorKey, zt as filterInventoryByPeriod } from "./locate-JYtFmKu-.mjs";
|
|
3
|
-
import { a as mainTextChunks, c as previewInWorker, i as nearestSortingRepository, l as createNativeAdapters, n as createProjectEvidenceCollector, o as mainTextFields, r as sortingRepositoryId, s as textChunks, t as createHarnesses, u as createGitNameSeedProvider } from "./src-
|
|
4
|
-
import { $ as settingsQuerySchema, $r as
|
|
5
|
-
import { $ as checkVersion, A as resourceSelectionQuerySchema, B as termReuseQuerySchema, C as loadAcceptedReview, D as aggregateUsefulness, E as loadPrivateResource, F as validateUnitCandidate, G as requireActiveBatch, H as batchHeader, I as reuseQuerySchema, J as validateDatabase, K as initializeAndClaim, L as batchQuery, M as evaluateUnitEvidence, N as sameCandidateRequest, O as sessionUsefulnessRecommendation, P as validateCandidateAttempt, Q as validateState, R as isPrivateResourceKind, S as validateSessionBindings, T as loadBatch, U as createJourneyPayloadFiles, V as privateReviewHash, W as validateBatchBody, X as readBundleDirectory, Y as withDatabase, Z as readStoredState, _ as loadReconciliation, _t as isCoordinationBusy, a as decodeError, at as hasResetMarker, b as validatePreparationSelection, c as dropsAnchor, ct as privatePath, d as parseDelivery, dt as stateDirectory, et as schemaVersion, f as validateCandidate, ft as syncDirectory, g as loadPreparedBodies, gt as errorCode$1, h as loadPreparation, ht as StoreError, i as createExecutor, it as finishReset, j as inspectionQuerySchema$1, k as sessionQuery, l as replySchema, lt as readResetMarker, m as loadStatus, mt as withFileCheckTimings, n as releaseInheritedHeapFlags, nt as createDatabaseFile, o as ProtocolError, ot as inspectStateFiles, p as classificationJourneyCommit, pt as withStateSnapshot, q as ownership, r as storeHeapLimits, rt as databaseName, s as allowedReplies, st as present, tt as beginReset, u as operations, ut as recheckPrivatePath, v as loadRereadBodies, vt as isSqliteCorruption, w as loadAuthenticatedReview, x as validateSessionReconciliation, y as loadSessionBodies, z as privateResourceHeader } from "./heap-
|
|
6
|
-
import { C as journeyDirectory, S as saveRemoteState, _ as staticBaseProduction, a as writeJourneyOutput, b as isRemoteImport, c as mergeHideIndexTokens, f as writeJourneyBase, g as staticBaseInputs, h as staticSessions, l as packRenderHideIndex, m as saveStaticSession, o as createHideIndexTokens, p as readStaticResult, s as hideIndexTexts, t as journeyOutputJob, u as journeyBaseJob, v as prepareSourcePlan, w as collectRemoteWorkers, x as readRemoteState, y as workApproval } from "./job-
|
|
7
|
-
import { t as createAgentSetupPort } from "./agent-setup-
|
|
3
|
+
import { a as mainTextChunks, c as previewInWorker, i as nearestSortingRepository, l as createNativeAdapters, n as createProjectEvidenceCollector, o as mainTextFields, r as sortingRepositoryId, s as textChunks, t as createHarnesses, u as createGitNameSeedProvider } from "./src-CGFwLUd6.mjs";
|
|
4
|
+
import { $ as settingsQuerySchema, $r as journeyRenderSchema, A as deviceProfileScopeSchema, B as validateInspectionBatch, Bn as journeyConfirmedHides, Br as hasCompleteWorkDescription, Bt as newJourneyWork, C as rebindReviewSubmit, Cr as privacyDecisionDigest, Ct as sendStartSchema, D as createAccount, Dr as hasCurrentStaticReview, E as staticallyHiddenFindings, Er as nativeRespondSchema, Et as obsoleteJourney, Fn as confirmedHideGroupIds, Fr as sendArtifactSchema, Hr as isIncludedWork, Ht as journeyContextQuerySchema, Ir as sendReceiptSchema, Jn as reviewCandidateResourceSchema, Kn as workCorrectionBinding, L as createApplication, Ln as confirmedHideKinds, Lr as sendReplaceResultSchema, Lt as classificationPartition, M as readAccountAvatarUrl, Mr as agentSourceSchema, Mt as applyClassification, N as storedCredentialSchema, Nn as bTermMatcher, Nr as agentSourcesSchema, O as accountProfileSchema, Or as staticReviewDigest, Pr as journeySendSchema, Pt as journeyReviewStorageQuerySchema, Q as settingsBatchSchema, Qn as bReviewDigest, Qr as journeyRenderInputSchema, Qt as journeyResourceQuerySchema, R as inspectionCancelSchema, Rr as sendResolutionSchema, Rt as classificationWorks, S as rebindReviewOverlay, Sn as readConfirmedHideChange, Sr as assertJourneyPrivacyReady, St as sendPrepareSchema, T as guardedFindingText, Tn as termHideAdditions, Tr as nativeGetSchema, Tt as currentJourneyAdapters, U as inspectionQuerySchema, Un as retireWorkDescription, Ur as isReadingComplete, Vn as maskedHitsStale, Vr as isClassifying, Vt as reviewCompileSchema, Wn as workDecisionDigest, Wr as isSelectedWork, Xn as reviewRepairResourceSchema, Xr as journeyFindingsSchema, Xt as journeyPolicyRespondSchema, Yn as reviewRepairInputSchema, Yr as journeyFindingImpactSchema, Yt as searchScopeDigest, Zr as journeyPreviewSchema, _t as maximumTermsFileBytes, a as bCrossSegmentReviewSchema, ai as producerVersion, ar as scanGitSeedsId, b as bReviewScope, bn as confirmedHideAdditions, br as journeyClassificationSessionsSchema, bt as sendActionSchema, c as reconstructBFields, ci as recommendParallelism, cr as scanExclusionResourceSchema, ct as validateFailureLocation, d as selectedValueMembers, dn as sessionReviewInputSchema, dr as journeyInventoryQuerySchema, dt as manualUploadChoiceSchema, ei as commandSchema, er as planBRepair, et as readWorkspaceOutcomes, f as splitSelectorValues, fn as sessionReviewQuerySchema, ft as manualUploadPrepareSchema, g as changeJourney, gt as emptyTermsRevision, hn as sessionUsefulnessInputSchema, hr as emptyPreparationFacts, i as validateBCrossSegmentReview, ir as scanSessionResourceSchema, j as profileUrlMatchesIdentity, k as deviceAuthorizationSchema, ln as sessionRereadInputSchema, lt as manualUploadActionSchema, m as hideScopeDigest, mt as manualUploadStartSchema, n as scanBatchEquivalenceDigest, ni as selectionBatchSchema, nt as appendSensitiveTerms, o as bRereadDigest, oi as stateSchema, on as sessionReconcileInputSchema, or as scanGitSeedsResource, ot as artifactFailureDetailSchema, p as activeJourneyTerms, pt as manualUploadSchema, qn as reviewCandidateInputSchema, qr as withReadingProgress, qt as journeySearchResultSchema, r as locateTermEvidence, ri as selectionSchema, rn as reviewAttemptResourceSchema, rr as scanPreparationDigest, s as reconcileBSession, sr as verifiedScanGitSeeds, st as resolveFailureLocation, t as scanBatchContextDigest, ti as packageCommandSchema, tn as journeyPlaceSchema, vt as normalizeSensitiveTerms, w as reviewBatchReuse, wr as nativeEventsSchema, x as rebindReviewAlignment, xt as sendChoiceSchema, y as isGenericPublicTerm, yt as replaceSensitiveTermsSchema, z as inspectionStartSchema, zr as sendSettingsSchema, zt as retireScanGeneration } from "./src--Ln5GHdz.mjs";
|
|
5
|
+
import { $ as checkVersion, A as resourceSelectionQuerySchema, B as termReuseQuerySchema, C as loadAcceptedReview, D as aggregateUsefulness, E as loadPrivateResource, F as validateUnitCandidate, G as requireActiveBatch, H as batchHeader, I as reuseQuerySchema, J as validateDatabase, K as initializeAndClaim, L as batchQuery, M as evaluateUnitEvidence, N as sameCandidateRequest, O as sessionUsefulnessRecommendation, P as validateCandidateAttempt, Q as validateState, R as isPrivateResourceKind, S as validateSessionBindings, T as loadBatch, U as createJourneyPayloadFiles, V as privateReviewHash, W as validateBatchBody, X as readBundleDirectory, Y as withDatabase, Z as readStoredState, _ as loadReconciliation, _t as isCoordinationBusy, a as decodeError, at as hasResetMarker, b as validatePreparationSelection, c as dropsAnchor, ct as privatePath, d as parseDelivery, dt as stateDirectory, et as schemaVersion, f as validateCandidate, ft as syncDirectory, g as loadPreparedBodies, gt as errorCode$1, h as loadPreparation, ht as StoreError, i as createExecutor, it as finishReset, j as inspectionQuerySchema$1, k as sessionQuery, l as replySchema, lt as readResetMarker, m as loadStatus, mt as withFileCheckTimings, n as releaseInheritedHeapFlags, nt as createDatabaseFile, o as ProtocolError, ot as inspectStateFiles, p as classificationJourneyCommit, pt as withStateSnapshot, q as ownership, r as storeHeapLimits, rt as databaseName, s as allowedReplies, st as present, tt as beginReset, u as operations, ut as recheckPrivatePath, v as loadRereadBodies, vt as isSqliteCorruption, w as loadAuthenticatedReview, x as validateSessionReconciliation, y as loadSessionBodies, z as privateResourceHeader } from "./heap-BR8WjR25.mjs";
|
|
6
|
+
import { C as journeyDirectory, S as saveRemoteState, _ as staticBaseProduction, a as writeJourneyOutput, b as isRemoteImport, c as mergeHideIndexTokens, f as writeJourneyBase, g as staticBaseInputs, h as staticSessions, l as packRenderHideIndex, m as saveStaticSession, o as createHideIndexTokens, p as readStaticResult, s as hideIndexTexts, t as journeyOutputJob, u as journeyBaseJob, v as prepareSourcePlan, w as collectRemoteWorkers, x as readRemoteState, y as workApproval } from "./job-CYsjL4AT.mjs";
|
|
7
|
+
import { t as createAgentSetupPort } from "./agent-setup-Dv_mQ38P.mjs";
|
|
8
8
|
import { t as workerMessageSchema } from "./messages-D3m3bhva.mjs";
|
|
9
9
|
import { constants, write } from "node:fs";
|
|
10
10
|
import { z } from "zod";
|
|
@@ -1231,7 +1231,7 @@ function closeConnection(root, db, onFatal, primary) {
|
|
|
1231
1231
|
//#region packages/local-host/src/coordination/files.ts
|
|
1232
1232
|
const coordinationApplicationId = 1397769036;
|
|
1233
1233
|
function invalid() {
|
|
1234
|
-
throw new StoreError("STATE_LAYOUT_INVALID", "Coordination files are incomplete or changed.
|
|
1234
|
+
throw new StoreError("STATE_LAYOUT_INVALID", "Coordination files are incomplete or changed. Close every running Tacitt CLI and use a fresh private --state-dir. Reset does not replace coordination files.");
|
|
1235
1235
|
}
|
|
1236
1236
|
function initialize(root, path, onFatal) {
|
|
1237
1237
|
const db = new DatabaseSync(path, { timeout: 0 });
|
|
@@ -1348,7 +1348,7 @@ async function tryAcquireCoordination(stateDir, domain, onFatal, onPhase) {
|
|
|
1348
1348
|
observe("coordination.begin");
|
|
1349
1349
|
db.exec("BEGIN IMMEDIATE");
|
|
1350
1350
|
observe("coordination.header");
|
|
1351
|
-
if (db.prepare("PRAGMA application_id").get()?.["application_id"] !== 1397769036 || db.prepare("PRAGMA journal_mode").get()?.["journal_mode"] !== "delete" || db.prepare("SELECT name FROM sqlite_schema").all().length !== 0) throw new StoreError("STATE_LAYOUT_INVALID", "The coordination database is not a recognized header-only file.
|
|
1351
|
+
if (db.prepare("PRAGMA application_id").get()?.["application_id"] !== 1397769036 || db.prepare("PRAGMA journal_mode").get()?.["journal_mode"] !== "delete" || db.prepare("SELECT name FROM sqlite_schema").all().length !== 0) throw new StoreError("STATE_LAYOUT_INVALID", "The coordination database is not a recognized header-only file. Close every running Tacitt CLI and use a fresh private --state-dir.");
|
|
1352
1352
|
} catch (error) {
|
|
1353
1353
|
observe("coordination.close");
|
|
1354
1354
|
closeConnection(file.root, db, onFatal, { error });
|
|
@@ -5440,8 +5440,8 @@ const longCommands = /* @__PURE__ */ new Set([
|
|
|
5440
5440
|
//#endregion
|
|
5441
5441
|
//#region apps/cli/src/account/defaults.ts
|
|
5442
5442
|
/**
|
|
5443
|
-
* Where the shipped CLI signs in. `--identity-url`, `--identity-client-id`, `--
|
|
5444
|
-
* and the matching `SESS_PILOT_*` variables override these for development targets.
|
|
5443
|
+
* Where the shipped CLI signs in. `--identity-url`, `--identity-client-id`, `--profile-api-url`
|
|
5444
|
+
* (or the older `--passport-api-url`) and the matching `SESS_PILOT_*` variables override these for development targets.
|
|
5445
5445
|
*
|
|
5446
5446
|
* The client ID is the public value Identity issues when the `sess-pilot` App declaration is
|
|
5447
5447
|
* applied to the production target (`APP_SESS_PILOT_OIDC_CLI_CLIENT_ID`). Release builds inject
|
|
@@ -5512,6 +5512,7 @@ function parseOptions(args, source = sourceCheckout) {
|
|
|
5512
5512
|
until: { type: "string" },
|
|
5513
5513
|
"identity-url": { type: "string" },
|
|
5514
5514
|
"identity-client-id": { type: "string" },
|
|
5515
|
+
"profile-api-url": { type: "string" },
|
|
5515
5516
|
"passport-api-url": { type: "string" },
|
|
5516
5517
|
help: {
|
|
5517
5518
|
type: "boolean",
|
|
@@ -5571,7 +5572,7 @@ function parseOptions(args, source = sourceCheckout) {
|
|
|
5571
5572
|
sessionPeriod: period.data,
|
|
5572
5573
|
identityUrl: readOrigin(parsed.values["identity-url"] ?? process.env["SESS_PILOT_IDENTITY_URL"] ?? accountDefaults.identityUrl),
|
|
5573
5574
|
identityClientId: identityClientId === "" ? null : identityClientId,
|
|
5574
|
-
passportApiUrl: readOrigin(parsed.values["passport-api-url"] ?? process.env["SESS_PILOT_PASSPORT_API_URL"] ?? accountDefaults.passportApiUrl),
|
|
5575
|
+
passportApiUrl: readOrigin(parsed.values["profile-api-url"] ?? parsed.values["passport-api-url"] ?? process.env["SESS_PILOT_PROFILE_API_URL"] ?? process.env["SESS_PILOT_PASSPORT_API_URL"] ?? accountDefaults.passportApiUrl),
|
|
5575
5576
|
stateDir: resolve(parsed.values["state-dir"] ?? defaultState),
|
|
5576
5577
|
bundleDir: parsed.values["bundle-dir"] === void 0 ? void 0 : resolve(parsed.values["bundle-dir"]),
|
|
5577
5578
|
claudeHome: resolve(parsed.values["claude-home"] ?? process.env["CLAUDE_CONFIG_DIR"] ?? join(home, ".claude")),
|
|
@@ -5607,11 +5608,11 @@ Configured previews use current cleanup/redaction settings, including metadata.
|
|
|
5607
5608
|
Original-mode previews use a separate basic guard; sampling never limits export.
|
|
5608
5609
|
Workspace ZIPs and collection indexes use the saved bundle library directory.
|
|
5609
5610
|
--bundle-dir overrides that location for this CLI run only.
|
|
5610
|
-
Native Skill Send uploads only the confirmed primary artifacts to the configured
|
|
5611
|
+
Native Skill Send uploads only the confirmed primary artifacts to the configured Tacitt profile API.
|
|
5611
5612
|
status prints safe workspace outcomes from the latest saved packaging operation.
|
|
5612
5613
|
Private packaging error details stay in <state-dir>/diagnostics/ (up to 4 MiB).
|
|
5613
5614
|
Sign in from the Web UI to link this tool to your GitRoll Identity account; the CLI contacts
|
|
5614
|
-
only the Identity and
|
|
5615
|
+
only the Identity and profile API origins below, only when you ask, and keeps the issued
|
|
5615
5616
|
token in <state-dir>/account/ (owner-only).
|
|
5616
5617
|
|
|
5617
5618
|
Options:
|
|
@@ -5632,7 +5633,7 @@ Options:
|
|
|
5632
5633
|
(DATE: YYYY-MM-DD local day, inclusive, or an ISO timestamp)
|
|
5633
5634
|
--identity-url URL Identity origin for sign-in (default: ${accountDefaults.identityUrl})
|
|
5634
5635
|
--identity-client-id ID Public device client ID registered for this tool
|
|
5635
|
-
--
|
|
5636
|
+
--profile-api-url URL Profile API origin the token is checked against
|
|
5636
5637
|
--output PATH Write a sensitive state dump to a new private file
|
|
5637
5638
|
--dev Serve the repository UI through Vite (source checkout only)
|
|
5638
5639
|
--help Show this help
|
|
@@ -7737,26 +7738,61 @@ function createJourneyPreparation(options) {
|
|
|
7737
7738
|
const frozen = state;
|
|
7738
7739
|
const blockWork = (work, error) => changeJourney(storage, journeyId, "snapshot", (before) => {
|
|
7739
7740
|
if (before.phase === "paused") throw new ApplicationError("OPERATION_CANCELED");
|
|
7741
|
+
if (before.phase === "sending" || before.phase === "completed") return before;
|
|
7740
7742
|
return withReadingProgress({
|
|
7741
7743
|
...before,
|
|
7742
|
-
works: before.works.map((item) => item.id === work.id && item.inputRevision === work.inputRevision ? {
|
|
7744
|
+
works: before.works.map((item) => item.id === work.id && item.inputRevision === work.inputRevision && !item.blockedCodes.includes("PRIVACY_CHANGE_PENDING") ? {
|
|
7743
7745
|
...item,
|
|
7744
7746
|
status: "blocked",
|
|
7745
7747
|
blockedCodes: blockedCodes(error, safeCode(error))
|
|
7746
7748
|
} : item)
|
|
7747
7749
|
});
|
|
7748
7750
|
}, 100);
|
|
7749
|
-
|
|
7750
|
-
|
|
7751
|
-
let
|
|
7752
|
-
const
|
|
7753
|
-
|
|
7754
|
-
|
|
7755
|
-
|
|
7756
|
-
|
|
7757
|
-
|
|
7758
|
-
|
|
7751
|
+
const retryLimit = options.retryLimit ?? workRetryDelaysMs.length;
|
|
7752
|
+
const generation = (work) => `${work.id}:${work.inputRevision}`;
|
|
7753
|
+
let serialAdmission = Promise.resolve();
|
|
7754
|
+
const acquireRead = async () => {
|
|
7755
|
+
if (run.pool) return () => {};
|
|
7756
|
+
const previous = serialAdmission;
|
|
7757
|
+
const released = Promise.withResolvers();
|
|
7758
|
+
serialAdmission = released.promise;
|
|
7759
|
+
await previous;
|
|
7760
|
+
return () => released.resolve();
|
|
7761
|
+
};
|
|
7762
|
+
const releaseAdmission = /* @__PURE__ */ new Map();
|
|
7763
|
+
const retryWork = async (work, error, attempt) => {
|
|
7764
|
+
if (blockedCodes(error, safeCode(error)).includes("PRIVACY_CHANGE_PENDING") || work.blockedCodes.includes("PRIVACY_CHANGE_PENDING")) return false;
|
|
7765
|
+
const delay = workRetryDelaysMs[attempt];
|
|
7766
|
+
if (attempt >= retryLimit || delay === void 0) return false;
|
|
7767
|
+
const blocked = await blockWork(work, error);
|
|
7768
|
+
const target = blocked.works.find((item) => item.id === work.id);
|
|
7769
|
+
if (blocked.phase === "sending" || blocked.phase === "completed" || target?.blockedCodes.includes("PRIVACY_CHANGE_PENDING")) return false;
|
|
7770
|
+
releaseAdmission.get(work.id)?.();
|
|
7771
|
+
await (options.retryDelay ?? waitForWorkRetry)(delay, abort.signal);
|
|
7772
|
+
abort.signal.throwIfAborted();
|
|
7773
|
+
let resumed = false;
|
|
7774
|
+
await changeJourney(storage, journeyId, "snapshot", (before) => {
|
|
7775
|
+
resumed = false;
|
|
7776
|
+
const target = before.works.find((item) => item.id === work.id);
|
|
7777
|
+
if (before.phase === "sending" || before.phase === "completed" || before.phase === "paused" || !target || !isSelectedWork(target) || target.inputRevision !== work.inputRevision || target.status !== "blocked" || target.blockedCodes.includes("PRIVACY_CHANGE_PENDING")) return before;
|
|
7778
|
+
resumed = !before.pendingHideId;
|
|
7779
|
+
return withReadingProgress({
|
|
7780
|
+
...before,
|
|
7781
|
+
privacy: {
|
|
7782
|
+
...before.privacy,
|
|
7783
|
+
packageApproval: null
|
|
7784
|
+
},
|
|
7785
|
+
works: before.works.map((item) => item.id === work.id ? {
|
|
7786
|
+
...item,
|
|
7787
|
+
status: resumed ? work.status : "pending",
|
|
7788
|
+
blockedCodes: []
|
|
7789
|
+
} : item)
|
|
7790
|
+
});
|
|
7791
|
+
}, 100);
|
|
7792
|
+
return resumed;
|
|
7759
7793
|
};
|
|
7794
|
+
const readRetries = /* @__PURE__ */ new Map();
|
|
7795
|
+
const staticRetries = /* @__PURE__ */ new Map();
|
|
7760
7796
|
/** A failed isolation leaves the Work blocked as before; cancellation and contention escape. */
|
|
7761
7797
|
const isolateRoots = async (work, error) => {
|
|
7762
7798
|
try {
|
|
@@ -7778,19 +7814,19 @@ function createJourneyPreparation(options) {
|
|
|
7778
7814
|
/** Scan generations this run prepared, including those its own isolation started. */
|
|
7779
7815
|
const prepared = /* @__PURE__ */ new Set();
|
|
7780
7816
|
/** True when failing roots left the Work, which is then prepared again (ADR 0188). */
|
|
7781
|
-
const
|
|
7817
|
+
const prepareWorkAttempt = async (planned, onSubmitted, releaseRead) => {
|
|
7782
7818
|
abort.signal.throwIfAborted();
|
|
7783
7819
|
const latest = await storage.current(journeyId) ?? frozen;
|
|
7784
7820
|
abort.signal.throwIfAborted();
|
|
7785
7821
|
if (latest.phase === "paused") throw new ApplicationError("OPERATION_CANCELED");
|
|
7786
7822
|
let work = latest.works.find((item) => item.id === planned.id);
|
|
7787
|
-
if (!work || !isSelectedWork(work)) return false;
|
|
7823
|
+
if (!work || !isSelectedWork(work) || latest.phase === "sending" || latest.phase === "completed") return false;
|
|
7788
7824
|
if (![
|
|
7789
7825
|
"pending",
|
|
7790
7826
|
"reading",
|
|
7791
7827
|
"review"
|
|
7792
7828
|
].includes(work.status)) return false;
|
|
7793
|
-
prepared.add(
|
|
7829
|
+
prepared.add(generation(work));
|
|
7794
7830
|
await prepareClassificationMetadata(storage, latest, work, options.processing, abort.signal);
|
|
7795
7831
|
let failures = collectPreparationFailures(plan.approval.inventory, work.rootSessionIds, {
|
|
7796
7832
|
journeyId,
|
|
@@ -7824,11 +7860,36 @@ function createJourneyPreparation(options) {
|
|
|
7824
7860
|
if (await droppedMidScan(planned.id)) return false;
|
|
7825
7861
|
throw error;
|
|
7826
7862
|
}
|
|
7827
|
-
|
|
7863
|
+
onSubmitted();
|
|
7864
|
+
releaseRead();
|
|
7865
|
+
const attempt = work ? readRetries.get(generation(work)) ?? 0 : 0;
|
|
7866
|
+
if (work && await retryWork(work, error, attempt)) {
|
|
7867
|
+
readRetries.set(generation(work), attempt + 1);
|
|
7868
|
+
return prepareWorkOnce(planned, onSubmitted);
|
|
7869
|
+
}
|
|
7870
|
+
const now = await storage.current(journeyId);
|
|
7871
|
+
if (now?.phase === "sending" || now?.phase === "completed") return false;
|
|
7872
|
+
if (blockedCodes(error, code).includes("PRIVACY_CHANGE_PENDING")) {
|
|
7873
|
+
if (work) await blockWork(work, error);
|
|
7874
|
+
return false;
|
|
7875
|
+
}
|
|
7876
|
+
if (attempt < retryLimit) return false;
|
|
7877
|
+
if (work && await isolateRoots(work, error)) {
|
|
7878
|
+
readRetries.delete(generation(work));
|
|
7879
|
+
return true;
|
|
7880
|
+
}
|
|
7828
7881
|
if (work) await blockWork(work, error);
|
|
7829
7882
|
}
|
|
7830
7883
|
return false;
|
|
7831
7884
|
};
|
|
7885
|
+
const prepareWorkOnce = async (planned, onSubmitted) => {
|
|
7886
|
+
const releaseRead = await acquireRead();
|
|
7887
|
+
try {
|
|
7888
|
+
return await prepareWorkAttempt(planned, onSubmitted, releaseRead);
|
|
7889
|
+
} finally {
|
|
7890
|
+
releaseRead();
|
|
7891
|
+
}
|
|
7892
|
+
};
|
|
7832
7893
|
const prepareWork = async (planned, onSubmitted) => {
|
|
7833
7894
|
for (let attempt = 0; attempt < planned.rootSessionIds.length; attempt++) if (!await prepareWorkOnce(planned, onSubmitted)) return;
|
|
7834
7895
|
};
|
|
@@ -7840,7 +7901,8 @@ function createJourneyPreparation(options) {
|
|
|
7840
7901
|
abort.signal.throwIfAborted();
|
|
7841
7902
|
if (!latest?.consent || latest.phase === "paused" || latest.scope.status !== "confirmed") throw new ApplicationError("OPERATION_CANCELED");
|
|
7842
7903
|
const work = latest.works.find((item) => item.id === planned.id);
|
|
7843
|
-
if (!work || !isSelectedWork(work)) return;
|
|
7904
|
+
if (!work || !isSelectedWork(work) || latest.phase === "sending" || latest.phase === "completed") return;
|
|
7905
|
+
const attempt = staticRetries.get(generation(work)) ?? 0;
|
|
7844
7906
|
try {
|
|
7845
7907
|
await inBackgroundStoreLane(() => prepareStaticWork({
|
|
7846
7908
|
storage,
|
|
@@ -7858,38 +7920,63 @@ function createJourneyPreparation(options) {
|
|
|
7858
7920
|
if (code === "OPERATION_CANCELED" && await droppedMidScan(work.id)) return;
|
|
7859
7921
|
if (code === "COORDINATION_BUSY" || code === "OPERATION_CANCELED") throw error;
|
|
7860
7922
|
options.onFailure(error);
|
|
7861
|
-
await
|
|
7923
|
+
if (await retryWork(work, error, attempt)) {
|
|
7924
|
+
staticRetries.set(generation(work), attempt + 1);
|
|
7925
|
+
return staticWork(planned, passSubmitted);
|
|
7926
|
+
}
|
|
7927
|
+
const now = await storage.current(journeyId);
|
|
7928
|
+
if (now?.phase !== "sending" && now?.phase !== "completed" && (attempt >= retryLimit || blockedCodes(error, safeCode(error)).includes("PRIVACY_CHANGE_PENDING"))) await blockWork(work, error);
|
|
7862
7929
|
}
|
|
7863
7930
|
};
|
|
7864
|
-
let next = 0;
|
|
7865
7931
|
let fatal;
|
|
7866
7932
|
const stop = (error) => {
|
|
7867
7933
|
fatal ??= { error };
|
|
7868
7934
|
abort.abort(error);
|
|
7869
7935
|
};
|
|
7870
7936
|
const statics = [];
|
|
7871
|
-
const
|
|
7872
|
-
|
|
7873
|
-
|
|
7874
|
-
|
|
7875
|
-
|
|
7937
|
+
const reads = [];
|
|
7938
|
+
const pass = async (works) => {
|
|
7939
|
+
let submittedWorks = 0;
|
|
7940
|
+
const submitted = Promise.withResolvers();
|
|
7941
|
+
const submission = () => {
|
|
7942
|
+
let done = false;
|
|
7943
|
+
return () => {
|
|
7944
|
+
if (done) return;
|
|
7945
|
+
done = true;
|
|
7946
|
+
if (++submittedWorks === works.length) submitted.resolve();
|
|
7947
|
+
};
|
|
7948
|
+
};
|
|
7876
7949
|
if (!works.length) submitted.resolve();
|
|
7877
7950
|
const passSubmitted = submitted.promise;
|
|
7878
|
-
|
|
7879
|
-
|
|
7880
|
-
|
|
7881
|
-
|
|
7951
|
+
let admission = Promise.resolve();
|
|
7952
|
+
const admissions = [];
|
|
7953
|
+
for (const planned of works) {
|
|
7954
|
+
const previous = admission;
|
|
7955
|
+
const released = Promise.withResolvers();
|
|
7956
|
+
admission = released.promise;
|
|
7957
|
+
admissions.push(admission);
|
|
7958
|
+
releaseAdmission.set(planned.id, () => released.resolve());
|
|
7959
|
+
const onSubmitted = submission();
|
|
7960
|
+
const read = async () => {
|
|
7961
|
+
if (!run.pool) await previous;
|
|
7962
|
+
if (fatal) {
|
|
7963
|
+
onSubmitted();
|
|
7964
|
+
released.resolve();
|
|
7965
|
+
return;
|
|
7966
|
+
}
|
|
7882
7967
|
try {
|
|
7883
7968
|
await retryContention(() => prepareWork(planned, onSubmitted), (error) => options.onFailure(error), abort.signal);
|
|
7884
7969
|
} catch (error) {
|
|
7885
7970
|
stop(error);
|
|
7886
7971
|
} finally {
|
|
7887
7972
|
onSubmitted();
|
|
7973
|
+
released.resolve();
|
|
7888
7974
|
}
|
|
7889
7975
|
statics.push(retryContention(() => staticWork(planned, passSubmitted), (error) => options.onFailure(error), abort.signal).catch(stop));
|
|
7890
|
-
}
|
|
7891
|
-
|
|
7892
|
-
|
|
7976
|
+
};
|
|
7977
|
+
reads.push(read());
|
|
7978
|
+
}
|
|
7979
|
+
await Promise.all(admissions);
|
|
7893
7980
|
};
|
|
7894
7981
|
/** Selected Works this run has not prepared yet, waiting while grouping continues (E2). */
|
|
7895
7982
|
const later = async () => {
|
|
@@ -7906,11 +7993,15 @@ function createJourneyPreparation(options) {
|
|
|
7906
7993
|
await setTimeout$1(laterWorksPollMs, void 0, { signal: abort.signal }).catch(() => abort.signal.throwIfAborted());
|
|
7907
7994
|
}
|
|
7908
7995
|
};
|
|
7909
|
-
|
|
7910
|
-
|
|
7911
|
-
|
|
7996
|
+
try {
|
|
7997
|
+
for (let batch = scanWorks; batch.length && !fatal; batch = await later()) {
|
|
7998
|
+
if (!run.workers && !run.pool) run = await runWorkers(options.workers);
|
|
7999
|
+
await pass(batch);
|
|
8000
|
+
}
|
|
8001
|
+
} finally {
|
|
8002
|
+
await Promise.all(reads);
|
|
8003
|
+
await Promise.all(statics);
|
|
7912
8004
|
}
|
|
7913
|
-
await Promise.all(statics);
|
|
7914
8005
|
if (scanWorks.length) options.onTiming?.(journeyId, {
|
|
7915
8006
|
scope: "preparation",
|
|
7916
8007
|
phases: { "journey-prepare": Math.round(performance$1.now() - startedAt) },
|
|
@@ -7936,6 +8027,11 @@ function createJourneyPreparation(options) {
|
|
|
7936
8027
|
}
|
|
7937
8028
|
};
|
|
7938
8029
|
}
|
|
8030
|
+
/** Ray, 2026-11-05: two automatic retries per Work, after two then five seconds. */
|
|
8031
|
+
const workRetryDelaysMs = [2e3, 5e3];
|
|
8032
|
+
async function waitForWorkRetry(milliseconds, signal) {
|
|
8033
|
+
await setTimeout$1(milliseconds, void 0, { signal }).catch(() => signal.throwIfAborted());
|
|
8034
|
+
}
|
|
7939
8035
|
/** How often a run waiting for grouping to publish more Works checks the journey (E2). */
|
|
7940
8036
|
const laterWorksPollMs = 2e3;
|
|
7941
8037
|
/**
|
|
@@ -8716,7 +8812,7 @@ function createJourneyRenderer(options) {
|
|
|
8716
8812
|
return {
|
|
8717
8813
|
...current,
|
|
8718
8814
|
works,
|
|
8719
|
-
phase: current.phase === "paused" ? "paused" : current.readingComplete && works.every((item) => !
|
|
8815
|
+
phase: current.phase === "paused" ? "paused" : current.readingComplete && works.every((item) => !isIncludedWork(item) || item.status === "ready") ? "ready" : current.phase
|
|
8720
8816
|
};
|
|
8721
8817
|
});
|
|
8722
8818
|
}
|
|
@@ -15145,7 +15241,7 @@ async function compose(options, callbacks, bundles) {
|
|
|
15145
15241
|
event: "STATE_SCHEMA_BACKED_UP",
|
|
15146
15242
|
schema,
|
|
15147
15243
|
backup: path,
|
|
15148
|
-
detail: "State from an older
|
|
15244
|
+
detail: "State from an older Tacitt CLI version was kept at this backup path and fresh state was started. Earlier journey progress and approvals start over; source logs, completed ZIP files and private sensitive terms are unchanged. Delete the backup once it is no longer needed."
|
|
15149
15245
|
})}\n`);
|
|
15150
15246
|
},
|
|
15151
15247
|
...process.env["SESS_PILOT_TEST_STARTUP_TRACE"] === "1" ? { onStartupPhase: traceStartup } : {}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ln as sessionSchema } from "./locate-JYtFmKu-.mjs";
|
|
2
2
|
import { t as createZstdFrameCheck$1 } from "./frame-DGun31Uc.mjs";
|
|
3
|
-
import "./src
|
|
4
|
-
import { a as isRecord } from "./model-
|
|
3
|
+
import "./src--Ln5GHdz.mjs";
|
|
4
|
+
import { a as isRecord } from "./model-C1VzgKLi.mjs";
|
|
5
5
|
import { constants } from "node:fs";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { lstat, open, stat } from "node:fs/promises";
|