agent-afk 5.342.0 → 5.344.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 (125) hide show
  1. package/dist/agent/artifact-registry/store.d.ts +3 -3
  2. package/dist/agent/daemon-instance.lock.d.ts +6 -0
  3. package/dist/agent/daemon.oauth-timer.d.ts +2 -0
  4. package/dist/agent/effect-ledger/remote-idempotency.d.ts +5 -0
  5. package/dist/agent/effect-ledger/store.d.ts +9 -1
  6. package/dist/agent/effect-ledger/types.d.ts +6 -0
  7. package/dist/agent/facets/derive.aggregate.d.ts +1 -0
  8. package/dist/agent/facets/journal-adapter.d.ts +1 -0
  9. package/dist/agent/hooks.d.ts +1 -0
  10. package/dist/agent/lsp/repo-map.d.ts +11 -0
  11. package/dist/agent/outcomes/commit-survival-artifacts.d.ts +6 -0
  12. package/dist/agent/outcomes/compute-outcomes.d.ts +21 -0
  13. package/dist/agent/outcomes/git-range.d.ts +6 -0
  14. package/dist/agent/outcomes/index.d.ts +5 -0
  15. package/dist/agent/outcomes/outcomes-input.d.ts +22 -0
  16. package/dist/agent/outcomes/outcomes-ledger.d.ts +13 -0
  17. package/dist/agent/outcomes/outcomes-v1.schema.d.ts +93 -0
  18. package/dist/agent/outcomes/schema.d.ts +47 -0
  19. package/dist/agent/outcomes/session-end-hook.d.ts +3 -0
  20. package/dist/agent/outcomes/session-outcomes.d.ts +9 -0
  21. package/dist/agent/tools/compose-executor.node-build.d.ts +4 -0
  22. package/dist/agent/tools/compose-node-results.d.ts +8 -0
  23. package/dist/agent/tools/handlers/artifact.d.ts +8 -0
  24. package/dist/agent/tools/handlers/bash-sandbox.d.ts +12 -0
  25. package/dist/agent/tools/handlers/bash-sandbox.paths.d.ts +5 -0
  26. package/dist/agent/tools/handlers/worktree-managed.d.ts +1 -1
  27. package/dist/agent/tools/handlers/worktree.d.ts +1 -1
  28. package/dist/agent/tools/handlers/write-denylist.d.ts +1 -0
  29. package/dist/agent/tools/schemas.artifact.d.ts +5 -0
  30. package/dist/agent/trace/events.d.ts +3 -0
  31. package/dist/agent/trace/receipt.d.ts +4 -76
  32. package/dist/agent/trace/receipt.types.d.ts +81 -0
  33. package/dist/agent/trace/types.d.ts +1 -0
  34. package/dist/cli/errors/classifier.d.ts +1 -1
  35. package/dist/cli.mjs +676 -653
  36. package/dist/config/env.d.ts +15 -0
  37. package/dist/config/env.sandbox.d.ts +8 -0
  38. package/dist/config/env.tools.d.ts +8 -0
  39. package/dist/index.mjs +468 -458
  40. package/dist/insights/aggregators/guardrail-false-positives.d.ts +2 -0
  41. package/dist/paths.d.ts +1 -0
  42. package/dist/paths.experiments.d.ts +1 -0
  43. package/dist/telegram.mjs +529 -514
  44. package/dist/utils/errors.d.ts +2 -0
  45. package/dist/web-ui-assets/assets/{angular-html-D9HxDckB.js → angular-html-DCf9mK03.js} +1 -1
  46. package/dist/web-ui-assets/assets/{angular-ts-CU-2-qNu.js → angular-ts-BhxpQMSX.js} +1 -1
  47. package/dist/web-ui-assets/assets/{apl-CjRnf8iv.js → apl-A-r0G4J9.js} +1 -1
  48. package/dist/web-ui-assets/assets/{astro-BeJmvzqF.js → astro-D-lKZ4j-.js} +1 -1
  49. package/dist/web-ui-assets/assets/{blade-B-b54web.js → blade-DVJMqlao.js} +1 -1
  50. package/dist/web-ui-assets/assets/{c-BB8Pfjsa.js → c-ChOtJbk5.js} +1 -1
  51. package/dist/web-ui-assets/assets/{chapel-BPpnrh4V.js → chapel-BMoxzG78.js} +1 -1
  52. package/dist/web-ui-assets/assets/{cobol-BwwGtgEh.js → cobol-Dl2G0XNt.js} +1 -1
  53. package/dist/web-ui-assets/assets/{coffee-ilL4_8aT.js → coffee-C7XZmp80.js} +1 -1
  54. package/dist/web-ui-assets/assets/{cpp-moR8pzFi.js → cpp-MtUg-XmI.js} +1 -1
  55. package/dist/web-ui-assets/assets/{crystal-J88aQzxf.js → crystal-gcgYLp6N.js} +1 -1
  56. package/dist/web-ui-assets/assets/{css-fKeg4Z2o.js → css-BWD8iFC4.js} +1 -1
  57. package/dist/web-ui-assets/assets/{dist-Dd0e8ZPM.js → dist-Dfom6M-h.js} +2 -2
  58. package/dist/web-ui-assets/assets/{edge-CaGjLI0R.js → edge-A-RiO_d5.js} +1 -1
  59. package/dist/web-ui-assets/assets/{elixir-BVyPPV6a.js → elixir-C64Dvsrv.js} +1 -1
  60. package/dist/web-ui-assets/assets/{elm-CIqALtqh.js → elm-BMaGn-ln.js} +1 -1
  61. package/dist/web-ui-assets/assets/{erb-BHaTiy6b.js → erb-DE6vUOcN.js} +1 -1
  62. package/dist/web-ui-assets/assets/{git-rebase-Bw9lRZ3B.js → git-rebase-B6hNon5K.js} +1 -1
  63. package/dist/web-ui-assets/assets/{glimmer-js-uxjWrvye.js → glimmer-js-CcHgpHb0.js} +1 -1
  64. package/dist/web-ui-assets/assets/{glimmer-ts-rPLZ6DTy.js → glimmer-ts-LIqxCH7j.js} +1 -1
  65. package/dist/web-ui-assets/assets/{glsl-TwBArQ34.js → glsl-BNSGTVh1.js} +1 -1
  66. package/dist/web-ui-assets/assets/{graphql-_6xxTmcw.js → graphql-DeC9aTP2.js} +1 -1
  67. package/dist/web-ui-assets/assets/{hack-BBdbXDKi.js → hack-9SzRPAR0.js} +1 -1
  68. package/dist/web-ui-assets/assets/{haml-CGwAOG_L.js → haml-Dwp0BYaN.js} +1 -1
  69. package/dist/web-ui-assets/assets/{handlebars-V6069UIv.js → handlebars-C4ijU-gq.js} +1 -1
  70. package/dist/web-ui-assets/assets/{html-DlFVgVkx.js → html-D33eFKwq.js} +1 -1
  71. package/dist/web-ui-assets/assets/{html-derivative-C3lmdCJP.js → html-derivative-BUpn0UHC.js} +1 -1
  72. package/dist/web-ui-assets/assets/{http-Bez3OCbh.js → http-Q8dkf-8L.js} +1 -1
  73. package/dist/web-ui-assets/assets/{hurl-BSiqIbZR.js → hurl-C_CiLZEm.js} +1 -1
  74. package/dist/web-ui-assets/assets/{index-DxraiEXA.js → index-BnepvRha.js} +1 -1
  75. package/dist/web-ui-assets/assets/index-d_FWGInx.css +2 -0
  76. package/dist/web-ui-assets/assets/{java-DHCJgaYo.js → java-COFsz4CM.js} +1 -1
  77. package/dist/web-ui-assets/assets/{javascript-UwR15CHn.js → javascript-CEQuyZ56.js} +1 -1
  78. package/dist/web-ui-assets/assets/{jinja-vv0QfMTf.js → jinja-B4Eun3pt.js} +1 -1
  79. package/dist/web-ui-assets/assets/{jison-BdsuKmFE.js → jison-tLuAFFit.js} +1 -1
  80. package/dist/web-ui-assets/assets/{json-DNO2HE_Y.js → json-DZU3D0bq.js} +1 -1
  81. package/dist/web-ui-assets/assets/{jsx-U1H5CsFs.js → jsx-BfqE2tIX.js} +1 -1
  82. package/dist/web-ui-assets/assets/{julia-C330XKUM.js → julia-Bg58X7eO.js} +1 -1
  83. package/dist/web-ui-assets/assets/{just-RaEEprm5.js → just-CVNLdJYO.js} +1 -1
  84. package/dist/web-ui-assets/assets/{latex-BkviF63W.js → latex-BRnY3g6r.js} +1 -1
  85. package/dist/web-ui-assets/assets/{liquid-BXBmBztm.js → liquid-BYen3o5e.js} +1 -1
  86. package/dist/web-ui-assets/assets/{lua-BaWbDujq.js → lua-B8U96eiE.js} +1 -1
  87. package/dist/web-ui-assets/assets/{marko-BQsI2D3T.js → marko-B1fE5lrh.js} +1 -1
  88. package/dist/web-ui-assets/assets/{mdc-D0P-XiqT.js → mdc-DNluPBCG.js} +1 -1
  89. package/dist/web-ui-assets/assets/{nginx-Bs26owa3.js → nginx-BEIgI1np.js} +1 -1
  90. package/dist/web-ui-assets/assets/{nim-DnTXTHij.js → nim-DjNGhN30.js} +1 -1
  91. package/dist/web-ui-assets/assets/{org-Bda-wEk8.js → org-BrubVTtT.js} +1 -1
  92. package/dist/web-ui-assets/assets/{perl-CazUTglO.js → perl-jjSNef0Y.js} +1 -1
  93. package/dist/web-ui-assets/assets/{php-beb386wl.js → php-Dm0txZK9.js} +1 -1
  94. package/dist/web-ui-assets/assets/{pug-BNMtKALj.js → pug-Ctu1Bor1.js} +1 -1
  95. package/dist/web-ui-assets/assets/{qml-B0K9OgdI.js → qml-B7bzvrzA.js} +1 -1
  96. package/dist/web-ui-assets/assets/{r-DBHyJsFw.js → r-CWCDQwva.js} +1 -1
  97. package/dist/web-ui-assets/assets/{razor-CgwxupjW.js → razor-DR2Qrcao.js} +1 -1
  98. package/dist/web-ui-assets/assets/{regexp-DxkUG43n.js → regexp-CAziu7CR.js} +1 -1
  99. package/dist/web-ui-assets/assets/{rst-BHb8uy7y.js → rst-NN_UHiab.js} +1 -1
  100. package/dist/web-ui-assets/assets/{ruby-CkhP59zd.js → ruby-C4m8FOkc.js} +1 -1
  101. package/dist/web-ui-assets/assets/{sas-C4mIXV2D.js → sas-46U4dCZ-.js} +1 -1
  102. package/dist/web-ui-assets/assets/{scss-BGTKsyE5.js → scss-Dyk-lzNF.js} +1 -1
  103. package/dist/web-ui-assets/assets/{shellscript-BhvAyKWQ.js → shellscript-BWzwU0qn.js} +1 -1
  104. package/dist/web-ui-assets/assets/{shellsession-BIZJ_qLc.js → shellsession-D4AFj3By.js} +1 -1
  105. package/dist/web-ui-assets/assets/{soy-P6r6yOzU.js → soy-CpaN6S68.js} +1 -1
  106. package/dist/web-ui-assets/assets/{sql-BVBigw-2.js → sql-DCLq_fXo.js} +1 -1
  107. package/dist/web-ui-assets/assets/{stata-54jAGrgC.js → stata-FwHLn1R1.js} +1 -1
  108. package/dist/web-ui-assets/assets/{surrealql-C8HhiqK7.js → surrealql-BeWhSd2D.js} +1 -1
  109. package/dist/web-ui-assets/assets/{svelte-BueIeAvu.js → svelte-CnZf7drh.js} +1 -1
  110. package/dist/web-ui-assets/assets/{templ-Ofro3fhP.js → templ-Dh4CA0s0.js} +1 -1
  111. package/dist/web-ui-assets/assets/{tex-DJIpqw-n.js → tex-RGYg1I3G.js} +1 -1
  112. package/dist/web-ui-assets/assets/{ts-tags-ZY2vEszt.js → ts-tags-BZDbq4dl.js} +1 -1
  113. package/dist/web-ui-assets/assets/{tsx-WIiPFMv9.js → tsx-BZgu6mNc.js} +1 -1
  114. package/dist/web-ui-assets/assets/{twig-m538Ma7t.js → twig-Eyj6jtDI.js} +1 -1
  115. package/dist/web-ui-assets/assets/{typescript-Clk_YKGZ.js → typescript-C6GNGFv3.js} +1 -1
  116. package/dist/web-ui-assets/assets/{typst-F1lfBqcy.js → typst-BJ1WFNU8.js} +1 -1
  117. package/dist/web-ui-assets/assets/{vue-BEXL-pWx.js → vue-BMgvGk9o.js} +1 -1
  118. package/dist/web-ui-assets/assets/{vue-html-BWHrTaZI.js → vue-html-CnkJqb-F.js} +1 -1
  119. package/dist/web-ui-assets/assets/{vue-vine-vuvJlse5.js → vue-vine-CHwvpYeL.js} +1 -1
  120. package/dist/web-ui-assets/assets/{xml-CFxeGMBh.js → xml-Bp_7e8sG.js} +1 -1
  121. package/dist/web-ui-assets/assets/{xsl-Gm-otioc.js → xsl-Ccf44tZE.js} +1 -1
  122. package/dist/web-ui-assets/assets/{yaml-B2Lu9Cr1.js → yaml-B9d3ST_l.js} +1 -1
  123. package/dist/web-ui-assets/index.html +2 -2
  124. package/package.json +8 -1
  125. package/dist/web-ui-assets/assets/index-DBXn_P4Z.css +0 -2
@@ -1,8 +1,8 @@
1
1
  import type { ArtifactListFilter, ArtifactPutOptions, ArtifactRecord } from './types.js';
2
2
  export declare function artifactPut(opts: ArtifactPutOptions, _storeDir?: string, _indexPath?: string): Promise<ArtifactRecord>;
3
- export declare function artifactGet(id: string, _indexPath?: string): ArtifactRecord | undefined;
4
- export declare function artifactList(filter?: ArtifactListFilter, _indexPath?: string): ArtifactRecord[];
3
+ export declare function artifactGet(id: string, _indexPath?: string, maxIndexBytes?: number): ArtifactRecord | undefined;
4
+ export declare function artifactList(filter?: ArtifactListFilter, _indexPath?: string, maxIndexBytes?: number): ArtifactRecord[];
5
5
  export declare function artifactRead(id: string, _indexPath?: string): Promise<Buffer>;
6
- export declare function artifactCount(_indexPath?: string): number;
6
+ export declare function artifactCount(_indexPath?: string, maxIndexBytes?: number): number;
7
7
  export declare function compactIndex(_indexPath?: string): Promise<void>;
8
8
  export declare function listStoreBlobs(_storeDir?: string): string[];
@@ -0,0 +1,6 @@
1
+ export declare class DaemonAlreadyRunningError extends Error {
2
+ readonly ownerPid: number | null;
3
+ constructor(lockPath: string, ownerPid: number | null);
4
+ }
5
+ export declare function getDaemonLockPath(instanceId?: string): string;
6
+ export declare function acquireDaemonLock(lockPath?: string, platform?: string): Promise<() => Promise<void>>;
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_OAUTH_REFRESH_INTERVAL_MS: number;
2
+ export declare function startOAuthRefreshTimer(refresher: (() => Promise<unknown>) | undefined, intervalMs?: number): ReturnType<typeof setInterval> | undefined;
@@ -0,0 +1,5 @@
1
+ import type { EffectRecord } from './types.js';
2
+ export declare function remoteIdempotencyInput(toolName: string, input: unknown, prior: EffectRecord | null): {
3
+ updatedInput?: Record<string, unknown>;
4
+ remoteIdempotencyKey?: string;
5
+ };
@@ -1,4 +1,5 @@
1
- import type { EffectRecord, EffectQuery, PendingEffectInput, ExecuteEffectInput } from './types.js';
1
+ import { type InputBudget } from '../outcomes/outcomes-input.js';
2
+ import type { EffectRecord, EffectQuery, PendingEffectInput, ExecuteEffectInput, EffectRemoteRead } from './types.js';
2
3
  export declare class EffectStore {
3
4
  private readonly path;
4
5
  private cachedRecords;
@@ -7,8 +8,15 @@ export declare class EffectStore {
7
8
  private invalidateCache;
8
9
  writePending(input: PendingEffectInput): EffectRecord;
9
10
  updateStatus(input: ExecuteEffectInput): Promise<EffectRecord>;
11
+ reconcile(id: string, readRemote: EffectRemoteRead): Promise<EffectRecord>;
10
12
  acknowledgeRetry(id: string): Promise<EffectRecord>;
11
13
  findByIdempotencyKey(key: string, sessionId?: string): Promise<EffectRecord | null>;
12
14
  query(filters?: EffectQuery): Promise<EffectRecord[]>;
13
15
  all(): Promise<EffectRecord[]>;
14
16
  }
17
+ export interface ReadEffectsForSessionOptions {
18
+ path?: string;
19
+ maxRecords?: number;
20
+ budget?: InputBudget;
21
+ }
22
+ export declare function readEffectsForSession(sessionId: string, opts?: ReadEffectsForSessionOptions): Promise<EffectRecord[]>;
@@ -10,6 +10,7 @@ export interface EffectRecord {
10
10
  taskId?: string;
11
11
  timestamp: number;
12
12
  retryOf?: string;
13
+ remoteIdempotencyKey?: string;
13
14
  retryAcknowledgedAt?: number;
14
15
  result?: unknown;
15
16
  reconciledAt?: number;
@@ -27,7 +28,12 @@ export interface PendingEffectInput {
27
28
  sessionId?: string;
28
29
  taskId?: string;
29
30
  retryOf?: string;
31
+ remoteIdempotencyKey?: string;
30
32
  }
33
+ export type EffectRemoteRead = (record: Readonly<EffectRecord>) => Promise<{
34
+ matched: boolean;
35
+ evidence: unknown;
36
+ }>;
31
37
  export interface ExecuteEffectInput {
32
38
  id: string;
33
39
  status: Exclude<EffectStatus, 'pending'>;
@@ -2,6 +2,7 @@ import { type SubagentInvocation, type ToolEventInput } from './schema.js';
2
2
  export declare const EVIDENCE_CAP = 50;
3
3
  export declare function parseInput(input: string | undefined): Record<string, unknown> | undefined;
4
4
  export declare function asString(v: unknown): string | undefined;
5
+ export declare function patchApplyPaths(parsed: Record<string, unknown> | undefined): string[];
5
6
  export declare function dedupeToolEvents(events: ToolEventInput[]): ToolEventInput[];
6
7
  export interface AggregateToolEventsResult {
7
8
  toolCounts: Record<string, number>;
@@ -2,6 +2,7 @@ import type { SubagentToolSummary, ToolEventInput } from './schema.js';
2
2
  import type { JournalRecord } from '../journal/types.js';
3
3
  export interface JournalAdapterOptions {
4
4
  resultTextCap?: number;
5
+ checkBudget?: () => void;
5
6
  }
6
7
  export declare function journalRecordsToToolEvents(records: readonly JournalRecord[], options?: JournalAdapterOptions): ToolEventInput[];
7
8
  export declare function summarizeSubagentJournal(subagentId: string, records: readonly JournalRecord[]): SubagentToolSummary;
@@ -6,6 +6,7 @@ export interface HookDecision {
6
6
  continue?: boolean;
7
7
  decision?: 'block' | 'approve';
8
8
  reason?: string;
9
+ ruleId?: string;
9
10
  riskCategory?: import('./risk-classifier.js').RiskCategory;
10
11
  injectContext?: string;
11
12
  updatedInput?: Record<string, unknown>;
@@ -0,0 +1,11 @@
1
+ import { type LspServerPool } from './pool.js';
2
+ export declare const MAX_SYMBOLS = 200;
3
+ export declare const MAX_LINES = 80;
4
+ export interface RepoMapOptions {
5
+ readonly rootDir?: string;
6
+ readonly timeoutMs?: number;
7
+ readonly pool?: LspServerPool;
8
+ readonly serverCmd?: readonly string[];
9
+ readonly signal?: AbortSignal;
10
+ }
11
+ export declare function buildRepoMap(opts?: RepoMapOptions): Promise<string>;
@@ -0,0 +1,6 @@
1
+ import type { Artifacts, Vote } from './schema.js';
2
+ import { type CheckAncestor, type CheckRevert } from './lf-delayed.js';
3
+ export declare function commitSurvivalForArtifacts(artifacts: Artifacts, deps: {
4
+ checkAncestor: CheckAncestor;
5
+ checkRevert: CheckRevert;
6
+ }, now: string): Promise<Vote[]>;
@@ -0,0 +1,21 @@
1
+ import type { EffectRecord } from '../effect-ledger/types.js';
2
+ import type { ToolEventInput } from '../facets/schema.js';
3
+ import { type OutcomeCommit, type OutcomeSchedule, type OutcomesV1 } from './outcomes-v1.schema.js';
4
+ export interface GitLogEntry {
5
+ sha: string;
6
+ subject: string;
7
+ repo: string;
8
+ }
9
+ export interface ComputeOutcomesInput {
10
+ cwd: string;
11
+ startHead: string | null;
12
+ endHead: string | null;
13
+ gitLog?: readonly GitLogEntry[];
14
+ ledgerEntries: readonly (EffectRecord | unknown)[];
15
+ toolEvents: readonly ToolEventInput[];
16
+ lastAssistantMessage: string | null;
17
+ }
18
+ export declare function mergeCommits(gitLog: readonly OutcomeCommit[], ledger: readonly OutcomeCommit[]): OutcomeCommit[];
19
+ export declare function filesFromToolEvents(events: readonly ToolEventInput[], cwd: string): string[];
20
+ export declare function schedulesFromToolEvents(events: readonly ToolEventInput[]): OutcomeSchedule[];
21
+ export declare function computeOutcomes(input: ComputeOutcomesInput): OutcomesV1;
@@ -0,0 +1,6 @@
1
+ import type { GitLogEntry } from './compute-outcomes.js';
2
+ export interface GitLogRangeOptions {
3
+ timeoutMs?: number;
4
+ signal?: AbortSignal;
5
+ }
6
+ export declare function gitLogRange(cwd: string, startHead: string | null, endHead: string | null, opts?: GitLogRangeOptions): Promise<GitLogEntry[]>;
@@ -5,3 +5,8 @@ export { lfPrFate, lfCommitSurvival } from './lf-delayed.js';
5
5
  export { combine } from './combine.js';
6
6
  export { createOutcomeSessionEndHook } from './session-end-hook.js';
7
7
  export { createChildAttributionHook } from './child-attribution.js';
8
+ export { computeOutcomes } from './compute-outcomes.js';
9
+ export type { ComputeOutcomesInput, GitLogEntry } from './compute-outcomes.js';
10
+ export { gitLogRange } from './git-range.js';
11
+ export { OutcomesV1Schema } from './outcomes-v1.schema.js';
12
+ export type { OutcomesV1 } from './outcomes-v1.schema.js';
@@ -0,0 +1,22 @@
1
+ import type { SessionMeta } from '../session/session-meta.js';
2
+ export interface InputBudget {
3
+ signal: AbortSignal;
4
+ deadline: number;
5
+ }
6
+ export declare function checkBudget(budget: InputBudget): void;
7
+ export declare function boundedLines(path: string, budget: InputBudget, maxBytes?: number): AsyncGenerator<string>;
8
+ export declare function readOutcomesMeta(sessionId: string, budget: InputBudget): Promise<SessionMeta | null>;
9
+ export declare function readOutcomesJournal(sessionId: string, budget: InputBudget): Promise<{
10
+ toolEvents: {
11
+ [x: string]: unknown;
12
+ toolName: string;
13
+ toolUseId?: string | undefined;
14
+ input?: string | undefined;
15
+ inputRaw?: string | undefined;
16
+ result?: string | undefined;
17
+ isError?: boolean | undefined;
18
+ incomplete?: boolean | undefined;
19
+ partialNodeCount?: number | undefined;
20
+ }[];
21
+ lastAssistantMessage: string | null;
22
+ }>;
@@ -0,0 +1,13 @@
1
+ import type { OutcomeCommit, OutcomePr, OutcomeService, PrAction } from './outcomes-v1.schema.js';
2
+ interface LedgerEffect {
3
+ command: string;
4
+ result: string;
5
+ }
6
+ export declare function settledEffects(entries: readonly unknown[]): LedgerEffect[];
7
+ export declare function repoFromCommand(command: string, cwd: string): string;
8
+ export declare function ledgerCommits(effects: readonly LedgerEffect[], cwd: string): OutcomeCommit[];
9
+ export declare function prActionFromCommand(command: string): PrAction;
10
+ export declare function addPr(list: OutcomePr[], pr: OutcomePr): void;
11
+ export declare function ledgerPrs(effects: readonly LedgerEffect[]): OutcomePr[];
12
+ export declare function ledgerServices(effects: readonly LedgerEffect[]): OutcomeService[];
13
+ export {};
@@ -0,0 +1,93 @@
1
+ import { z } from 'zod';
2
+ export declare const OUTCOMES_COMMITS_CAP = 200;
3
+ export declare const OUTCOMES_PRS_CAP = 50;
4
+ export declare const OUTCOMES_FILES_CAP = 500;
5
+ export declare const ShaSchema: z.ZodString;
6
+ export declare const OutcomeCommitSchema: z.ZodObject<{
7
+ sha: z.ZodString;
8
+ repo: z.ZodString;
9
+ subject: z.ZodString;
10
+ source: z.ZodEnum<{
11
+ tool_result: "tool_result";
12
+ git_log: "git_log";
13
+ effect_ledger: "effect_ledger";
14
+ }>;
15
+ }, z.core.$strip>;
16
+ export type OutcomeCommit = z.infer<typeof OutcomeCommitSchema>;
17
+ export declare const PrActionSchema: z.ZodEnum<{
18
+ unknown: "unknown";
19
+ create: "create";
20
+ merge: "merge";
21
+ update: "update";
22
+ }>;
23
+ export type PrAction = z.infer<typeof PrActionSchema>;
24
+ export declare const OutcomePrSchema: z.ZodObject<{
25
+ url: z.ZodString;
26
+ action: z.ZodEnum<{
27
+ unknown: "unknown";
28
+ create: "create";
29
+ merge: "merge";
30
+ update: "update";
31
+ }>;
32
+ }, z.core.$strip>;
33
+ export type OutcomePr = z.infer<typeof OutcomePrSchema>;
34
+ export declare const OutcomeScheduleSchema: z.ZodObject<{
35
+ id: z.ZodString;
36
+ action: z.ZodEnum<{
37
+ cancel: "cancel";
38
+ create: "create";
39
+ update: "update";
40
+ }>;
41
+ }, z.core.$strip>;
42
+ export type OutcomeSchedule = z.infer<typeof OutcomeScheduleSchema>;
43
+ export declare const OutcomeServiceSchema: z.ZodObject<{
44
+ name: z.ZodString;
45
+ action: z.ZodString;
46
+ }, z.core.$strip>;
47
+ export type OutcomeService = z.infer<typeof OutcomeServiceSchema>;
48
+ export declare const OutcomesV1Schema: z.ZodObject<{
49
+ schemaVersion: z.ZodLiteral<1>;
50
+ cwd: z.ZodString;
51
+ startHead: z.ZodNullable<z.ZodString>;
52
+ endHead: z.ZodNullable<z.ZodString>;
53
+ commits: z.ZodArray<z.ZodObject<{
54
+ sha: z.ZodString;
55
+ repo: z.ZodString;
56
+ subject: z.ZodString;
57
+ source: z.ZodEnum<{
58
+ tool_result: "tool_result";
59
+ git_log: "git_log";
60
+ effect_ledger: "effect_ledger";
61
+ }>;
62
+ }, z.core.$strip>>;
63
+ prs: z.ZodArray<z.ZodObject<{
64
+ url: z.ZodString;
65
+ action: z.ZodEnum<{
66
+ unknown: "unknown";
67
+ create: "create";
68
+ merge: "merge";
69
+ update: "update";
70
+ }>;
71
+ }, z.core.$strip>>;
72
+ filesChanged: z.ZodArray<z.ZodString>;
73
+ filesChangedTruncated: z.ZodBoolean;
74
+ schedules: z.ZodArray<z.ZodObject<{
75
+ id: z.ZodString;
76
+ action: z.ZodEnum<{
77
+ cancel: "cancel";
78
+ create: "create";
79
+ update: "update";
80
+ }>;
81
+ }, z.core.$strip>>;
82
+ services: z.ZodArray<z.ZodObject<{
83
+ name: z.ZodString;
84
+ action: z.ZodString;
85
+ }, z.core.$strip>>;
86
+ terminalState: z.ZodNullable<z.ZodEnum<{
87
+ blocked: "blocked";
88
+ done: "done";
89
+ interrupted: "interrupted";
90
+ asking: "asking";
91
+ }>>;
92
+ }, z.core.$strip>;
93
+ export type OutcomesV1 = z.infer<typeof OutcomesV1Schema>;
@@ -31,6 +31,7 @@ export declare const ArtifactsSchema: z.ZodObject<{
31
31
  commits: z.ZodArray<z.ZodString>;
32
32
  prs: z.ZodArray<z.ZodString>;
33
33
  repo: z.ZodNullable<z.ZodString>;
34
+ commitRepos: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
34
35
  }, z.core.$strip>;
35
36
  export type Artifacts = z.infer<typeof ArtifactsSchema>;
36
37
  export declare const VerifiedOutcomeSchema: z.ZodObject<{
@@ -64,6 +65,7 @@ export declare const VerifiedOutcomeSchema: z.ZodObject<{
64
65
  commits: z.ZodArray<z.ZodString>;
65
66
  prs: z.ZodArray<z.ZodString>;
66
67
  repo: z.ZodNullable<z.ZodString>;
68
+ commitRepos: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
67
69
  }, z.core.$strip>;
68
70
  votes: z.ZodArray<z.ZodObject<{
69
71
  lf: z.ZodString;
@@ -98,6 +100,51 @@ export declare const VerifiedOutcomeSchema: z.ZodObject<{
98
100
  normal: "normal";
99
101
  }>>;
100
102
  session_ended_at: z.ZodOptional<z.ZodString>;
103
+ outcomes: z.ZodOptional<z.ZodNullable<z.ZodObject<{
104
+ schemaVersion: z.ZodLiteral<1>;
105
+ cwd: z.ZodString;
106
+ startHead: z.ZodNullable<z.ZodString>;
107
+ endHead: z.ZodNullable<z.ZodString>;
108
+ commits: z.ZodArray<z.ZodObject<{
109
+ sha: z.ZodString;
110
+ repo: z.ZodString;
111
+ subject: z.ZodString;
112
+ source: z.ZodEnum<{
113
+ tool_result: "tool_result";
114
+ git_log: "git_log";
115
+ effect_ledger: "effect_ledger";
116
+ }>;
117
+ }, z.core.$strip>>;
118
+ prs: z.ZodArray<z.ZodObject<{
119
+ url: z.ZodString;
120
+ action: z.ZodEnum<{
121
+ unknown: "unknown";
122
+ create: "create";
123
+ merge: "merge";
124
+ update: "update";
125
+ }>;
126
+ }, z.core.$strip>>;
127
+ filesChanged: z.ZodArray<z.ZodString>;
128
+ filesChangedTruncated: z.ZodBoolean;
129
+ schedules: z.ZodArray<z.ZodObject<{
130
+ id: z.ZodString;
131
+ action: z.ZodEnum<{
132
+ cancel: "cancel";
133
+ create: "create";
134
+ update: "update";
135
+ }>;
136
+ }, z.core.$strip>>;
137
+ services: z.ZodArray<z.ZodObject<{
138
+ name: z.ZodString;
139
+ action: z.ZodString;
140
+ }, z.core.$strip>>;
141
+ terminalState: z.ZodNullable<z.ZodEnum<{
142
+ blocked: "blocked";
143
+ done: "done";
144
+ interrupted: "interrupted";
145
+ asking: "asking";
146
+ }>>;
147
+ }, z.core.$strip>>>;
101
148
  }, z.core.$strip>;
102
149
  export type VerifiedOutcome = z.infer<typeof VerifiedOutcomeSchema>;
103
150
  export type OutcomeLabel = VerifiedOutcome['label'];
@@ -1,2 +1,5 @@
1
1
  import type { HookHandler } from '../hooks.js';
2
+ import type { OutcomesV1 } from './outcomes-v1.schema.js';
3
+ import type { Artifacts } from './schema.js';
2
4
  export declare function createOutcomeSessionEndHook(): HookHandler;
5
+ export declare function artifactsFromOutcomes(o: OutcomesV1): Artifacts;
@@ -0,0 +1,9 @@
1
+ import { type OutcomesV1 } from './outcomes-v1.schema.js';
2
+ export interface SessionOutcomesContext {
3
+ cwd?: string;
4
+ }
5
+ export declare function _resetSessionOutcomesCache(): void;
6
+ export declare function readEndHead(cwd: string, signal?: AbortSignal): Promise<string | null>;
7
+ export declare function getSessionOutcomes(sessionId: string, ctx?: SessionOutcomesContext, opts?: {
8
+ timeoutMs?: number;
9
+ }): Promise<OutcomesV1 | null>;
@@ -6,6 +6,10 @@ export type ComposeNodeBuildResult = SubagentDAGNode | {
6
6
  attachmentError: true;
7
7
  nodeId: string;
8
8
  error: Error;
9
+ } | {
10
+ usageBlocked: true;
11
+ nodeId: string;
12
+ notice: string;
9
13
  };
10
14
  export interface BuildComposeDagNodeArgs {
11
15
  node: ComposeNodeInput;
@@ -3,6 +3,10 @@ type BuildResult = SubagentDAGNode | {
3
3
  attachmentError: true;
4
4
  nodeId: string;
5
5
  error: Error;
6
+ } | {
7
+ usageBlocked: true;
8
+ nodeId: string;
9
+ notice: string;
6
10
  };
7
11
  export declare function splitComposeNodeResults(results: BuildResult[]): {
8
12
  dagNodes: SubagentDAGNode[];
@@ -10,5 +14,9 @@ export declare function splitComposeNodeResults(results: BuildResult[]): {
10
14
  id: string;
11
15
  error: Error;
12
16
  }>;
17
+ usageBlocks: Array<{
18
+ id: string;
19
+ notice: string;
20
+ }>;
13
21
  };
14
22
  export {};
@@ -0,0 +1,8 @@
1
+ import type { ToolHandler } from '../types.js';
2
+ interface ArtifactHandlerOptions {
3
+ cwd?: string;
4
+ storeDir?: string;
5
+ indexPath?: string;
6
+ }
7
+ export declare function createArtifactHandlers(opts?: ArtifactHandlerOptions): Map<string, ToolHandler>;
8
+ export {};
@@ -0,0 +1,12 @@
1
+ export type SandboxPolicy = 'workspace-write' | 'read-only' | 'off';
2
+ export interface SandboxedCommand {
3
+ readonly shell: string;
4
+ readonly args: readonly string[];
5
+ readonly command: string;
6
+ readonly sandboxed: boolean;
7
+ }
8
+ export declare function parseSandboxPolicy(): SandboxPolicy | undefined;
9
+ export declare function _resetBwrapCacheForTests(): void;
10
+ export declare function _forceBwrapUnavailableForTests(): void;
11
+ export declare function buildSandboxedCommand(command: string, policy: SandboxPolicy, cwd: string | undefined, childTemp?: string): SandboxedCommand;
12
+ export declare function sandboxDescription(policy: SandboxPolicy): string;
@@ -0,0 +1,5 @@
1
+ export declare function canonicalSandboxPath(input: string): string;
2
+ export declare function sandboxWriteFloor(): readonly string[];
3
+ export declare function sandboxFloorAncestors(floor: readonly string[]): readonly string[];
4
+ export declare function assertDisjointSandboxGrants(grants: readonly string[], floor: readonly string[]): void;
5
+ export declare function sandboxSchemeString(value: string): string;
@@ -5,7 +5,7 @@ export interface RepoContext {
5
5
  repoRoot: string;
6
6
  afkWorktreesRoot: string;
7
7
  }
8
- export declare function resolveRepoContext(execFile: ExecFileFn, cwd: string): Promise<RepoContext>;
8
+ export declare function resolveRepoContext(execFile: ExecFileFn, cwd: string, explicitRepo?: string): Promise<RepoContext>;
9
9
  export declare function sanitizeSlug(name: string): string;
10
10
  export declare function detectRemoteDefaultRef(execFile: ExecFileFn, repoRoot: string): Promise<string | undefined>;
11
11
  export declare function resolveAnchorBaseRef(execFile: ExecFileFn, anchor: string): Promise<string>;
@@ -4,4 +4,4 @@ export interface WorktreeHandlerDeps {
4
4
  execFile?: ExecFileFn;
5
5
  generateSuffix?: () => string;
6
6
  }
7
- export declare function createWorktreeHandler(cwd?: string, deps?: WorktreeHandlerDeps): ToolHandler;
7
+ export declare function createWorktreeHandler(cwdFallback?: string, deps?: WorktreeHandlerDeps): ToolHandler;
@@ -1,4 +1,5 @@
1
1
  export declare const BUILTIN_WRITE_DENYLIST: readonly string[];
2
+ export declare function getUnresolvedWriteDenylist(): readonly string[];
2
3
  export declare function getWriteDenylist(): readonly string[];
3
4
  export declare function _resetWriteDenylistCacheForTests(): void;
4
5
  export declare function safeRealpath(p: string): string;
@@ -0,0 +1,5 @@
1
+ import type { AnthropicToolDef } from './types.js';
2
+ export declare const artifactGetTool: AnthropicToolDef;
3
+ export declare const artifactListTool: AnthropicToolDef;
4
+ export declare const artifactReadTool: AnthropicToolDef;
5
+ export declare const artifactToolSchemas: readonly [AnthropicToolDef, AnthropicToolDef, AnthropicToolDef];
@@ -137,6 +137,7 @@ export declare const HookDecisionPayloadSchema: z.ZodObject<{
137
137
  "outbound-message": "outbound-message";
138
138
  "release-boundary": "release-boundary";
139
139
  }>>;
140
+ ruleId: z.ZodOptional<z.ZodString>;
140
141
  }, z.core.$strip>;
141
142
  export declare const HookSummaryPayloadSchema: z.ZodObject<{
142
143
  scope: z.ZodLiteral<"root-session-including-subagents">;
@@ -415,6 +416,7 @@ export declare const TraceEventInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject
415
416
  "outbound-message": "outbound-message";
416
417
  "release-boundary": "release-boundary";
417
418
  }>>;
419
+ ruleId: z.ZodOptional<z.ZodString>;
418
420
  }, z.core.$strip>;
419
421
  }, z.core.$strip>, z.ZodObject<{
420
422
  kind: z.ZodLiteral<"hook_summary">;
@@ -874,6 +876,7 @@ export declare const TraceEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
874
876
  "outbound-message": "outbound-message";
875
877
  "release-boundary": "release-boundary";
876
878
  }>>;
879
+ ruleId: z.ZodOptional<z.ZodString>;
877
880
  }, z.core.$strip>;
878
881
  }, z.core.$strip>, z.ZodObject<{
879
882
  ts: z.ZodString;
@@ -1,83 +1,10 @@
1
1
  import { renderReceiptMarkdown } from './receipt.render.js';
2
2
  import type { HookHandler } from '../hooks.js';
3
- import { type CostTokens, type SessionCostSource } from './cost.js';
4
- import { type JournalSummary } from './receipt.journal.js';
5
- import { type ClosureReason, type ToolFailureClass, type TraceEvent, type TraceEventKind } from './types.js';
3
+ import { type TraceEvent } from './types.js';
6
4
  export { renderReceiptMarkdown };
5
+ export { RECEIPT_SCHEMA_VERSION, type ReceiptMeta, type ReceiptToolFailure, type RunReceipt } from './receipt.types.js';
6
+ import { type ReceiptMeta, type RunReceipt } from './receipt.types.js';
7
7
  export { extractJournalSummary, type JournalSummary } from './receipt.journal.js';
8
- export declare const RECEIPT_SCHEMA_VERSION: 2;
9
- export interface ReceiptToolFailure {
10
- toolUseId: string;
11
- name: string;
12
- failureClass?: ToolFailureClass;
13
- durationMs: number;
14
- ts: string;
15
- truncated: boolean;
16
- exempt: boolean;
17
- subagentId?: string;
18
- }
19
- export interface RunReceipt {
20
- schemaVersion: typeof RECEIPT_SCHEMA_VERSION;
21
- generatedAt: string;
22
- witnessLabel: string;
23
- tracePath: string;
24
- sessionId?: string;
25
- endReason?: string;
26
- status: 'succeeded' | 'failed' | 'cancelled' | 'unknown';
27
- closureReason?: ClosureReason;
28
- lastStopReason?: string;
29
- guidance?: string;
30
- incomplete: boolean;
31
- startedAt?: string;
32
- endedAt?: string;
33
- durationMs?: number;
34
- toolCalls: {
35
- total: number;
36
- succeeded: number;
37
- errored: number;
38
- erroredNotable: number;
39
- refused: number;
40
- circuitBreakerHits: number;
41
- byTool: Record<string, {
42
- total: number;
43
- errored: number;
44
- }>;
45
- byFailureClass: Record<string, number>;
46
- };
47
- events: {
48
- total: number;
49
- byKind: Partial<Record<TraceEventKind, number>>;
50
- };
51
- subagents: {
52
- started: number;
53
- succeeded: number;
54
- failed: number;
55
- cancelled: number;
56
- };
57
- cost: {
58
- finalCostUsd?: number;
59
- turnCount?: number;
60
- tokens?: CostTokens;
61
- rootCostUsd?: number;
62
- subagentCostUsd?: number;
63
- totalCostUsd?: number;
64
- totalTokens?: CostTokens;
65
- costSource?: SessionCostSource;
66
- };
67
- failures: ReceiptToolFailure[];
68
- humanReviewRequired: boolean;
69
- humanReviewReasons: string[];
70
- limitations: string[];
71
- journalSummary?: JournalSummary;
72
- }
73
- export interface ReceiptMeta {
74
- tracePath: string;
75
- witnessLabel: string;
76
- sessionId?: string;
77
- endReason?: string;
78
- now?: Date;
79
- journalSummary?: JournalSummary;
80
- }
81
8
  export declare function parseTraceJsonl(raw: string): TraceEvent[];
82
9
  export declare function receiptPathsFor(tracePath: string): {
83
10
  label: string;
@@ -90,6 +17,7 @@ export interface WriteRunReceiptOptions {
90
17
  sessionId?: string;
91
18
  reason?: string;
92
19
  now?: Date;
20
+ cwd?: string;
93
21
  }
94
22
  export declare function writeRunReceipt(opts: WriteRunReceiptOptions): Promise<{
95
23
  label: string;