@phamvuhoang/otto-core 0.19.0 → 0.21.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 (70) hide show
  1. package/dist/index.d.ts +6 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/journal-config.d.ts +9 -0
  6. package/dist/journal-config.d.ts.map +1 -0
  7. package/dist/journal-config.js +31 -0
  8. package/dist/journal-config.js.map +1 -0
  9. package/dist/journal-gate.d.ts +46 -0
  10. package/dist/journal-gate.d.ts.map +1 -0
  11. package/dist/journal-gate.js +135 -0
  12. package/dist/journal-gate.js.map +1 -0
  13. package/dist/journal-ledger.d.ts +13 -0
  14. package/dist/journal-ledger.d.ts.map +1 -0
  15. package/dist/journal-ledger.js +33 -0
  16. package/dist/journal-ledger.js.map +1 -0
  17. package/dist/journal-source.d.ts +19 -0
  18. package/dist/journal-source.d.ts.map +1 -0
  19. package/dist/journal-source.js +38 -0
  20. package/dist/journal-source.js.map +1 -0
  21. package/dist/journal.d.ts +46 -0
  22. package/dist/journal.d.ts.map +1 -0
  23. package/dist/journal.js +158 -0
  24. package/dist/journal.js.map +1 -0
  25. package/dist/loop.d.ts.map +1 -1
  26. package/dist/loop.js +31 -3
  27. package/dist/loop.js.map +1 -1
  28. package/dist/model-tier.d.ts +5 -0
  29. package/dist/model-tier.d.ts.map +1 -1
  30. package/dist/model-tier.js +13 -0
  31. package/dist/model-tier.js.map +1 -1
  32. package/dist/panel.d.ts +37 -3
  33. package/dist/panel.d.ts.map +1 -1
  34. package/dist/panel.js +126 -39
  35. package/dist/panel.js.map +1 -1
  36. package/dist/render.d.ts.map +1 -1
  37. package/dist/render.js +3 -1
  38. package/dist/render.js.map +1 -1
  39. package/dist/review-severity.d.ts +41 -0
  40. package/dist/review-severity.d.ts.map +1 -0
  41. package/dist/review-severity.js +101 -0
  42. package/dist/review-severity.js.map +1 -0
  43. package/dist/risk.d.ts +3 -2
  44. package/dist/risk.d.ts.map +1 -1
  45. package/dist/risk.js +8 -7
  46. package/dist/risk.js.map +1 -1
  47. package/dist/run-bin.js +1 -1
  48. package/dist/run-bin.js.map +1 -1
  49. package/dist/run-report.d.ts +8 -0
  50. package/dist/run-report.d.ts.map +1 -1
  51. package/dist/run-report.js.map +1 -1
  52. package/dist/stages.d.ts +10 -0
  53. package/dist/stages.d.ts.map +1 -1
  54. package/dist/stages.js +13 -0
  55. package/dist/stages.js.map +1 -1
  56. package/dist/threads-api.d.ts +46 -0
  57. package/dist/threads-api.d.ts.map +1 -0
  58. package/dist/threads-api.js +101 -0
  59. package/dist/threads-api.js.map +1 -0
  60. package/package.json +1 -1
  61. package/templates/journal-screen.md +19 -0
  62. package/templates/journal-write.md +16 -0
  63. package/templates/lens-guidance/correctness.md +1 -0
  64. package/templates/lens-guidance/security.md +1 -0
  65. package/templates/lens-guidance/structural.md +25 -0
  66. package/templates/lens-guidance/task-fit.md +1 -0
  67. package/templates/lens-guidance/tests.md +1 -0
  68. package/templates/review-lens.md +16 -1
  69. package/templates/review-synth.md +18 -2
  70. package/templates/review-verify.md +11 -6
package/dist/index.d.ts CHANGED
@@ -46,4 +46,10 @@ export { createWorktree, reapWorktrees } from "./worktree.js";
46
46
  export { runFanout, type FanoutResult, type FanoutTaskOutcome, type FanoutTaskStatus, type RunFanoutOptions, } from "./fanout.js";
47
47
  export { buildRunView, formatDoneCard, formatLiveTree, type RunView, type RunViewStage, } from "./run-view.js";
48
48
  export { runTail, type TailDeps } from "./tail.js";
49
+ export { appendAudit, screenEntry, screenGate1, screenGate2, MAX_ENTRY_CHARS, MIN_ENTRY_CHARS, type Gate3Judge, type GateContext, type GateResult, } from "./journal-gate.js";
50
+ export { createThreadsClient, resolveThreadsAuth, threadsConfigPath, ThreadsApiError, type ThreadsAuth, type ThreadsClient, type ThreadsErrorKind, } from "./threads-api.js";
51
+ export { forbiddenTermsFor, selectCandidate } from "./journal-source.js";
52
+ export { maybeJournal, runJournal, type JournalAction, type JournalConfig, type JournalDeps, type JournalOutcome, } from "./journal.js";
53
+ export { readJournalConfig } from "./journal-config.js";
54
+ export { appendLedger, hashContent, readLedger, recentlyPosted, type PostedEntry, } from "./journal-ledger.js";
49
55
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -46,4 +46,10 @@ export { createWorktree, reapWorktrees } from "./worktree.js";
46
46
  export { runFanout, } from "./fanout.js";
47
47
  export { buildRunView, formatDoneCard, formatLiveTree, } from "./run-view.js";
48
48
  export { runTail } from "./tail.js";
49
+ export { appendAudit, screenEntry, screenGate1, screenGate2, MAX_ENTRY_CHARS, MIN_ENTRY_CHARS, } from "./journal-gate.js";
50
+ export { createThreadsClient, resolveThreadsAuth, threadsConfigPath, ThreadsApiError, } from "./threads-api.js";
51
+ export { forbiddenTermsFor, selectCandidate } from "./journal-source.js";
52
+ export { maybeJournal, runJournal, } from "./journal.js";
53
+ export { readJournalConfig } from "./journal-config.js";
54
+ export { appendLedger, hashContent, readLedger, recentlyPosted, } from "./journal-ledger.js";
49
55
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAA4B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAsC,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,GAIX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,GAGhB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,eAAe,EACf,QAAQ,GAGT,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,mBAAmB,GAIpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,wBAAwB,GAIzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,GAIpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,sBAAsB,EACtB,cAAc,GAGf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GAInB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,cAAc,GAMf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,aAAa,EACb,cAAc,EACd,gBAAgB,GAMjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,UAAU,GAEX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,UAAU,GAEX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,OAAO,EACP,iBAAiB,GAGlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,GAGd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,SAAS,GAEV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACtB,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,iBAAiB,GAQlB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,OAAO,EACP,cAAc,GAMf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,YAAY,GAMb,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,GAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,MAAM,GAIP,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,GAEd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,GASX,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,SAAS,GAEV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,eAAe,GAGhB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GAIjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GAItB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,GAGtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,8BAA8B,EAC9B,cAAc,EACd,cAAc,GAEf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GAQjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,GAKjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,QAAQ,GAGT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GAaf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,qBAAqB,GAEtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,oBAAoB,GAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,aAAa,GAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,SAAS,GAKV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,GAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAiB,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,eAAe,GAIhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAIhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,UAAU,GAKX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,cAAc,GAEf,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { JournalConfig } from "./journal.js";
2
+ /**
3
+ * Read `.otto/config.json`'s `journal` block. Returns `null` (the hook no-ops)
4
+ * unless `journal.enabled === true`. Autonomous posting requires BOTH
5
+ * `journal.autonomous: true` in config AND `OTTO_JOURNAL_AUTONOMOUS` truthy — a
6
+ * double opt-in. Missing/invalid file or block → null (zero behavior change).
7
+ */
8
+ export declare function readJournalConfig(workspaceDir: string, env?: NodeJS.ProcessEnv): JournalConfig | null;
9
+ //# sourceMappingURL=journal-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-config.d.ts","sourceRoot":"","sources":["../src/journal-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,aAAa,GAAG,IAAI,CA0BtB"}
@@ -0,0 +1,31 @@
1
+ /** Read the per-repo journal opt-in from .otto/config.json (issue #67 P12). */
2
+ import { readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ /**
5
+ * Read `.otto/config.json`'s `journal` block. Returns `null` (the hook no-ops)
6
+ * unless `journal.enabled === true`. Autonomous posting requires BOTH
7
+ * `journal.autonomous: true` in config AND `OTTO_JOURNAL_AUTONOMOUS` truthy — a
8
+ * double opt-in. Missing/invalid file or block → null (zero behavior change).
9
+ */
10
+ export function readJournalConfig(workspaceDir, env = process.env) {
11
+ let raw;
12
+ try {
13
+ raw = JSON.parse(readFileSync(join(workspaceDir, ".otto", "config.json"), "utf8"));
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ const j = raw.journal;
19
+ if (!j || typeof j !== "object" || j.enabled !== true)
20
+ return null;
21
+ const envAutonomous = ["1", "true", "yes", "on"].includes((env.OTTO_JOURNAL_AUTONOMOUS ?? "").trim().toLowerCase());
22
+ return {
23
+ enabled: true,
24
+ autonomous: j.autonomous === true && envAutonomous,
25
+ categories: Array.isArray(j.categories)
26
+ ? j.categories.filter((c) => typeof c === "string")
27
+ : ["gotcha", "dead-end"],
28
+ minDaysBetweenPosts: typeof j.minDaysBetweenPosts === "number" ? j.minDaysBetweenPosts : 1,
29
+ };
30
+ }
31
+ //# sourceMappingURL=journal-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-config.js","sourceRoot":"","sources":["../src/journal-config.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CACd,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CACtC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,OAA8C,CAAC;IAC7D,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEnE,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CACvD,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CACzD,CAAC;IACF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC,CAAC,UAAU,KAAK,IAAI,IAAI,aAAa;QAClD,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACrC,CAAC,CAAE,CAAC,CAAC,UAAwB,CAAC,MAAM,CAChC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C;YACH,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC1B,mBAAmB,EACjB,OAAO,CAAC,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;KACxE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The P12 outbound secrecy gate (issue #67). Layered, default-deny: a journal
3
+ * note is published only if it passes every gate. Gate 1 (here) is the pure,
4
+ * deterministic deny-list — the backbone. Gates 2 (generalization) and 3
5
+ * (adversarial judge) are added in later slices. ZERO-LEAK is the hard gate:
6
+ * anything ambiguous is denied, and a thrown check denies rather than crashes.
7
+ */
8
+ export type GateContext = {
9
+ /** This repo's own identifiers (name, owner, remote host, dir basename, top files). */
10
+ repoIdentifiers: string[];
11
+ /** Extra deny patterns from SafetyPolicy.secretPatterns (.otto/policy.json). */
12
+ secretPatterns: string[];
13
+ /** Terms carried from the source record (scope globs / taskKey / run id). */
14
+ forbiddenTerms: string[];
15
+ };
16
+ export type GateResult = {
17
+ ok: true;
18
+ } | {
19
+ ok: false;
20
+ gate: 1 | 2 | 3;
21
+ reason: string;
22
+ };
23
+ /**
24
+ * Gate 1: deny if the entry matches any built-in secret/identifier pattern, any
25
+ * repo self-identifier, or any policy secretPattern. A malformed policy pattern
26
+ * is treated as a denial (fail closed). Pure; never mutates inputs.
27
+ */
28
+ export declare function screenGate1(entry: string, ctx: GateContext): GateResult;
29
+ export declare const MAX_ENTRY_CHARS = 500;
30
+ export declare const MIN_ENTRY_CHARS = 20;
31
+ /**
32
+ * Gate 2: the note must read as GENERIC craft. Deny task-key shapes, any term
33
+ * carried from the source record (scope globs / taskKey / run id), and notes
34
+ * outside the length bounds. Pure.
35
+ */
36
+ export declare function screenGate2(entry: string, ctx: GateContext): GateResult;
37
+ export type Gate3Judge = (entry: string) => Promise<boolean>;
38
+ /**
39
+ * Run the full gate: 1 (deny-list) → 2 (generalization) → 3 (judge, optional).
40
+ * Default-deny: an empty entry, any non-pass gate, or a thrown judge denies. The
41
+ * judge runs LAST and only on an entry the deterministic gates already passed.
42
+ */
43
+ export declare function screenEntry(entry: string, ctx: GateContext, judge?: Gate3Judge): Promise<GateResult>;
44
+ /** Append one JSON line to the journal audit trail. Never throws. */
45
+ export declare function appendAudit(workspaceDir: string, line: Record<string, unknown>): void;
46
+ //# sourceMappingURL=journal-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-gate.d.ts","sourceRoot":"","sources":["../src/journal-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,MAAM,WAAW,GAAG;IACxB,uFAAuF;IACvF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gFAAgF;IAChF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAiCnD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,CAuBvE;AAED,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,eAAe,KAAK,CAAC;AAKlC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,CAkBvE;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7D;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAQN"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * The P12 outbound secrecy gate (issue #67). Layered, default-deny: a journal
3
+ * note is published only if it passes every gate. Gate 1 (here) is the pure,
4
+ * deterministic deny-list — the backbone. Gates 2 (generalization) and 3
5
+ * (adversarial judge) are added in later slices. ZERO-LEAK is the hard gate:
6
+ * anything ambiguous is denied, and a thrown check denies rather than crashes.
7
+ */
8
+ import { appendFileSync, mkdirSync } from "node:fs";
9
+ import { dirname, join } from "node:path";
10
+ /** Built-in secret/identifier deny patterns. Each is intentionally broad — this
11
+ * gate is biased to over-deny. The pattern NAME is logged, never the match. */
12
+ const DENY = [
13
+ { name: "openai-key", re: /\bsk-[A-Za-z0-9_-]{12,}/ },
14
+ { name: "github-token", re: /\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}/ },
15
+ { name: "slack-token", re: /\bxox[baprs]-[A-Za-z0-9-]{10,}/ },
16
+ { name: "aws-key", re: /\bAKIA[0-9A-Z]{16}\b/ },
17
+ { name: "private-key", re: /-----BEGIN [A-Z ]*PRIVATE KEY-----/ },
18
+ { name: "bearer", re: /\bBearer\s+[A-Za-z0-9._-]{8,}/i },
19
+ {
20
+ name: "assignment-secret",
21
+ re: /\b(password|passwd|secret|api[_-]?key|token|access[_-]?key)\b\s*[:=]\s*\S+/i,
22
+ },
23
+ { name: "url", re: /\bhttps?:\/\/\S+/i },
24
+ { name: "abs-path", re: /(^|\s)(\/[\w.-]+){2,}/ },
25
+ { name: "rel-path", re: /(^|\s)\.{1,2}\/[\w./-]+/ },
26
+ { name: "win-path", re: /\b[A-Za-z]:\\[\\\w.-]+/ },
27
+ { name: "code-fence", re: /```/ },
28
+ { name: "code-span", re: /`[^`]+`/ },
29
+ { name: "scoped-pkg", re: /(^|\s)@[a-z0-9-]+\/[a-z0-9-]+/i },
30
+ { name: "import-stmt", re: /\b(import\s.+\sfrom\s|require\s*\()/ },
31
+ ];
32
+ /** Build a word-ish, case-insensitive matcher for a repo identifier. */
33
+ function identifierRe(id) {
34
+ const trimmed = id.trim();
35
+ if (trimmed.length < 3)
36
+ return null; // too short → too many false denials
37
+ const escaped = trimmed.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
38
+ return new RegExp(`(^|[^A-Za-z0-9])${escaped}([^A-Za-z0-9]|$)`, "i");
39
+ }
40
+ /**
41
+ * Gate 1: deny if the entry matches any built-in secret/identifier pattern, any
42
+ * repo self-identifier, or any policy secretPattern. A malformed policy pattern
43
+ * is treated as a denial (fail closed). Pure; never mutates inputs.
44
+ */
45
+ export function screenGate1(entry, ctx) {
46
+ for (const { name, re } of DENY) {
47
+ if (re.test(entry))
48
+ return { ok: false, gate: 1, reason: `deny:${name}` };
49
+ }
50
+ for (const id of ctx.repoIdentifiers) {
51
+ const re = identifierRe(id);
52
+ if (re && re.test(entry)) {
53
+ return { ok: false, gate: 1, reason: "deny:repo-identifier" };
54
+ }
55
+ }
56
+ for (const pattern of ctx.secretPatterns) {
57
+ let re;
58
+ try {
59
+ re = new RegExp(pattern, "i");
60
+ }
61
+ catch {
62
+ // a malformed policy pattern fails closed — we cannot prove safety.
63
+ return { ok: false, gate: 1, reason: "deny:malformed-policy-pattern" };
64
+ }
65
+ if (re.test(entry)) {
66
+ return { ok: false, gate: 1, reason: "deny:policy-secret-pattern" };
67
+ }
68
+ }
69
+ return { ok: true };
70
+ }
71
+ export const MAX_ENTRY_CHARS = 500;
72
+ export const MIN_ENTRY_CHARS = 20;
73
+ /** Shapes that betray a specific task/ticket. */
74
+ const TASK_KEY_RE = /\b(issue-\d+|[A-Z]{2,}-\d+)\b/;
75
+ /**
76
+ * Gate 2: the note must read as GENERIC craft. Deny task-key shapes, any term
77
+ * carried from the source record (scope globs / taskKey / run id), and notes
78
+ * outside the length bounds. Pure.
79
+ */
80
+ export function screenGate2(entry, ctx) {
81
+ const text = entry.trim();
82
+ if (text.length < MIN_ENTRY_CHARS || text.length > MAX_ENTRY_CHARS) {
83
+ return { ok: false, gate: 2, reason: "deny:length" };
84
+ }
85
+ if (TASK_KEY_RE.test(text)) {
86
+ return { ok: false, gate: 2, reason: "deny:task-key" };
87
+ }
88
+ for (const term of ctx.forbiddenTerms) {
89
+ const t = term.trim();
90
+ if (t.length >= 3 &&
91
+ new RegExp(t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "i").test(text)) {
92
+ return { ok: false, gate: 2, reason: "deny:forbidden-term" };
93
+ }
94
+ }
95
+ return { ok: true };
96
+ }
97
+ /**
98
+ * Run the full gate: 1 (deny-list) → 2 (generalization) → 3 (judge, optional).
99
+ * Default-deny: an empty entry, any non-pass gate, or a thrown judge denies. The
100
+ * judge runs LAST and only on an entry the deterministic gates already passed.
101
+ */
102
+ export async function screenEntry(entry, ctx, judge) {
103
+ if (!entry || !entry.trim()) {
104
+ return { ok: false, gate: 1, reason: "deny:empty" };
105
+ }
106
+ const g1 = screenGate1(entry, ctx);
107
+ if (!g1.ok)
108
+ return g1;
109
+ const g2 = screenGate2(entry, ctx);
110
+ if (!g2.ok)
111
+ return g2;
112
+ if (judge) {
113
+ try {
114
+ const safe = await judge(entry);
115
+ if (!safe)
116
+ return { ok: false, gate: 3, reason: "deny:judge-unsafe" };
117
+ }
118
+ catch {
119
+ return { ok: false, gate: 3, reason: "deny:judge-error" };
120
+ }
121
+ }
122
+ return { ok: true };
123
+ }
124
+ /** Append one JSON line to the journal audit trail. Never throws. */
125
+ export function appendAudit(workspaceDir, line) {
126
+ try {
127
+ const path = join(workspaceDir, ".otto", "journal", "audit.log");
128
+ mkdirSync(dirname(path), { recursive: true });
129
+ appendFileSync(path, JSON.stringify(line) + "\n", "utf8");
130
+ }
131
+ catch {
132
+ // the audit log is best-effort; never crash a run over it.
133
+ }
134
+ }
135
+ //# sourceMappingURL=journal-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-gate.js","sourceRoot":"","sources":["../src/journal-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type PostedEntry = {
2
+ memoryId: string;
3
+ contentHash: string;
4
+ postedAt: string;
5
+ postId?: string;
6
+ };
7
+ /** Stable short content hash, used for dedup of near-identical notes. */
8
+ export declare function hashContent(s: string): string;
9
+ export declare function readLedger(workspaceDir: string): PostedEntry[];
10
+ export declare function appendLedger(workspaceDir: string, entry: PostedEntry): void;
11
+ /** True if the newest post is younger than `minDays` before `now`. */
12
+ export declare function recentlyPosted(ledger: PostedEntry[], minDays: number, now: Date): boolean;
13
+ //# sourceMappingURL=journal-ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-ledger.d.ts","sourceRoot":"","sources":["../src/journal-ledger.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAKF,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,EAAE,CAO9D;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAK3E;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,IAAI,GACR,OAAO,CAKT"}
@@ -0,0 +1,33 @@
1
+ /** Posted-entry ledger + cadence/dedup for the P12 journal (issue #67). */
2
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { createHash } from "node:crypto";
4
+ import { dirname, join } from "node:path";
5
+ const ledgerPath = (workspaceDir) => join(workspaceDir, ".otto", "journal", "posted.json");
6
+ /** Stable short content hash, used for dedup of near-identical notes. */
7
+ export function hashContent(s) {
8
+ return createHash("sha256").update(s.trim()).digest("hex").slice(0, 16);
9
+ }
10
+ export function readLedger(workspaceDir) {
11
+ try {
12
+ const raw = JSON.parse(readFileSync(ledgerPath(workspaceDir), "utf8"));
13
+ return Array.isArray(raw) ? raw : [];
14
+ }
15
+ catch {
16
+ return [];
17
+ }
18
+ }
19
+ export function appendLedger(workspaceDir, entry) {
20
+ const path = ledgerPath(workspaceDir);
21
+ mkdirSync(dirname(path), { recursive: true });
22
+ const next = [...readLedger(workspaceDir), entry];
23
+ writeFileSync(path, JSON.stringify(next, null, 2), "utf8");
24
+ }
25
+ /** True if the newest post is younger than `minDays` before `now`. */
26
+ export function recentlyPosted(ledger, minDays, now) {
27
+ if (ledger.length === 0 || minDays <= 0)
28
+ return false;
29
+ const newest = ledger.reduce((a, b) => (a.postedAt > b.postedAt ? a : b));
30
+ const ageMs = now.getTime() - new Date(newest.postedAt).getTime();
31
+ return ageMs < minDays * 24 * 60 * 60 * 1000;
32
+ }
33
+ //# sourceMappingURL=journal-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-ledger.js","sourceRoot":"","sources":["../src/journal-ledger.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAS1C,MAAM,UAAU,GAAG,CAAC,YAAoB,EAAU,EAAE,CAClD,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAExD,yEAAyE;AACzE,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAAoB;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACvE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,YAAoB,EAAE,KAAkB;IACnE,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACtC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;IAClD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,cAAc,CAC5B,MAAqB,EACrB,OAAe,EACf,GAAS;IAET,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IAClE,OAAO,KAAK,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** Select a journal-worthy memory record + derive its forbidden terms (#67 P12). */
2
+ import type { MemoryRecord } from "./memory.js";
3
+ /**
4
+ * Pick the best journal candidate: an ACTIVE record in a journal-worthy category
5
+ * that has not already been posted, ranked by confidence (ties → newer). Returns
6
+ * null when nothing qualifies.
7
+ */
8
+ export declare function selectCandidate(records: MemoryRecord[], opts: {
9
+ categories: string[];
10
+ postedIds: Set<string>;
11
+ now: Date;
12
+ }): MemoryRecord | null;
13
+ /**
14
+ * Identifiers carried by a record that must not survive into a post: its
15
+ * taskKey, its sourceRun id, and the word-ish parts of its scope globs. Fed into
16
+ * the gate's `forbiddenTerms` so a leaked source term is denied at Gate 2.
17
+ */
18
+ export declare function forbiddenTermsFor(record: MemoryRecord): string[];
19
+ //# sourceMappingURL=journal-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-source.d.ts","sourceRoot":"","sources":["../src/journal-source.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EAAE,EACvB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAChE,YAAY,GAAG,IAAI,CAerB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAUhE"}
@@ -0,0 +1,38 @@
1
+ import { memoryStatus } from "./memory.js";
2
+ /**
3
+ * Pick the best journal candidate: an ACTIVE record in a journal-worthy category
4
+ * that has not already been posted, ranked by confidence (ties → newer). Returns
5
+ * null when nothing qualifies.
6
+ */
7
+ export function selectCandidate(records, opts) {
8
+ const eligible = records.filter((r) => memoryStatus(r, opts.now) === "active" &&
9
+ r.category != null &&
10
+ opts.categories.includes(r.category) &&
11
+ !opts.postedIds.has(r.id));
12
+ if (eligible.length === 0)
13
+ return null;
14
+ eligible.sort((a, b) => b.confidence !== a.confidence
15
+ ? b.confidence - a.confidence
16
+ : b.createdAt.localeCompare(a.createdAt));
17
+ return eligible[0];
18
+ }
19
+ /**
20
+ * Identifiers carried by a record that must not survive into a post: its
21
+ * taskKey, its sourceRun id, and the word-ish parts of its scope globs. Fed into
22
+ * the gate's `forbiddenTerms` so a leaked source term is denied at Gate 2.
23
+ */
24
+ export function forbiddenTermsFor(record) {
25
+ const terms = new Set();
26
+ if (record.taskKey)
27
+ terms.add(record.taskKey);
28
+ if (record.sourceRun)
29
+ terms.add(record.sourceRun);
30
+ for (const glob of record.scope) {
31
+ for (const part of glob.split(/[/*.\s]+/)) {
32
+ if (part.length >= 3)
33
+ terms.add(part);
34
+ }
35
+ }
36
+ return [...terms];
37
+ }
38
+ //# sourceMappingURL=journal-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-source.js","sourceRoot":"","sources":["../src/journal-source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAuB,EACvB,IAAiE;IAEjE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ;QACtC,CAAC,CAAC,QAAQ,IAAI,IAAI;QAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC5B,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;QAC3B,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;QAC7B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAC3C,CAAC;IACF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,SAAS;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { AgentRuntimeId } from "./agent-runtime.js";
2
+ export type JournalConfig = {
3
+ enabled: boolean;
4
+ autonomous: boolean;
5
+ categories: string[];
6
+ minDaysBetweenPosts: number;
7
+ };
8
+ export type JournalDeps = {
9
+ /** Rewrite a learning as a generic field note (or "SKIP"). */
10
+ generate: (learning: string) => Promise<string>;
11
+ /** Adversarial judge: true = SAFE to post. */
12
+ judge: (note: string) => Promise<boolean>;
13
+ /** Publish to Threads; absent ⇒ draft-only (default mode). */
14
+ publish?: (text: string) => Promise<{
15
+ id: string;
16
+ }>;
17
+ repoIdentifiers: string[];
18
+ secretPatterns: string[];
19
+ now: () => Date;
20
+ };
21
+ export type JournalAction = "disabled" | "no-candidate" | "skipped-cadence" | "denied" | "drafted" | "posted";
22
+ export type JournalOutcome = {
23
+ action: JournalAction;
24
+ reason?: string;
25
+ };
26
+ /**
27
+ * The pure-ish orchestrator. Drafts by default; posts only when `autonomous`
28
+ * and a `publish` dep are both present AND every gate passes. Default-deny and
29
+ * never-throw are the invariants.
30
+ */
31
+ export declare function runJournal(workspaceDir: string, config: JournalConfig, deps: JournalDeps): Promise<JournalOutcome>;
32
+ /**
33
+ * Harness run-end hook (issue #67 P12): read the per-repo journal config (no-op
34
+ * when absent/disabled), build the real generate/judge/publish deps from the
35
+ * agent runtime + Threads client, and run the journal. Never throws — the
36
+ * journal must never affect a run's outcome.
37
+ */
38
+ export declare function maybeJournal(args: {
39
+ workspaceDir: string;
40
+ packageDir: string;
41
+ iteration: number;
42
+ maxRetries: number;
43
+ agentId: AgentRuntimeId;
44
+ signal?: AbortSignal;
45
+ }): Promise<JournalOutcome>;
46
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQzD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,8DAA8D;IAC9D,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,8CAA8C;IAC9C,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,8DAA8D;IAC9D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,cAAc,GACd,iBAAiB,GACjB,QAAQ,GACR,SAAS,GACT,QAAQ,CAAC;AACb,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,cAAc,CAAC,CA0EzB;AA2BD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,cAAc,CAAC,CA8C1B"}