@agent-relay/factory 0.1.80 → 0.1.81

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 (49) hide show
  1. package/README.md +39 -5
  2. package/dist/cli/fleet.d.ts +8 -2
  3. package/dist/cli/fleet.d.ts.map +1 -1
  4. package/dist/cli/fleet.js +40 -4
  5. package/dist/cli/fleet.js.map +1 -1
  6. package/dist/config/schema.d.ts +9 -0
  7. package/dist/config/schema.d.ts.map +1 -1
  8. package/dist/config/schema.js +14 -3
  9. package/dist/config/schema.js.map +1 -1
  10. package/dist/fleet/relay-fleet-client.d.ts.map +1 -1
  11. package/dist/fleet/relay-fleet-client.js +50 -12
  12. package/dist/fleet/relay-fleet-client.js.map +1 -1
  13. package/dist/github/gh-identity.d.ts +44 -0
  14. package/dist/github/gh-identity.d.ts.map +1 -0
  15. package/dist/github/gh-identity.js +31 -0
  16. package/dist/github/gh-identity.js.map +1 -0
  17. package/dist/github/index.d.ts +3 -1
  18. package/dist/github/index.d.ts.map +1 -1
  19. package/dist/github/index.js +2 -1
  20. package/dist/github/index.js.map +1 -1
  21. package/dist/github/merge-gate.d.ts +22 -1
  22. package/dist/github/merge-gate.d.ts.map +1 -1
  23. package/dist/github/merge-gate.js +103 -24
  24. package/dist/github/merge-gate.js.map +1 -1
  25. package/dist/github/probe-closer.d.ts +4 -3
  26. package/dist/github/probe-closer.d.ts.map +1 -1
  27. package/dist/github/probe-closer.js +37 -28
  28. package/dist/github/probe-closer.js.map +1 -1
  29. package/dist/github/standalone-babysitter.d.ts +7 -3
  30. package/dist/github/standalone-babysitter.d.ts.map +1 -1
  31. package/dist/github/standalone-babysitter.js +16 -46
  32. package/dist/github/standalone-babysitter.js.map +1 -1
  33. package/dist/index.d.ts +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/intake/notion.d.ts +36 -6
  38. package/dist/intake/notion.d.ts.map +1 -1
  39. package/dist/intake/notion.js +74 -16
  40. package/dist/intake/notion.js.map +1 -1
  41. package/dist/orchestrator/factory.d.ts +14 -0
  42. package/dist/orchestrator/factory.d.ts.map +1 -1
  43. package/dist/orchestrator/factory.js +77 -211
  44. package/dist/orchestrator/factory.js.map +1 -1
  45. package/dist/ports/mount.d.ts +1 -0
  46. package/dist/ports/mount.d.ts.map +1 -1
  47. package/dist/types.d.ts +1 -0
  48. package/dist/types.d.ts.map +1 -1
  49. package/package.json +1 -1
package/README.md CHANGED
@@ -782,9 +782,10 @@ Factory GitHub write attribution is controlled explicitly with `github.identity`
782
782
  - `"user"` publishes pull requests and performs issue lifecycle writes with the
783
783
  account authenticated by the local `gh` CLI, even when the app path is
784
784
  available.
785
- - `"auto"` is the default and preserves compatibility: pull requests prefer the
786
- App path and fall back to the local `gh` user, while issue comments, status
787
- labels, and issue closure retain the local `gh` path.
785
+ - `"auto"` is the default. Pull requests and issue lifecycle writes prefer the
786
+ connected App when their complete capability is available. A non-cloud host
787
+ can fall back to its local `gh` user; the gh-less cloud container instead
788
+ fails loudly when the connected lifecycle capability is incomplete.
788
789
 
789
790
  Each successful publication log includes `identity` (`app` or `user`) and the
790
791
  confirmed `author`. App writes are not reported complete until the connected
@@ -792,8 +793,41 @@ mount acknowledges the provider mutation. Provider-authoritative issue reads
792
793
  remain optional on the writeback interface; when unavailable, their existing
793
794
  call sites keep their conservative fallback behavior.
794
795
 
795
- This identity setting does not change Notion intake's separate GitHub issue
796
- publisher, which still requires local `gh` authentication when enabled.
796
+ #### Writes that still shell out to `gh`
797
+
798
+ Two Factory GitHub mutations are not represented on the connected App surface
799
+ and therefore cannot be performed as the app today. Under `"app"` they refuse
800
+ rather than writing as the operator, so an explicit app identity never produces
801
+ a human-attributed write:
802
+
803
+ | Write | Built-in CLI identity gate | Missing connected capability |
804
+ |---|---|---|
805
+ | Guarded squash merge (`mergePolicy: "on-green-with-review"`) | `"app"` declines and logs; nothing is merged | `mergePullRequest` |
806
+ | Notion intake issue create | only exact `"user"`; `"auto"` and `"app"` block before any durable claim | `createIssue` |
807
+ | Notion intake issue edit | only exact `"user"`; `"auto"` and `"app"` block before any CLI access | `updateIssue` |
808
+
809
+ The merge refusal names `"user"` or `"auto"` as its local-user recovery path.
810
+ The built-in Notion publisher is stricter: its local-host opt-in is exact
811
+ `github.identity: "user"`, because the production Factory container contains
812
+ no `gh` binary and the App surface has no issue-create or source-marker query.
813
+
814
+ Notion intake is a separate surface from the Factory lifecycle writeback and
815
+ still requires local `gh` authentication when enabled. Its CLI entry point
816
+ resolves `github.identity` from the selected contract — including a split
817
+ `workspaceConfig`/`nodeConfig` contract, where the node half wins. Only exact
818
+ `"user"` enables the built-in CLI publisher. An absent contract resolves to
819
+ `"auto"` and therefore blocks repository intake explicitly; a contract that
820
+ exists but cannot be parsed is an error rather than a silent downgrade.
821
+
822
+ The gate covers the built-in publisher's visibility, label, reconciliation,
823
+ create, and edit operations. `"auto"` and `"app"` fail before spawning `gh` and
824
+ before reserving a durable claim. Project-only intake and injected custom
825
+ publishers do not use this adapter and remain available.
826
+
827
+ The standalone babysitter reads complete PR metadata from the authenticated
828
+ mounted projection and reports `source: 'mount'`; it does not fall back to
829
+ local `gh`. Review replies and pushes on a babysat PR are performed by the
830
+ dispatched agent under the agent's own credential, not by the Factory process.
797
831
 
798
832
  Authenticated Factory progress reporting is enabled by default for real CLI
799
833
  sessions. Factory sends privacy-bounded lifecycle events, worker ownership,
@@ -1,12 +1,13 @@
1
1
  import { ensureCloudSession, type CloudSession } from '@agent-relay/cloud';
2
2
  import { type LocalClonePathOptions } from '../config/local-clone-paths.js';
3
+ import type { GithubWriteIdentity } from '../github/index.js';
3
4
  import { createFactory, createFleet, ensureRelayBroker, reapFactoryEnvironmentsOnce, type Capability, type Factory, type FactoryEventReporter, type FactoryConfig, type FleetBackend, type FleetClient, type GhRunner, type FactoryStateResolution, type Logger, type LocalMountOptions, type MountClient, type ProbeCloser, type RelayfileCloudMountClientConfig, type ResolvedFactoryWorkspace } from '../index.js';
4
5
  import { type CheckFeatureMapOptions, type FeatureMapCheckReport } from '../featuremap/index.js';
5
6
  import type { FactoryIntegrationProvider } from '../ports/index.js';
6
7
  import type { StateStore } from '../ports/state.js';
7
8
  import type { RelayClientFactoryOptions, RelayClientLike } from '../fleet/relay-fleet-client.js';
8
9
  import { type FactoryVersionInfo, type FactoryVersionInfoOptions } from '../version-info.js';
9
- import { type FactoryTasksNotionClient, type NotionIntakeClaimStore, type NotionContractPublisher } from '../intake/index.js';
10
+ import { type GithubIssuePublisher, type FactoryTasksNotionClient, type NotionIntakeClaimStore, type NotionContractPublisher } from '../intake/index.js';
10
11
  export type CliStateStore = StateStore & {
11
12
  /** Host readiness gate. The CLI invokes it before constructing Factory. */
12
13
  assertReady(): Promise<void>;
@@ -33,7 +34,6 @@ export interface FleetCliDeps {
33
34
  stderr?: Pick<NodeJS.WriteStream, 'write'>;
34
35
  probeCloser?: ProbeCloser;
35
36
  probePrGhRunner?: GhRunner;
36
- babysitPrGhRunner?: GhRunner;
37
37
  now?: () => number;
38
38
  stopSignalProcessLike?: Pick<NodeJS.Process, 'once' | 'off'>;
39
39
  daemonExit?: (code: number) => void;
@@ -64,6 +64,12 @@ export interface FleetCliDeps {
64
64
  notionContracts?: NotionContractPublisher;
65
65
  /** Hermetic workspace-global Notion claim store for tests and alternate runtimes. */
66
66
  notionClaims?: NotionIntakeClaimStore;
67
+ /**
68
+ * Hermetic GitHub issue publisher for intake tests and alternate runtimes.
69
+ * Receives the identity resolved from the selected contract, so a test can
70
+ * assert the CLI honours `github.identity` without reaching the gh binary.
71
+ */
72
+ notionGithub?: (identity: GithubWriteIdentity) => GithubIssuePublisher;
67
73
  /** Hermetic Factory Tasks reader for manifest-generation tests and alternate runtimes. */
68
74
  notionFactoryTasks?: FactoryTasksNotionClient;
69
75
  /** Hermetic verification-environment sweep for CLI tests and alternate runtimes. */
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/cli/fleet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/cli/fleet.ts"],"names":[],"mappings":"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"}
package/dist/cli/fleet.js CHANGED
@@ -6,10 +6,11 @@ import readline from 'node:readline/promises';
6
6
  import { ensureCloudSession } from '@agent-relay/cloud';
7
7
  import { stringifyLogValue } from '../logging.js';
8
8
  import { resolveLocalFactoryConfig } from '../config/local-clone-paths.js';
9
+ import { loadFactoryConfig } from '../config/schema.js';
9
10
  import { initializeFactory } from './init.js';
10
11
  import { diagnoseDeployedFactory, renderDeployedDiagnosis } from './diagnose.js';
11
12
  import { FACTORY_EXIT, exitCodeForDispatchResult, exitCodeForError, exitCodeForIterationReport, exitCodeForLoopReports, exitCodeForRelayDispatch, } from './exit-codes.js';
12
- import { FileStateStore, RelayfileCloudMountClient, checkFactoryLoopLiveness, closeProbePr, createFactory, createFleet, createFactoryCloudEventV1, ensureRelayBroker, FactoryCloudReporter, FileFactoryCloudEventOutbox, defaultGhRunner, explicitLinkedIssueKey, githubIssuePathParts, githubWatchStatePath, isAllowedFactoryGithubDraft, isAllowedFactoryGithubArtifactDraft, isInFactoryScope, parseGithubFactoryIssue, publishFactoryMountHealth, heldAgentsFromRegistry, parseOwnedBrokerAgentExitTimeoutMs, parseStandaloneBabysitTarget, readStandalonePullRequest, readLinearIssueWithCanonicalFallback, reapFactoryOrphansOnce, reapFactoryEnvironmentsOnce, readFactoryInFlightRegistry, readFactoryLoopHeartbeat, resolveFactoryStates, stateResolutionFromIds, standaloneBabysitterAgentName, renderAgentTask, resolveFactoryWorkspace, } from '../index.js';
13
+ import { FileStateStore, RelayfileCloudMountClient, checkFactoryLoopLiveness, closeProbePr, createFactory, createFleet, createFactoryCloudEventV1, ensureRelayBroker, FactoryCloudReporter, FileFactoryCloudEventOutbox, explicitLinkedIssueKey, githubIssuePathParts, githubWatchStatePath, isAllowedFactoryGithubDraft, isAllowedFactoryGithubArtifactDraft, isInFactoryScope, parseGithubFactoryIssue, publishFactoryMountHealth, heldAgentsFromRegistry, parseOwnedBrokerAgentExitTimeoutMs, parseStandaloneBabysitTarget, readStandalonePullRequest, readLinearIssueWithCanonicalFallback, reapFactoryOrphansOnce, reapFactoryEnvironmentsOnce, readFactoryInFlightRegistry, readFactoryLoopHeartbeat, resolveFactoryStates, stateResolutionFromIds, standaloneBabysitterAgentName, renderAgentTask, resolveFactoryWorkspace, } from '../index.js';
13
14
  import { resolveTestGuidance } from '../dispatch/test-guidance.js';
14
15
  import { FakeFleetClient, FakeMountClient } from '../testing/index.js';
15
16
  import { GitAgentWorktreeManager } from '../git/agent-worktree.js';
@@ -157,7 +158,14 @@ export async function runFleetCli(argv, deps = {}) {
157
158
  manifest,
158
159
  dispatch: !globals.dryRun,
159
160
  ...(!globals.dryRun ? {
160
- github: new GhCliIssuePublisher(),
161
+ // Notion intake has no app-authored issue-create route, so under an
162
+ // explicit `github.identity: "app"` it refuses rather than writing
163
+ // as the operator. Hardcoding `'user'` here would make that gate
164
+ // unreachable from the only production caller.
165
+ github: await (async () => {
166
+ const identity = await resolveNotionIntakeIdentity(globals.config);
167
+ return deps.notionGithub?.(identity) ?? new GhCliIssuePublisher(identity);
168
+ })(),
161
169
  workspace,
162
170
  ...(notionClaims ? { claims: notionClaims } : {}),
163
171
  ...(notionContracts ? { contracts: notionContracts } : {}),
@@ -183,6 +191,7 @@ export async function runFleetCli(argv, deps = {}) {
183
191
  prNumber: command.prNumber,
184
192
  expectedIssueKey: command.issue,
185
193
  ...(githubWrite ? { githubWrite } : {}),
194
+ ...(mount ? { mount } : {}),
186
195
  ...(deps.probePrGhRunner ? { runner: deps.probePrGhRunner } : {}),
187
196
  });
188
197
  writeJson(out, result);
@@ -345,7 +354,6 @@ export async function runFleetCli(argv, deps = {}) {
345
354
  fleet,
346
355
  stateStore,
347
356
  stateResolution,
348
- probePrGhRunner: deps.probePrGhRunner ?? defaultGhRunner,
349
357
  logger,
350
358
  reporter,
351
359
  worktrees: globals.backend === 'internal' ? new GitAgentWorktreeManager() : undefined,
@@ -756,7 +764,7 @@ async function runStandaloneBabysitCommand(command, mount, fleet, config, global
756
764
  const clonePath = standaloneBabysitClonePath(repo, config);
757
765
  const mountFn = resolveLocalMountFn(deps, mount);
758
766
  await ensureWorkspaceMount(mount, mountFn, workspaceId, acceptableMountIds, deps.stderr);
759
- const pr = await readStandalonePullRequest(mount, { repo, prNumber: command.prNumber, url: command.url }, deps.babysitPrGhRunner ?? defaultGhRunner);
767
+ const pr = await readStandalonePullRequest(mount, { repo, prNumber: command.prNumber, url: command.url });
760
768
  const state = pr.state?.trim().toUpperCase();
761
769
  if (pr.merged || state === 'MERGED') {
762
770
  throw new Error(`factory babysit requires an open PR; ${repo} PR #${pr.number} is merged`);
@@ -1275,6 +1283,34 @@ function parseFactoryStartFlags(args) {
1275
1283
  }
1276
1284
  return { mode };
1277
1285
  }
1286
+ /**
1287
+ * The GitHub write identity Notion intake must honour.
1288
+ *
1289
+ * Notion intake does not otherwise require a Factory contract on disk, so an
1290
+ * absent one is not an error — it is the same as an unset `github` block,
1291
+ * which the schema synthesises to `auto`. A file that exists but cannot be
1292
+ * read or parsed IS an error: silently degrading it to `auto` would resolve a
1293
+ * deliberate `app` selection into the permissive value and reintroduce the
1294
+ * silent local-user write this gate exists to prevent.
1295
+ *
1296
+ * Use the canonical config loader for both contract shapes. In particular,
1297
+ * split config is a shallow top-level merge: a present `nodeConfig.github`
1298
+ * replaces `workspaceConfig.github` even when the node block is empty, after
1299
+ * which the GitHub schema supplies its `auto` default.
1300
+ */
1301
+ async function resolveNotionIntakeIdentity(path) {
1302
+ const configPath = path ?? resolve(process.cwd(), 'factory.config.json');
1303
+ let raw;
1304
+ try {
1305
+ raw = await readFile(configPath, 'utf8');
1306
+ }
1307
+ catch (error) {
1308
+ if (error.code === 'ENOENT')
1309
+ return 'auto';
1310
+ throw error;
1311
+ }
1312
+ return loadFactoryConfig(JSON.parse(raw)).factoryConfig.github.identity;
1313
+ }
1278
1314
  async function loadConfig(path, options = {}) {
1279
1315
  const configPath = path ?? resolve(process.cwd(), 'factory.config.json');
1280
1316
  const raw = JSON.parse(await readFile(configPath, 'utf8'));