@gitroll/tacitt-cli 0.4.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/{agent-setup-Bpsi-BCv.mjs → agent-setup-Dv_mQ38P.mjs} +2 -2
  2. package/dist/agent-setup-worker.mjs +5 -5
  3. package/dist/cli.mjs +6 -5
  4. package/dist/codex-title-worker.mjs +1 -1
  5. package/dist/configured-preview-worker.mjs +5 -5
  6. package/dist/configured-session-worker.mjs +5 -5
  7. package/dist/{frame-IeDOLy1o.mjs → frame-DGun31Uc.mjs} +1 -1
  8. package/dist/{heap-DiOlSa8T.mjs → heap-DY5n4EVC.mjs} +5 -4
  9. package/dist/inspection-worker.mjs +4 -4
  10. package/dist/{job-BII94L2c.mjs → job-BxUVFocm.mjs} +383 -8
  11. package/dist/{locate-CBiw-CJK.mjs → locate-JYtFmKu-.mjs} +115 -3
  12. package/dist/{model-DGTsARtV.mjs → model-C1VzgKLi.mjs} +1 -1
  13. package/dist/operation-executor.mjs +3 -3
  14. package/dist/preview-worker.mjs +1 -1
  15. package/dist/privacy-validator.mjs +1 -1
  16. package/dist/{query-CVqWNFYf.mjs → query-Cm5lumS4.mjs} +588 -64
  17. package/dist/{run-BGlf-W0M.mjs → run-hQ_W2p_Y.mjs} +4 -4
  18. package/dist/{src-CBTvOa44.mjs → src--Ln5GHdz.mjs} +44 -9
  19. package/dist/{src-D4nrfC2S.mjs → src-BMSLVcgs.mjs} +6 -5
  20. package/dist/{src-37kIclGK.mjs → src-CGFwLUd6.mjs} +4 -4
  21. package/dist/store-database-worker.mjs +1 -1
  22. package/dist/web/assets/index-Bbck2aOB.css +1 -0
  23. package/dist/web/assets/index-CXm08nyc.js +69 -0
  24. package/dist/web/index.html +2 -2
  25. package/package.json +1 -1
  26. package/skills/tacitt/SKILL.md +4 -4
  27. package/skills/tacitt/references/INDEX.md +11 -10
  28. package/skills/tacitt/references/commands.md +25 -12
  29. package/skills/tacitt/references/journey.md +3 -3
  30. package/skills/tacitt/references/remote-workers.md +46 -0
  31. package/skills/tacitt/references/send.md +5 -1
  32. package/skills/tacitt/scripts/INDEX.md +36 -36
  33. package/skills/tacitt/scripts/journey-scan-timing.mjs +5 -4
  34. package/skills/tacitt/scripts/journey-state.d.mts +9 -0
  35. package/skills/tacitt/scripts/journey-state.mjs +19 -2
  36. package/skills/tacitt/scripts/journey.d.mts +4 -0
  37. package/skills/tacitt/scripts/journey.mjs +4 -2
  38. package/skills/tacitt/scripts/privacy-validator.mjs +76 -3
  39. package/skills/tacitt/scripts/review.mjs +6 -6
  40. package/dist/web/assets/index-D3g_ATU-.js +0 -69
  41. package/dist/web/assets/index-D5DEG5Ue.css +0 -1
@@ -877,7 +877,7 @@ const uuid$1 = (version) => {
877
877
  return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);
878
878
  };
879
879
  /** Practical email validation */
880
- const email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;
880
+ const email$1 = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;
881
881
  const _emoji$1 = `^[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;
882
882
  function emoji() {
883
883
  return new RegExp(_emoji$1, "u");
@@ -1471,7 +1471,7 @@ const $ZodUUID = /*@__PURE__*/ $constructor("$ZodUUID", (inst, def) => {
1471
1471
  $ZodStringFormat.init(inst, def);
1472
1472
  });
1473
1473
  const $ZodEmail = /*@__PURE__*/ $constructor("$ZodEmail", (inst, def) => {
1474
- def.pattern ?? (def.pattern = email);
1474
+ def.pattern ?? (def.pattern = email$1);
1475
1475
  $ZodStringFormat.init(inst, def);
1476
1476
  });
1477
1477
  /** Parses a URL for `$ZodURL`, applying the one guard the URL constructor cannot express. Returns the parsed URL, or a code naming the stage that rejected it — the runtime needs that distinction to pick an issue note, and compiled code only needs to know it is not a URL. */
@@ -4599,6 +4599,9 @@ const ZodEmail = /*@__PURE__*/ $constructor("ZodEmail", (inst, def) => {
4599
4599
  $ZodEmail.init(inst, def);
4600
4600
  ZodStringFormat.init(inst, def);
4601
4601
  });
4602
+ function email(params) {
4603
+ return /* @__PURE__ */ _email(ZodEmail, params);
4604
+ }
4602
4605
  const ZodGUID = /*@__PURE__*/ $constructor("ZodGUID", (inst, def) => {
4603
4606
  $ZodGUID.init(inst, def);
4604
4607
  ZodStringFormat.init(inst, def);
@@ -4877,6 +4880,14 @@ function object(shape, params) {
4877
4880
  };
4878
4881
  return new ZodObject(def);
4879
4882
  }
4883
+ function looseObject(shape, params) {
4884
+ return new ZodObject({
4885
+ type: "object",
4886
+ shape,
4887
+ catchall: unknown(),
4888
+ ...normalizeParams(params)
4889
+ });
4890
+ }
4880
4891
  const ZodUnion = /*@__PURE__*/ $constructor("ZodUnion", (inst, def) => {
4881
4892
  $ZodUnion.init(inst, def);
4882
4893
  ZodType.init(inst, def);
@@ -5182,6 +5193,64 @@ const classificationTitleMaskSchema = object({
5182
5193
  }).strict()
5183
5194
  }).strict();
5184
5195
  //#endregion
5196
+ //#region packages/application/src/journey/profile.ts
5197
+ /**
5198
+ * Passport's own rules (talent-platform `profile-settings.ts`): 1 to 39 letters and digits with
5199
+ * single hyphens between them, matched case-insensitively; the typed case is kept.
5200
+ */
5201
+ const passportAddressSchema = string().min(1).max(39).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/i);
5202
+ const passportLinksSchema = array(string().max(2048).refine((value) => {
5203
+ if (value.startsWith("mailto:")) return email().max(254).safeParse(value.slice(7)).success;
5204
+ if (!URL.canParse(value)) return false;
5205
+ const url = new URL(value);
5206
+ return ["https:", "http:"].includes(url.protocol) && !!url.hostname && !url.username && !url.password && !/\s/.test(value);
5207
+ })).max(5);
5208
+ /**
5209
+ * The address and links the person chose in this Journey (ADR 0246). Nothing here reaches
5210
+ * Passport before Send; the Send writes it before the first Work upload.
5211
+ */
5212
+ const journeyProfileSchema = object({
5213
+ /** The kept address; null until the person keeps one. */
5214
+ address: passportAddressSchema.nullable(),
5215
+ /** The complete list of links the profile should show. */
5216
+ links: passportLinksSchema,
5217
+ /** `later` comes back once on the Sent page; `declined` is that second Later. */
5218
+ linksChoice: _enum([
5219
+ "added",
5220
+ "later",
5221
+ "declined"
5222
+ ]).nullable()
5223
+ }).strict();
5224
+ object({
5225
+ kind: literal("profile-address"),
5226
+ address: passportAddressSchema
5227
+ }).strict();
5228
+ object({
5229
+ kind: literal("profile-links"),
5230
+ links: passportLinksSchema,
5231
+ /** `later` comes back once on the Sent page; `declined` is that page's final Later. */
5232
+ choice: _enum([
5233
+ "added",
5234
+ "later",
5235
+ "declined"
5236
+ ])
5237
+ }).strict();
5238
+ object({
5239
+ publicId: string().min(1).max(64),
5240
+ /** Loose, so a setting Passport adds later goes back unchanged with the next save. */
5241
+ profile: looseObject({
5242
+ address: union([literal(""), passportAddressSchema]),
5243
+ links: passportLinksSchema,
5244
+ contact: _enum([
5245
+ "account",
5246
+ "other",
5247
+ "hidden"
5248
+ ]),
5249
+ contactEmail: string().max(254)
5250
+ }),
5251
+ accountEmail: string().max(254)
5252
+ });
5253
+ //#endregion
5185
5254
  //#region packages/processing/src/errors.ts
5186
5255
  var ProcessingError = class extends Error {
5187
5256
  code;
@@ -9231,6 +9300,8 @@ const sessionSchema = object({
9231
9300
  harness: _enum(["claude", "codex"]),
9232
9301
  sourceKey: string(),
9233
9302
  sourceSessionId: string().nullable(),
9303
+ /** Journey-private remote import association, never inferred from a worker log. */
9304
+ remoteParentSessionId: string().optional(),
9234
9305
  title: string(),
9235
9306
  createdAt: string().nullable(),
9236
9307
  lastInteractionAt: string().nullable().optional(),
@@ -9977,7 +10048,9 @@ object({
9977
10048
  /** Set when the person abandoned this Journey in chat; a new start may then replace it. */
9978
10049
  abandonedAt: datetime().optional(),
9979
10050
  /** Sessions whose last activity lies in this period (ADR 0206); absent means all. */
9980
- period: sessionPeriodSchema.optional()
10051
+ period: sessionPeriodSchema.optional(),
10052
+ /** The Passport address and links chosen in this Journey (ADR 0246); absent means none yet. */
10053
+ profile: journeyProfileSchema.optional()
9981
10054
  }).strict();
9982
10055
  //#endregion
9983
10056
  //#region packages/application/src/journey/b/model.ts
@@ -2,6 +2,7 @@ import {
2
2
  cardBatch,
3
3
  cardBatchDue,
4
4
  cardBatchDueAt,
5
+ isSkipped,
5
6
  nextCardsWait,
6
7
  phaseOf,
7
8
  uncoveredPending,
@@ -1396,20 +1397,19 @@ export function workProgress(view) {
1396
1397
  })
1397
1398
  }
1398
1399
 
1399
- /** Selected Works whose preparation is blocked; they have no units and need the person. */
1400
+ /**
1401
+ * Selected Works whose read failed. They have no units and are skipped for this Send without
1402
+ * waiting for the person, who may Retry them in the panel (ADR 0236).
1403
+ */
1400
1404
  export function blockedWorks(view) {
1401
1405
  return view.works
1402
- .filter(
1403
- (work) =>
1404
- work.access !== 'drop' && work.rootSessionIds.length > 0 && work.status === 'blocked',
1405
- )
1406
+ .filter((work) => work.access !== 'drop' && work.rootSessionIds.length > 0 && isSkipped(work))
1406
1407
  .map((work) => ({ workId: work.id, title: work.title, blockedCodes: work.blockedCodes ?? [] }))
1407
1408
  }
1408
1409
 
1409
1410
  /** The next step once no pack is open: blocked input is reported, never completion. */
1410
1411
  export function settledNext(view, units) {
1411
1412
  if (units.some((unit) => unit.state === 'blocked')) return 'report-blocked'
1412
- if (blockedWorks(view).length) return 'report-blocked-work'
1413
1413
  if (!view.readingComplete) return 'next-packs (journey reading is incomplete)'
1414
1414
  return 'done'
1415
1415
  }