affitor 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,85 +4,142 @@ CLI-native affiliate tracking. Connect Stripe, track commissions, manage partner
4
4
 
5
5
  ## AI agent setup
6
6
 
7
- From the project root, preview the local installation before applying it:
7
+ Preview the selected client's installation from your project root. Sign in using
8
+ Affitor's existing login command, then apply the plan:
8
9
 
9
10
  ```bash
10
- affitor agent setup --client claude_code --dry-run --json
11
- affitor agent setup --client claude_code --yes
11
+ affitor login
12
+ affitor agent setup --client claude_code --program-id 123 --dry-run --json
13
+ affitor agent setup --client claude_code --program-id 123 --yes
12
14
  affitor doctor --client claude_code --json
13
15
  ```
14
16
 
17
+ `--program-id` is optional when `.affitor/config.json` already links a program.
18
+ An interactive terminal can select a program from the signed-in account's list.
19
+ Without a linked/selected program, setup remains a local installer using an existing
20
+ program key and explains how to rerun for separate agent credentials. It does not
21
+ mint a key in this mode. Existing per-client setups cannot be downgraded to this
22
+ legacy mode: pass the program id when updating them. This feature requires the CMS program-agent API release;
23
+ a missing route or insufficient Owner access fails without falling back to a live key.
24
+
15
25
  Choose `claude_code`, `cursor`, or `codex`; repeat `--client` for more than one.
16
- Without a selection, an interactive terminal asks, with nothing selected by default.
17
- Noninteractive runs require `--yes` and a selection. Inside an agent, setup can only
18
- configure that agent. `--dry-run` writes nothing. Without confirmation, setup exits1.
19
-
20
- Claude Code uses project `.mcp.json`; Cursor uses `.cursor/mcp.json`. Existing
21
- unrelated settings are preserved. Existing file bytes are backed up under
22
- `.affitor/backups/` before replacement, with mode0600; generated `.gitignore`
23
- entries exclude backups and `.affitor/.env`. Updates use atomic replacement and
24
- read-back, rolling back prior writes on failure. Backups and their local ignore
25
- guard are kept on failure so a restored root `.gitignore` cannot expose them.
26
- An existing backup guard must contain only `*`; negation or extra rules are refused.
27
- It is installed before any merged config is written. Temporary writes stay under
28
- this private, ignored backup directory, including after abrupt process termination.
29
- Credential and backup ignore rules are appended at the end of both the root
30
- `.gitignore` and `.affitor/.gitignore`, preserving earlier custom rules while
31
- overriding negations. Existing files are backed up before changing them. The child
32
- guard also protects `credentials.json` when a project directory is your home.
33
- A concurrent edit is preserved;
34
- inspect the files and private backups before retrying. This protects ordinary
35
- local edits, not a hostile process racing filesystem operations.
36
-
37
- The generated `.affitor/agent-mcp.cjs` launcher starts pinned `@affitor/mcp@0.2.2`
38
- from this project's absolute directory. No credential is embedded in an agent
39
- config, launcher, or skill. The launcher reads inherited `AFFITOR_API_KEY`, then
40
- this project's `.affitor/.env` (created by `affitor init`). It never reads the user
41
- login token in `~/.affitor/credentials.json`. If `onboard` wrote a key to your root
42
- `.env`, provide it privately as `AFFITOR_API_KEY` when starting the agent instead.
43
- It removes inherited API URL overrides regardless of their casing and uses the
44
- production API. It disables sale/refund tools even when the parent
45
- environment has `AFFITOR_MCP_WRITE=1`. Other tools still include tracking and
46
- synthetic verification; approve those actions separately.
26
+ Detected clients are not selected automatically. Inside an agent, setup can only
27
+ configure itself. Noninteractive runs require a selection and `--yes` (or
28
+ `--auto-confirm`). `--dry-run` makes no API calls and writes nothing. Without consent,
29
+ setup exits1. A linked project with no valid saved login returns `needs_login`
30
+ (exit1), with no minted key or local write. Run `affitor login` and retry.
31
+
32
+ For a selected program, each client gets its own restricted `aff_ag_` credential.
33
+ Only an active program Owner can mint/list/revoke it through the user-JWT lifecycle
34
+ API. Neither `--api-key` nor inherited `AFFITOR_API_KEY` is used as that user JWT.
35
+ Setup lists existing credentials to reuse a matching active local key, without
36
+ calling readiness/status or marking an agent connected. Revoked or missing rows
37
+ are replaced on the next approved setup. The keys permit readiness, status,
38
+ synthetic checks, clicks and test-only leads. The server forces agent leads into
39
+ test mode; they cannot settle real customer attribution or authorize sale/refund.
40
+
41
+ Private credentials live at `.affitor/agents/<client>.json` (mode0600 on POSIX),
42
+ separate from the application's live key in `.affitor/.env`. Setup preserves the
43
+ application key. The JSON includes the key's id, program, client, API origin and
44
+ an unverified scope/date note. Do not commit or share this file. A selected
45
+ credential belonging to another program/origin must be revoked and removed before
46
+ switching. Unsafe paths, malformed private files, POSIX permissions broader than
47
+ owner-only and Git-tracked private credentials are refused. Git must confirm an untracked
48
+ path in a worktree or an actual directory outside any repository. A timeout,
49
+ missing executable, unreadable repository or unexpected exit blocks setup before
50
+ any API call or write.
51
+
52
+ On Windows, POSIX mode0600 does not establish private Windows access-control
53
+ permissions, and the CLI does not configure or audit those permissions. Keep the
54
+ project under your Windows user profile in a folder with restricted access.
55
+ Check inherited permissions before storing credentials or backups in shared
56
+ folders. The owner-only mode checks above apply to macOS and Linux.
57
+
58
+ Claude Code uses project `.mcp.json`; Cursor uses `.cursor/mcp.json`. Their entries
59
+ contain only `node`, an absolute `.affitor/agent-mcp.cjs` path and a client selector.
60
+ No credential appears in MCP config, the launcher, skill, plan or command output.
61
+ The launcher reads only the selected client's private file, ignoring inherited or
62
+ application keys. A missing/invalid selected key fails closed. Its API origin comes
63
+ from that private record. It never reads a user login token. Legacy entries with no
64
+ client selector still read inherited `AFFITOR_API_KEY`, then `.affitor/.env`, using
65
+ the same strict env parser as static doctor. Their API origin remains production.
66
+
67
+ Agent setup sends the signed-in user's JWT only to `https://api.affitor.com`;
68
+ other remote HTTPS origins and other Affitor subdomains are refused before any
69
+ request. For local development, set `AFFITOR_AGENT_DEV_API_ORIGIN` to the exact
70
+ HTTP(S) loopback origin and pass the same value through `--api-url` (for example,
71
+ `http://127.0.0.1:1337`). Only `localhost`, `127.0.0.1` and `[::1]` are supported;
72
+ the port must match. This variable cannot authorize an external host. Use a
73
+ development login for that local server. The launcher still reads only its
74
+ selected program credential, not the login JWT.
75
+
76
+ Existing unrelated settings are preserved. Changed file bytes are backed up under
77
+ `.affitor/backups/` before replacement, with mode0600. Credential, login-token and
78
+ backup ignores are appended to root and child `.gitignore` files; strict `*`
79
+ guards protect private agent files and backups before the first secret write.
80
+ Temporary writes stay under the ignored backup directory, including after abrupt
81
+ termination. Updates use atomic replacement and read-back, rolling back prior writes
82
+ on failure. Concurrent edits are preserved, with private ignore guards retained.
83
+ Inspect files and private backups before retrying. This handles ordinary local
84
+ edits; it is not a sandbox against hostile local filesystem races.
85
+
86
+ Mint requests are never retried automatically. If a later mint or local write
87
+ fails, setup attempts to revoke every newly minted key whose id it received.
88
+ `revoke_failed_ids` lists known ids needing dashboard cleanup;
89
+ `mint_outcome_unknown: true` means a lost/failed response may have created another
90
+ Waiting row. Review unused Waiting credentials in Settings → Agents and revoke them
91
+ before retrying. An unknown mint result is not reported as a successful rollback.
92
+ Reuse does not revoke pre-existing keys when a local update fails.
93
+
94
+ The preview notes include active-key replacement and revocation before you confirm
95
+ the plan. If a saved id is still active for the selected client but its server hint
96
+ has changed, approved setup saves a replacement first, then revokes that old id.
97
+ Other clients' keys are not revoked. A failed mint or local update leaves the old
98
+ key in place and compensates only newly minted credentials. If old-key revocation
99
+ cannot be confirmed after saving, the new credentials stay installed and the error's
100
+ `revoke_failed_ids` identifies the previous keys that need cleanup. Setup reports
101
+ this partial completion without claiming that the new files were rolled back.
102
+
103
+ An abrupt interruption, such as closing the terminal after minting, may also leave
104
+ a Waiting credential even when no error JSON was printed and no local credential
105
+ file exists, or leave a previous key unrevoked after its replacement was saved.
106
+ Before retrying, review newly created Waiting rows for the selected
107
+ client in Settings → Agents and revoke unused credentials from that attempt.
108
+ Keep credentials used by other agents. Then run a fresh dry-run and approve setup
109
+ again; a static `doctor` result cannot prove that a server credential was cleaned up.
47
110
 
48
111
  A recovery skill is installed in `.claude/skills/affitor/` or `.cursor/skills/affitor/`.
49
- Codex gets `.agents/skills/affitor/` and a printed `codex mcp add` command; setup
50
- does not edit its TOML config or run that command. Review it, then run it yourself.
51
- If you move the project, run setup again to update absolute paths. The printed
52
- command uses POSIX shell quoting on macOS/Linux. Plan notes flag machine-specific
53
- absolute paths: keep generated MCP configs local or regenerate on each machine. On Windows, no shell command
54
- is generated: add the MCP in Codex settings using `command: "node"` and the exact
55
- absolute path from the preview's `entry.args` as one argument. Do not paste POSIX
56
- commands into cmd.exe.
57
-
58
- **Installed is not verified.** Successful setup returns `needs_human` (exit0).
59
- `doctor` is read-only and static: it does not start an agent, connect to the API,
60
- or prove the key works. It returns `aligned`/`stale`/`missing`/`manual`/`invalid`
61
- per client and `present_unverified`/`missing` for credentials. With no selection,
62
- doctor checks existing JSON client configs; an agent caller checks itself.
63
- Exit0 means all selected static checks align and a credential is present;
64
- otherwise exit1. A `credential_tracked` warning also returns exit1: doctor checks
65
- Git when available without changing its index, including when the repository root is above the
66
- project. Rotate an exposed key and remove it from tracking/history using your
67
- repository process; adding an ignore rule does not untrack a credential.
68
- Restart the agent and ask it to call `affitor_readiness`, checking
69
- the program identity before integration. Only report the readiness checks that pass.
70
-
71
- Doctor and the launcher use the same credential parser: empty, duplicate and
72
- interpolated assignments fail closed. An explicit nonempty environment value
73
- takes precedence and is validated without reading a file. On Windows, the
74
- launcher runs `npx.cmd` through `cmd.exe` with a constant command; project paths
75
- and credentials are passed through `cwd`/environment, outside shell text.
76
- `NoDefaultCurrentDirectoryInExePath=1` prevents a project-root `npx.cmd` from
77
- shadowing the PATH executable. The child receives only runtime paths, home/temp,
78
- locale/terminal settings and the program key; parent proxy, Node options, npm
79
- overrides and unrelated credentials are dropped. The public npm registry is
80
- explicit. Project code, the generated launcher, PATH and project `.npmrc` still
81
- belong to your trusted local environment; this installer is not a sandbox.
82
-
83
- This local installer uses an existing program key. Per-agent key issuance,
84
- pairing, connection telemetry, and the dashboard Agents page are separate work;
85
- this command does not claim to create or verify an agent connection.
112
+ Codex gets `.agents/skills/affitor/` and a printed command; setup does not edit its
113
+ TOML or run the command. On Windows, add the MCP in Codex settings using the exact
114
+ command/argument array in `entries.codex` from the preview. No shell command is
115
+ printed. On macOS/Linux the printed command uses POSIX quoting. Paths are specific
116
+ to this machine: keep generated configs local or regenerate after moving the
117
+ project or on a teammate's machine.
118
+
119
+ **Installed is not verified.** Credential setup returns `needs_next_step` (exit0);
120
+ local-only installation returns `needs_human` (exit0). Setup does not run an agent,
121
+ call readiness, or infer Verified from installation. Restart the client and ask:
122
+ “Call affitor_readiness from Affitor and tell me the result.” Check the program
123
+ identity and report only checks that actually pass. Approve synthetic checks and
124
+ other writes separately.
125
+
126
+ `doctor` is read-only and static: it does not start an agent or connect to the API.
127
+ It returns `aligned`/`stale`/`missing`/`manual`/`invalid` per client and
128
+ `present_unverified`/`missing` for credentials. With no selection it checks existing
129
+ JSON client configs; an agent caller checks itself. Exit0 means selected static
130
+ checks align, credentials are present and no warning exists. Codex stays manual.
131
+ A `credential_check_failed` warning means tracking could not be checked and returns
132
+ exit1; fix Git access and retry. A `credential_tracked` warning also returns exit1; Git checks include parent repository
133
+ roots and do not change the index. Rotate exposed keys and resolve tracking/history
134
+ through your repository process; an ignore rule does not untrack them.
135
+
136
+ The launcher starts pinned `@affitor/mcp@0.2.2` with sale/refund tools disabled even
137
+ when the parent sets `AFFITOR_MCP_WRITE=1`. Windows uses a constant `cmd.exe` command
138
+ with `NoDefaultCurrentDirectoryInExePath=1`; paths/keys stay outside shell text.
139
+ The child receives only runtime paths, home/temp, locale/terminal settings, its
140
+ credential and explicit origin. Parent proxy, Node options, npm overrides and
141
+ unrelated credentials are dropped; npm uses the public registry. Project code,
142
+ PATH, `.npmrc` and the launcher remain part of your trusted local environment.
86
143
 
87
144
  ## Quick Start
88
145
 
package/dist/cli.js CHANGED
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAwErD"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA+FrD"}
@@ -1,13 +1,17 @@
1
- import { checkbox, confirm } from "@inquirer/prompts";
1
+ import { checkbox, confirm, select } from "@inquirer/prompts";
2
2
  import { existsSync } from "node:fs";
3
3
  import { join } from "node:path";
4
- import { CLIENTS, applySetup, callerClient, doctor, planSetup, selectedClients } from "../lib/agent-setup.js";
4
+ import { CLIENTS, applySetup, callerClient, doctor, planSetup, selectedClients, setupProgramId } from "../lib/agent-setup.js";
5
+ import { readCredentials } from "../lib/config.js";
6
+ import { DEFAULT_API_URL } from "../types.js";
7
+ import { AgentSetupError, ProgramAgentClient, agentApiOrigin, installProgramAgents } from "../lib/program-agent-client.js";
5
8
  import { getFlags } from "../lib/flags.js";
6
9
  export function registerAgentCommands(program) {
7
10
  program.command("agent").description("Configure an AI coding agent for this project")
8
11
  .command("setup")
9
12
  .description("Preview and install project-scoped MCP configuration and an Affitor skill")
10
13
  .option("--client <name>", "claude_code, cursor or codex (repeat to select)", (value, prior) => [...prior, value], [])
14
+ .option("--program-id <id>", "Use this program for independent agent credentials (otherwise use the linked project)")
11
15
  .option("--dry-run", "Show the plan without writing files")
12
16
  .option("--yes", "Apply the selected client's plan")
13
17
  .action(async (opts, cmd) => {
@@ -21,12 +25,24 @@ export function registerAgentCommands(program) {
21
25
  choices: CLIENTS.map(value => ({ value, name: `${value}${existsSync(join(process.cwd(), value === "claude_code" ? ".claude" : value === "cursor" ? ".cursor" : ".agents")) ? " (project directory found)" : ""}`, checked: false })),
22
26
  }), process.env);
23
27
  }
24
- const plan = planSetup(process.cwd(), clients);
28
+ let programId = setupProgramId(process.cwd(), opts.programId);
29
+ const origin = agentApiOrigin(flags.apiUrl ?? DEFAULT_API_URL);
30
+ if (!programId && clients.length && interactive && !opts.dryRun) {
31
+ const session = readCredentials();
32
+ if (session?.token && Number.isFinite(Date.parse(session.expires_at)) && Date.parse(session.expires_at) > Date.now()) {
33
+ const choices = await new ProgramAgentClient(session.token, origin).programs();
34
+ if (choices.length)
35
+ programId = await select({ message: "Which program should these agents use?", choices: choices.map(row => ({ value: row.id, name: `${row.name} (${row.id})` })) });
36
+ }
37
+ }
38
+ const plan = planSetup(process.cwd(), clients, { agentKeys: programId !== null });
25
39
  // Never serialize plan.actions.content: existing configs can contain
26
40
  // unrelated credentials that must stay local, including in a dry-run.
27
41
  const preview = {
28
42
  project: plan.project, clients, caller: callerClient(process.env) ?? null,
29
- entry: plan.entry, mcpVersion: plan.mcpVersion,
43
+ entries: Object.fromEntries(clients.map(client => [client, { command: plan.entry.command, args: [...plan.entry.args, ...(programId !== null ? [client] : [])] }])),
44
+ entry: plan.entry, mcpVersion: plan.mcpVersion, program_id: programId, api_url: origin,
45
+ agent_keys: plan.agentKeys?.map(({ client, path, state }) => ({ client, path, state })),
30
46
  actions: plan.actions.map(({ path, operation, backup }) => ({ path, operation, backup })),
31
47
  manual: plan.manual, notes: plan.notes,
32
48
  };
@@ -38,26 +54,42 @@ export function registerAgentCommands(program) {
38
54
  approved = await confirm({ message: "Apply this plan? Existing files are backed up first.", default: false });
39
55
  }
40
56
  if (!opts.dryRun && approved && clients.length) {
41
- applySetup(plan);
42
- status = "needs_human";
57
+ if (programId !== null) {
58
+ const session = readCredentials();
59
+ if (!session?.token || !Number.isFinite(Date.parse(session.expires_at)) || Date.parse(session.expires_at) <= Date.now())
60
+ status = "needs_login";
61
+ else {
62
+ const installed = await installProgramAgents(plan, programId, new ProgramAgentClient(session.token, origin));
63
+ preview.agent_keys = installed.map(({ client, path, state }) => ({ client, path, state }));
64
+ status = "needs_next_step";
65
+ }
66
+ }
67
+ else {
68
+ applySetup(plan);
69
+ status = "needs_human";
70
+ }
43
71
  }
44
72
  const next = !clients.length
45
73
  ? "Select --client claude_code, cursor or codex. Detected agents are not selected automatically."
46
- : status === "needs_confirmation"
47
- ? "Review the plan, then run affitor agent setup --client <name> --yes."
48
- : "Installed is not verified. Configure the program key privately as AFFITOR_API_KEY or in .affitor/.env; restart the selected agent, then ask it to call affitor_readiness. For Codex, first follow the printed manual configuration instructions.";
74
+ : status === "needs_login"
75
+ ? "Run affitor login, then rerun this setup command. No agent key was minted or local files written."
76
+ : status === "needs_confirmation" || status === "planned"
77
+ ? `Review the plan, then rerun affitor agent setup --client <name>${programId !== null ? ` --program-id ${programId}` : ""} --yes with the same API origin.`
78
+ : status === "needs_next_step"
79
+ ? "Installed, not verified. Restart the selected agent and ask it: Call affitor_readiness from Affitor and tell me the result. For Codex, first follow its printed manual configuration instructions."
80
+ : "Local installer only: link a program with affitor init or rerun with --program-id <id> to mint separate agent credentials. Installed is not verified. Configure the program key privately as AFFITOR_API_KEY or in .affitor/.env; restart the selected agent, then ask it to call affitor_readiness. For Codex, first follow the printed manual configuration instructions.";
49
81
  if (flags.json)
50
82
  process.stdout.write(JSON.stringify({ status, ...preview, next }) + "\n");
51
83
  else
52
84
  process.stdout.write(`${status}\n${next}\n`);
53
- process.exitCode = status === "needs_confirmation" || (!clients.length && !opts.dryRun) ? 1 : 0;
85
+ process.exitCode = (status === "needs_confirmation" || status === "needs_login") || (!clients.length && !opts.dryRun) ? 1 : 0;
54
86
  }
55
87
  catch (error) {
56
88
  // Expected installer errors contain only fixed messages and relative
57
89
  // client paths. Do not print arbitrary fs/JSON/credential exceptions.
58
- const message = error instanceof Error && /^(Unknown client|An agent can only|\.mcp\.json |\.cursor\/mcp\.json |Setup failed|A setup file|Unsafe setup|Setup target)/.test(error.message)
90
+ const message = error instanceof AgentSetupError ? error.message : error instanceof Error && /^(Unknown client|An agent can only|\.mcp\.json |\.cursor\/mcp\.json |Setup failed|A setup file|Unsafe setup|Setup target)/.test(error.message)
59
91
  ? error.message : "Agent setup could not finish. Check the project paths and run a fresh dry-run.";
60
- process.stdout.write(JSON.stringify({ status: "error", message }) + "\n");
92
+ process.stdout.write(JSON.stringify({ status: "error", message, ...(error instanceof AgentSetupError ? { revoke_failed_ids: error.cleanupIds, mint_outcome_unknown: error.uncertainMint } : {}) }) + "\n");
61
93
  process.exitCode = 1;
62
94
  }
63
95
  });
@@ -69,7 +101,7 @@ export function registerAgentCommands(program) {
69
101
  const configured = CLIENTS.filter(client => client !== "codex" && existsSync(join(process.cwd(), client === "claude_code" ? ".mcp.json" : ".cursor/mcp.json")));
70
102
  const results = doctor(process.cwd(), clients.length ? clients : configured.length ? configured : ["claude_code", "cursor"]);
71
103
  const healthy = results.every(result => result.status === "aligned" && result.credential === "present_unverified" && result.warnings.length === 0);
72
- const result = { status: healthy ? "aligned" : "needs_attention", mode: "static", clients: results, next: "Restart the selected agent and call affitor_readiness. A credential_tracked warning requires rotating the key and removing it from Git tracking/history through your repository process. Static checks do not prove a live connection or integration readiness." };
104
+ const result = { status: healthy ? "aligned" : "needs_attention", mode: "static", clients: results, next: "Restart the selected agent and call affitor_readiness. A credential_tracked warning requires rotating the key and removing it from Git tracking/history through your repository process. A credential_check_failed warning means Git tracking is unknown: fix Git access and retry. Static checks do not prove a live connection or integration readiness." };
73
105
  if (getFlags(cmd).json)
74
106
  process.stdout.write(JSON.stringify(result) + "\n");
75
107
  else
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,20 @@
1
1
  export declare const MCP_VERSION = "0.2.2";
2
2
  /** Shared by doctor and the generated launcher; never evaluates an env file. */
3
3
  export declare function parseProgramCredential(envKey: unknown, readText: () => string | null): string | null;
4
+ export interface StoredAgentCredential {
5
+ version: 1;
6
+ id: number;
7
+ program_id: number;
8
+ client: string;
9
+ api_url: string;
10
+ created_at: string;
11
+ credential_note: string;
12
+ api_key: string;
13
+ }
14
+ /** Shared with the standalone launcher; private files never supply executable code. */
15
+ export declare function parseStoredAgentCredential(text: string, client: string): StoredAgentCredential | null;
4
16
  /** Minimal runtime environment; never forward parent networking, Node or npm overrides. */
5
17
  export declare function agentChildEnvironment(source: NodeJS.ProcessEnv, key: string): NodeJS.ProcessEnv;
6
18
  export declare const AGENT_LAUNCHER: string;
7
- export declare const AGENT_SKILL = "---\nname: affitor\ndescription: Check Affitor affiliate integration readiness and follow its integration runbook.\nmetadata:\n version: \"1\"\n---\n\n# Affitor\n\nConnect only when this project needs Affitor. Follow https://affitor.com/docs/skill.md\nand the founder's optional context. Detect the framework and payment provider first.\nNever print, copy into a prompt, or commit credentials. Never treat a user login token\nas a program key. Do not add a second sale writer when Stripe Connect may record sales.\n\nInstalled, signed in, and verified are different states. After restarting the client,\ncall affitor_readiness and check the program identity before changing this project.\nOnly describe checks that actually passed. A static doctor cannot prove a live session.\nDo not run sale/refund tools. Ask before running synthetic verification or other writes.\n\n| Problem | Next step |\n| --- | --- |\n| Missing or stale local files | Run affitor agent setup --dry-run --json, show the plan, then apply the selected client after approval. |\n| Files aligned, tools absent | Restart the selected agent, then call affitor_readiness. |\n| Credential missing or rejected | Configure AFFITOR_API_KEY privately for this program. Never paste the key into chat. |\n| Readiness fails | Report the failed checks and follow the runbook; do not claim integration is verified. |\n";
19
+ export declare const AGENT_SKILL = "---\nname: affitor\ndescription: Check Affitor affiliate integration readiness and follow its integration runbook.\nmetadata:\n version: \"1\"\n---\n\n# Affitor\n\nConnect only when this project needs Affitor. Follow https://affitor.com/docs/skill.md\nand the founder's optional context. Detect the framework and payment provider first.\nNever print, copy into a prompt, or commit credentials. Never treat a user login token\nas a program key. Do not add a second sale writer when Stripe Connect may record sales.\n\nInstalled, signed in, and verified are different states. After restarting the client,\ncall affitor_readiness and check the program identity before changing this project.\nOnly describe checks that actually passed. A static doctor cannot prove a live session.\nDo not run sale/refund tools. Ask before running synthetic verification or other writes.\n\n| Problem | Next step |\n| --- | --- |\n| Missing or stale local files | Run affitor agent setup --dry-run --json, show the plan, then apply the selected client after approval. |\n| Files aligned, tools absent | Restart the selected agent, then call affitor_readiness. |\n| Credential missing or rejected | Run affitor login, then affitor agent setup for this client and program. Never paste any key into chat. |\n| Readiness fails | Report the failed checks and follow the runbook; do not claim integration is verified. |\n";
8
20
  //# sourceMappingURL=agent-launcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-launcher.d.ts","sourceRoot":"","sources":["../../src/lib/agent-launcher.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAYpG;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAW/F;AAED,eAAO,MAAM,cAAc,QA4B1B,CAAC;AAEF,eAAO,MAAM,WAAW,q2CAyBvB,CAAC"}
1
+ {"version":3,"file":"agent-launcher.d.ts","sourceRoot":"","sources":["../../src/lib/agent-launcher.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAYpG;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uFAAuF;AACvF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAcrG;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAW/F;AAED,eAAO,MAAM,cAAc,QA2C1B,CAAC;AAEF,eAAO,MAAM,WAAW,w3CAyBvB,CAAC"}
@@ -22,6 +22,27 @@ export function parseProgramCredential(envKey, readText) {
22
22
  return null;
23
23
  }
24
24
  }
25
+ /** Shared with the standalone launcher; private files never supply executable code. */
26
+ export function parseStoredAgentCredential(text, client) {
27
+ try {
28
+ const value = JSON.parse(text);
29
+ if (!value || value.version !== 1 || value.client !== client ||
30
+ !["claude_code", "cursor", "codex"].includes(client) ||
31
+ !Number.isSafeInteger(value.id) || value.id <= 0 ||
32
+ !Number.isSafeInteger(value.program_id) || value.program_id <= 0 ||
33
+ typeof value.api_key !== "string" || !/^aff_ag_[A-Za-z0-9_-]{43}$/.test(value.api_key) ||
34
+ typeof value.api_url !== "string")
35
+ return null;
36
+ const url = new URL(value.api_url);
37
+ if (url.origin !== value.api_url || url.username || url.password ||
38
+ (url.protocol !== "https:" && !(url.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname))))
39
+ return null;
40
+ return value;
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
25
46
  /** Minimal runtime environment; never forward parent networking, Node or npm overrides. */
26
47
  export function agentChildEnvironment(source, key) {
27
48
  const allowed = ["PATH", "HOME", "USERPROFILE", "APPDATA", "LOCALAPPDATA", "SYSTEMROOT", "WINDIR", "COMSPEC", "PATHEXT", "TMP", "TEMP", "TMPDIR", "LANG", "TERM", "COLORTERM", "NO_COLOR", "FORCE_COLOR"];
@@ -42,19 +63,34 @@ const { join, resolve } = require('node:path');
42
63
  const { spawn } = require('node:child_process');
43
64
  const project = resolve(__dirname, '..');
44
65
  const parseProgramCredential = ${parseProgramCredential.toString()};
45
- const key = parseProgramCredential(process.env.AFFITOR_API_KEY, () => {
66
+ const selector = process.argv[2];
67
+ const parseStoredAgentCredential = ${parseStoredAgentCredential.toString()};
68
+ let stored = null;
69
+ if (selector !== undefined) {
70
+ try {
71
+ if (!['claude_code', 'cursor', 'codex'].includes(selector) || process.argv.length !== 3) throw new Error();
72
+ const directory = join(__dirname, 'agents');
73
+ const parent = lstatSync(directory);
74
+ const path = join(directory, selector + '.json');
75
+ const stat = lstatSync(path);
76
+ if (!parent.isDirectory() || parent.isSymbolicLink() || !stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1) throw new Error();
77
+ stored = parseStoredAgentCredential(readFileSync(path, 'utf8'), selector);
78
+ } catch {}
79
+ }
80
+ const key = selector !== undefined ? stored?.api_key : parseProgramCredential(process.env.AFFITOR_API_KEY, () => {
46
81
  const path = join(__dirname, '.env');
47
82
  const stat = lstatSync(path);
48
83
  if (!stat.isFile() || stat.isSymbolicLink()) return null;
49
84
  return readFileSync(path, 'utf8');
50
85
  });
51
86
  if (!key) {
52
- process.stderr.write('Affitor: set AFFITOR_API_KEY or configure this project with affitor init. No agent call was made.\\n');
87
+ process.stderr.write('Affitor: credential missing or invalid. Run affitor agent setup for this client; no agent call was made.\\n');
53
88
  process.exit(1);
54
89
  }
55
90
  // Setup never opts into the sale/refund tools, including through inherited env.
56
91
  const agentChildEnvironment = ${agentChildEnvironment.toString()};
57
92
  const env = agentChildEnvironment(process.env, key);
93
+ if (stored) env.AFFITOR_API_URL = stored.api_url;
58
94
  // Windows batch files require cmd.exe. The command contains constants only:
59
95
  // project paths and credentials travel through cwd/env, never shell text.
60
96
  const windows = process.platform === 'win32';
@@ -88,7 +124,7 @@ Do not run sale/refund tools. Ask before running synthetic verification or other
88
124
  | --- | --- |
89
125
  | Missing or stale local files | Run affitor agent setup --dry-run --json, show the plan, then apply the selected client after approval. |
90
126
  | Files aligned, tools absent | Restart the selected agent, then call affitor_readiness. |
91
- | Credential missing or rejected | Configure AFFITOR_API_KEY privately for this program. Never paste the key into chat. |
127
+ | Credential missing or rejected | Run affitor login, then affitor agent setup for this client and program. Never paste any key into chat. |
92
128
  | Readiness fails | Report the failed checks and follow the runbook; do not claim integration is verified. |
93
129
  `;
94
130
  //# sourceMappingURL=agent-launcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-launcher.js","sourceRoot":"","sources":["../../src/lib/agent-launcher.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CAAC,MAAe,EAAE,QAA6B;IACnF,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjI,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,qBAAqB,CAAC,MAAyB,EAAE,GAAW;IAC1E,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC1M,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IAC5F,CAAC;IACD,GAAG,CAAC,kCAAkC,GAAG,GAAG,CAAC;IAC7C,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC;IAC1B,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;iCAKG,sBAAsB,CAAC,QAAQ,EAAE;;;;;;;;;;;;gCAYlC,qBAAqB,CAAC,QAAQ,EAAE;;;;;;2GAM2C,WAAW,sEAAsE,WAAW;;;;;CAKtM,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyB1B,CAAC"}
1
+ {"version":3,"file":"agent-launcher.js","sourceRoot":"","sources":["../../src/lib/agent-launcher.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CAAC,MAAe,EAAE,QAA6B;IACnF,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjI,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAaD,uFAAuF;AACvF,MAAM,UAAU,0BAA0B,CAAC,IAAY,EAAE,MAAc;IACrE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAC1D,CAAC,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACpD,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;YAChD,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC;YAChE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACtF,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;YAC9D,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACxI,OAAO,KAA8B,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,qBAAqB,CAAC,MAAyB,EAAE,GAAW;IAC1E,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC1M,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IAC5F,CAAC;IACD,GAAG,CAAC,kCAAkC,GAAG,GAAG,CAAC;IAC7C,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC;IAC1B,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;iCAKG,sBAAsB,CAAC,QAAQ,EAAE;;qCAE7B,0BAA0B,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;gCAwB1C,qBAAqB,CAAC,QAAQ,EAAE;;;;;;;2GAO2C,WAAW,sEAAsE,WAAW;;;;;CAKtM,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyB1B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type StoredAgentCredential } from "./agent-launcher.js";
1
2
  export declare const CLIENTS: readonly ["claude_code", "cursor", "codex"];
2
3
  export type AgentClient = typeof CLIENTS[number];
3
4
  type JsonObject = Record<string, unknown>;
@@ -18,13 +19,26 @@ export interface SetupPlan {
18
19
  actions: FileAction[];
19
20
  manual: string[];
20
21
  notes: string[];
22
+ agentKeys?: {
23
+ client: AgentClient;
24
+ path: string;
25
+ id?: number;
26
+ state: "pending" | "reused" | "minted";
27
+ }[];
21
28
  }
22
29
  export declare function object(value: unknown): value is JsonObject;
23
30
  export declare function callerClient(env: NodeJS.ProcessEnv): AgentClient | undefined;
24
31
  export declare function selectedClients(names: string[], env: NodeJS.ProcessEnv): AgentClient[];
25
- export declare function planSetup(cwd: string, clients: AgentClient[]): SetupPlan;
32
+ export declare function setupProgramId(cwd: string, explicit?: string): number | null;
33
+ export declare function planSetup(cwd: string, clients: AgentClient[], options?: {
34
+ agentKeys?: boolean;
35
+ }): SetupPlan;
36
+ /** These APIs keep credential contents out of the public plan metadata. */
37
+ export declare function readPlannedAgentCredential(plan: SetupPlan, client: AgentClient): StoredAgentCredential | null;
38
+ export declare function stageAgentCredential(plan: SetupPlan, client: AgentClient, record: StoredAgentCredential, minted: boolean): void;
26
39
  /** Local, synchronous transaction. It detects ordinary concurrent edits; it is not a local sandbox. */
27
40
  export declare function applySetup(plan: SetupPlan, beforeWrite?: (action: FileAction) => void): void;
41
+ export declare function credentialWarnings(project: string, relativePath?: string): string[];
28
42
  export declare function doctor(cwd: string, clients: AgentClient[]): {
29
43
  client: "claude_code" | "cursor" | "codex";
30
44
  warnings: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"agent-setup.d.ts","sourceRoot":"","sources":["../../src/lib/agent-setup.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,6CAA8C,CAAC;AACnE,MAAM,MAAM,WAAW,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACjD,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC3C,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAGD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAE1D;AAmCD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,GAAG,SAAS,CAK5E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,EAAE,CAKtF;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,SAAS,CAsExE;AAsBD,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,QAuCrF;AASD,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;;;;;;;;IAYzD"}
1
+ {"version":3,"file":"agent-setup.d.ts","sourceRoot":"","sources":["../../src/lib/agent-setup.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuH,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEtL,eAAO,MAAM,OAAO,6CAA8C,CAAC;AACnE,MAAM,MAAM,WAAW,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACjD,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC3C,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;KAAE,EAAE,CAAC;CAC1G;AAGD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAE1D;AAmCD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,GAAG,SAAS,CAK5E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,EAAE,CAKtF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa5E;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,SAAS,CA+F/G;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,qBAAqB,GAAG,IAAI,CAK7G;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,QAUxH;AAsBD,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,QA0CrF;AAcD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,SAAkB,GAAG,MAAM,EAAE,CAkB5F;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;;;;;;;;IAmBzD"}
@@ -2,7 +2,7 @@ import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSyn
2
2
  import { dirname, join, relative, resolve } from "node:path";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { spawnSync } from "node:child_process";
5
- import { AGENT_LAUNCHER, AGENT_SKILL, MCP_VERSION, parseProgramCredential, agentChildEnvironment } from "./agent-launcher.js";
5
+ import { AGENT_LAUNCHER, AGENT_SKILL, MCP_VERSION, parseProgramCredential, agentChildEnvironment, parseStoredAgentCredential } from "./agent-launcher.js";
6
6
  export const CLIENTS = ["claude_code", "cursor", "codex"];
7
7
  const snapshots = new WeakMap();
8
8
  export function object(value) {
@@ -64,7 +64,29 @@ export function selectedClients(names, env) {
64
64
  throw new Error("An agent can only configure itself. Run setup in your own terminal for other clients.");
65
65
  return [...new Set(names.length ? names : caller ? [caller] : [])];
66
66
  }
67
- export function planSetup(cwd, clients) {
67
+ export function setupProgramId(cwd, explicit) {
68
+ const valid = (value) => (typeof value === "number" || typeof value === "string") && /^[1-9]\d*$/.test(String(value)) && Number.isSafeInteger(Number(value));
69
+ if (explicit !== undefined) {
70
+ if (!valid(explicit))
71
+ throw new Error("Setup target program id must be a positive decimal integer.");
72
+ return Number(explicit);
73
+ }
74
+ const project = realpathSync(resolve(cwd));
75
+ const raw = readTarget(project, join(project, ".affitor/config.json"));
76
+ if (raw === null)
77
+ return null;
78
+ let value;
79
+ try {
80
+ value = JSON.parse(raw);
81
+ }
82
+ catch {
83
+ throw new Error("Setup target project config is invalid. Resolve it before setup.");
84
+ }
85
+ if (!object(value) || !valid(value.program_id))
86
+ throw new Error("Setup target project config has no valid program id. Pass --program-id explicitly.");
87
+ return Number(value.program_id);
88
+ }
89
+ export function planSetup(cwd, clients, options = {}) {
68
90
  const project = realpathSync(resolve(cwd));
69
91
  const launcher = join(project, ".affitor/agent-mcp.cjs");
70
92
  const entry = { command: "node", args: [launcher] };
@@ -85,6 +107,26 @@ export function planSetup(cwd, clients) {
85
107
  before.set(path, original);
86
108
  plan.actions.push({ path, content, backup, operation: original === content ? "unchanged" : original === null ? "create" : "update" });
87
109
  };
110
+ if (!options.agentKeys && clients.some(client => readTarget(project, join(project, `.affitor/agents/${client}.json`)) !== null)) {
111
+ throw new Error("Setup target already has per-client credentials. Pass --program-id before updating.");
112
+ }
113
+ if (options.agentKeys) {
114
+ plan.notes.push("Matching active keys are reused. Replacing an active selected key revokes its previous key after the new files are saved; failed revocations require dashboard cleanup.");
115
+ plan.agentKeys = clients.map(client => {
116
+ const rel = `.affitor/agents/${client}.json`;
117
+ const path = join(project, rel), raw = readTarget(project, path);
118
+ if (raw !== null && process.platform !== "win32" && (lstatSync(path).mode & 0o077) !== 0)
119
+ throw new Error("Setup target private agent credential must have owner-only permissions.");
120
+ if (raw !== null && !parseStoredAgentCredential(raw, client))
121
+ throw new Error("Setup target has an invalid private agent credential. Resolve it before retrying.");
122
+ const backup = join(project, ".affitor/backups", `${rel}.affitor.bak`);
123
+ safePath(project, backup);
124
+ if (existsSync(backup))
125
+ readTarget(project, backup);
126
+ add(rel, "", raw);
127
+ return { client, path, state: "pending" };
128
+ });
129
+ }
88
130
  const editable = clients.filter(client => client !== "codex");
89
131
  for (const client of editable) {
90
132
  const rel = configFile(client);
@@ -100,7 +142,10 @@ export function planSetup(cwd, clients) {
100
142
  if (!object(config) || (config.mcpServers !== undefined && !object(config.mcpServers))) {
101
143
  throw new Error(`${rel} must contain an object with an mcpServers object. Nothing was written.`);
102
144
  }
103
- config.mcpServers = { ...config.mcpServers, affitor: entry };
145
+ const existingEntry = config.mcpServers?.affitor;
146
+ if (!options.agentKeys && object(existingEntry) && Array.isArray(existingEntry.args) && existingEntry.args.includes(client))
147
+ throw new Error("Setup target uses per-client credentials. Pass --program-id before updating.");
148
+ config.mcpServers = { ...config.mcpServers, affitor: options.agentKeys ? { command: entry.command, args: [...entry.args, client] } : entry };
104
149
  add(rel, JSON.stringify(config, null, 2) + "\n", raw);
105
150
  add(client === "claude_code" ? ".claude/skills/affitor/SKILL.md" : ".cursor/skills/affitor/SKILL.md", AGENT_SKILL);
106
151
  }
@@ -108,10 +153,10 @@ export function planSetup(cwd, clients) {
108
153
  if (process.platform === "win32") {
109
154
  // A path may contain cmd.exe expansion/separator characters. Do not emit
110
155
  // executable shell text when the invoking Windows shell is unknown.
111
- plan.manual.push('Windows: add Affitor in Codex MCP settings using command "node" and the exact argument in entry.args. No shell command is generated.');
156
+ plan.manual.push('Windows: add Affitor in Codex MCP settings using command "node" and the exact arguments in entry.args plus codex when using per-client agent keys. No shell command is generated.');
112
157
  }
113
158
  else {
114
- plan.manual.push(`codex mcp add affitor -- node '${launcher.replaceAll("'", "'\"'\"'")}'`);
159
+ plan.manual.push(`codex mcp add affitor -- node '${launcher.replaceAll("'", "'\"'\"'")}'${options.agentKeys ? ' codex' : ''}`);
115
160
  }
116
161
  // Installing a shared skill and launcher needs the same explicit consent.
117
162
  add(".agents/skills/affitor/SKILL.md", AGENT_SKILL);
@@ -121,8 +166,8 @@ export function planSetup(cwd, clients) {
121
166
  // The final matching rule wins at each directory level. Existing negations
122
167
  // must not cancel protection; a child guard also outranks root ignore rules.
123
168
  for (const [rel, entries] of [
124
- [".gitignore", ["/.affitor/.env", "/.affitor/backups/", "/.affitor/credentials.json"]],
125
- [".affitor/.gitignore", ["/.env", "/backups/", "/credentials.json"]],
169
+ [".gitignore", ["/.affitor/.env", "/.affitor/backups/", "/.affitor/credentials.json", "/.affitor/agents/"]],
170
+ [".affitor/.gitignore", ["/.env", "/backups/", "/credentials.json", "/agents/"]],
126
171
  ]) {
127
172
  const raw = readTarget(project, join(project, rel));
128
173
  const prior = raw ?? "";
@@ -140,9 +185,42 @@ export function planSetup(cwd, clients) {
140
185
  // guard with backups on rollback even if the root .gitignore is restored.
141
186
  plan.actions.unshift(plan.actions.pop());
142
187
  }
188
+ if (options.agentKeys && clients.length) {
189
+ const guard = ".affitor/agents/.gitignore", raw = readTarget(project, join(project, guard));
190
+ if (raw !== null && !["*", "*\n", "*\r\n"].includes(raw))
191
+ throw new Error("Unsafe setup agent directory guard.");
192
+ add(guard, raw ?? "*\n", raw);
193
+ const action = plan.actions.pop();
194
+ plan.actions.splice(1, 0, action);
195
+ }
143
196
  snapshots.set(plan, before);
144
197
  return plan;
145
198
  }
199
+ /** These APIs keep credential contents out of the public plan metadata. */
200
+ export function readPlannedAgentCredential(plan, client) {
201
+ const path = plan.agentKeys?.find(item => item.client === client)?.path;
202
+ if (!path)
203
+ throw new Error("Setup plan does not include this agent credential.");
204
+ const raw = snapshots.get(plan)?.get(path);
205
+ return raw ? parseStoredAgentCredential(raw, client) : null;
206
+ }
207
+ export function stageAgentCredential(plan, client, record, minted) {
208
+ const item = plan.agentKeys?.find(item => item.client === client);
209
+ if (!item || !parseStoredAgentCredential(JSON.stringify(record), client))
210
+ throw new Error("Setup agent credential is invalid.");
211
+ const action = plan.actions.find(action => action.path === item.path);
212
+ const original = snapshots.get(plan).get(item.path);
213
+ action.content = minted ? JSON.stringify(record, null, 2) + "\n" : original;
214
+ action.operation = original === action.content ? "unchanged" : original === null ? "create" : "update";
215
+ action.backup = original !== null && original !== action.content ? join(plan.project, ".affitor/backups", `.affitor/agents/${client}.json.affitor.bak`) : null;
216
+ if (action.backup) {
217
+ safePath(plan.project, action.backup);
218
+ if (existsSync(action.backup))
219
+ readTarget(plan.project, action.backup);
220
+ }
221
+ item.id = record.id;
222
+ item.state = minted ? "minted" : "reused";
223
+ }
146
224
  function atomicWrite(project, path, content) {
147
225
  safePath(project, path);
148
226
  const guard = join(project, ".affitor/backups/.gitignore");
@@ -170,10 +248,13 @@ function atomicWrite(project, path, content) {
170
248
  /** Local, synchronous transaction. It detects ordinary concurrent edits; it is not a local sandbox. */
171
249
  export function applySetup(plan, beforeWrite) {
172
250
  const before = snapshots.get(plan);
251
+ if (plan.agentKeys?.some(item => item.state === "pending"))
252
+ throw new Error("Setup agent credentials have not been prepared.");
173
253
  if (!before)
174
254
  throw new Error("Generate a fresh setup plan before applying it.");
175
255
  const applied = [];
176
256
  let backupCreated = false;
257
+ let privateWritten = false;
177
258
  try {
178
259
  for (const action of plan.actions) {
179
260
  if (readTarget(plan.project, action.path) !== before.get(action.path))
@@ -193,6 +274,8 @@ export function applySetup(plan, beforeWrite) {
193
274
  writeFileSync(action.backup, before.get(action.path), { flag: "wx", mode: 0o600 });
194
275
  }
195
276
  applied.push(action);
277
+ if (plan.agentKeys?.some(item => item.path === action.path))
278
+ privateWritten = true;
196
279
  atomicWrite(plan.project, action.path, action.content);
197
280
  }
198
281
  }
@@ -203,7 +286,7 @@ export function applySetup(plan, beforeWrite) {
203
286
  try {
204
287
  const original = before.get(action.path);
205
288
  const current = readTarget(plan.project, action.path);
206
- if (backupCreated && action.path === join(plan.project, ".affitor/backups/.gitignore") && original === null && current === action.content)
289
+ if ((backupCreated || privateWritten) && [join(plan.project, ".affitor/backups/.gitignore"), join(plan.project, ".affitor/agents/.gitignore")].includes(action.path) && original === null && current === action.content)
207
290
  continue;
208
291
  if (current === original)
209
292
  continue;
@@ -223,22 +306,65 @@ export function applySetup(plan, beforeWrite) {
223
306
  throw new Error(concurrent ? "Setup failed; a concurrent edit was preserved. Check the files and private backups before retrying." : "Setup failed. Written files were rolled back; private backups were kept. Run a fresh dry-run.");
224
307
  }
225
308
  }
226
- function credentialWarnings(project) {
309
+ /** No marker means Git really has nowhere to discover a worktree (GIT_* overrides are dropped). */
310
+ function hasGitAncestor(project) {
311
+ let current = project;
312
+ for (;;) {
313
+ try {
314
+ lstatSync(join(current, ".git"));
315
+ return true;
316
+ }
317
+ catch (error) {
318
+ if (error.code !== "ENOENT")
319
+ return null;
320
+ }
321
+ const parent = dirname(current);
322
+ if (parent === current)
323
+ return false;
324
+ current = parent;
325
+ }
326
+ }
327
+ export function credentialWarnings(project, relativePath = ".affitor/.env") {
227
328
  const env = agentChildEnvironment(process.env, "");
228
329
  delete env.AFFITOR_API_KEY;
229
- const checked = spawnSync("git", ["-C", project, "ls-files", "--error-unmatch", "--", ".affitor/.env"], { env, encoding: "utf8", timeout: 1500, windowsHide: true });
230
- return checked.status === 0 ? ["credential_tracked"] : [];
330
+ // Fixed locale permits only Git's exact no-repository result; other failures stay unknown.
331
+ env.LC_ALL = "C";
332
+ const run = (args) => spawnSync("git", ["-C", project, ...args], { env, encoding: "utf8", timeout: 1500, windowsHide: true });
333
+ const discovery = run(["rev-parse", "--is-inside-work-tree"]);
334
+ const failed = ["credential_check_failed"];
335
+ if (discovery.error || discovery.signal)
336
+ return failed;
337
+ if (discovery.status === 128) {
338
+ const noRepository = /^fatal: not a git repository \(or any of the parent directories\): \.git\r?\n?$/.test(discovery.stderr ?? "");
339
+ return noRepository && discovery.stdout === "" && hasGitAncestor(project) === false ? [] : failed;
340
+ }
341
+ if (discovery.status !== 0 || discovery.stdout.trim() !== "true")
342
+ return failed;
343
+ const checked = run(["ls-files", "--error-unmatch", "--", relativePath]);
344
+ if (checked.error || checked.signal)
345
+ return failed;
346
+ if (checked.status === 0)
347
+ return ["credential_tracked"];
348
+ return checked.status === 1 ? [] : failed;
231
349
  }
232
350
  export function doctor(cwd, clients) {
233
351
  return clients.map(client => {
234
352
  try {
235
- const plan = planSetup(cwd, [client]);
353
+ const root = realpathSync(resolve(cwd));
354
+ const privatePath = join(root, `.affitor/agents/${client}.json`);
355
+ const rawConfig = client === "codex" ? null : readTarget(root, join(root, configFile(client)));
356
+ const entry = rawConfig ? JSON.parse(rawConfig)?.mcpServers?.affitor : null;
357
+ const perClient = existsSync(privatePath) || (Array.isArray(entry?.args) && entry.args.includes(client));
358
+ const plan = planSetup(cwd, [client], { agentKeys: perClient });
359
+ const saved = perClient ? readPlannedAgentCredential(plan, client) : null;
360
+ if (saved)
361
+ stageAgentCredential(plan, client, saved, false);
236
362
  const keyPath = join(plan.project, ".affitor/.env");
237
- const credential = parseProgramCredential(process.env.AFFITOR_API_KEY, () => {
363
+ const credential = perClient ? saved?.api_key : parseProgramCredential(process.env.AFFITOR_API_KEY, () => {
238
364
  const stat = lstatSync(keyPath);
239
365
  return stat.isFile() && !stat.isSymbolicLink() ? readFileSync(keyPath, "utf8") : null;
240
366
  });
241
- return { client, warnings: credentialWarnings(plan.project), notes: plan.notes, status: client === "codex" ? "manual" : plan.actions.some(a => a.operation === "create") ? "missing" : plan.actions.some(a => a.operation === "update") ? "stale" : "aligned", credential: credential ? "present_unverified" : "missing", liveSession: "not_checked", manual: plan.manual };
367
+ return { client, warnings: credentialWarnings(plan.project, perClient ? `.affitor/agents/${client}.json` : ".affitor/.env"), notes: plan.notes, status: client === "codex" ? "manual" : plan.actions.some(a => a.operation === "create") ? "missing" : plan.actions.some(a => a.operation === "update") ? "stale" : "aligned", credential: credential ? "present_unverified" : "missing", liveSession: "not_checked", manual: plan.manual };
242
368
  }
243
369
  catch {
244
370
  return { client, warnings: [], notes: [], status: "invalid", credential: "not_checked", liveSession: "not_checked", manual: [] };
@@ -1 +1 @@
1
- {"version":3,"file":"agent-setup.js","sourceRoot":"","sources":["../../src/lib/agent-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-setup.js","sourceRoot":"","sources":["../../src/lib/agent-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { applySetup, type AgentClient, type SetupPlan } from "./agent-setup.js";
2
+ import type { StoredAgentCredential } from "./agent-launcher.js";
3
+ export declare class AgentSetupError extends Error {
4
+ readonly cleanupIds: number[];
5
+ readonly uncertainMint: boolean;
6
+ constructor(message: string, cleanupIds?: number[], uncertainMint?: boolean);
7
+ }
8
+ export declare function agentApiOrigin(value: string): string;
9
+ interface AgentRow {
10
+ id: number;
11
+ client: string;
12
+ key_hint: string;
13
+ status: string;
14
+ revoked_at?: string | null;
15
+ }
16
+ /** User JWT only. Mint is never retried: a lost response may already have created a row. */
17
+ export declare class ProgramAgentClient {
18
+ private token;
19
+ readonly origin: string;
20
+ constructor(token: string, origin: string);
21
+ private request;
22
+ programs(): Promise<{
23
+ id: number;
24
+ name: string;
25
+ }[]>;
26
+ list(programId: number): Promise<AgentRow[]>;
27
+ mint(programId: number, client: AgentClient): Promise<StoredAgentCredential>;
28
+ revoke(programId: number, id: number): Promise<void>;
29
+ }
30
+ /** Prepare every client before local writes; compensate only keys minted by this run. */
31
+ export declare function installProgramAgents(plan: SetupPlan, programId: number, api: ProgramAgentClient, apply?: typeof applySetup): Promise<{
32
+ client: "claude_code" | "cursor" | "codex";
33
+ path: string;
34
+ id: number | undefined;
35
+ state: "pending" | "reused" | "minted";
36
+ }[]>;
37
+ export {};
38
+ //# sourceMappingURL=program-agent-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program-agent-client.d.ts","sourceRoot":"","sources":["../../src/lib/program-agent-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtJ,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,qBAAa,eAAgB,SAAQ,KAAK;aACK,UAAU,EAAE,MAAM,EAAE;aAAuB,aAAa;gBAAzF,OAAO,EAAE,MAAM,EAAkB,UAAU,GAAE,MAAM,EAAO,EAAkB,aAAa,UAAQ;CAC9G;AAQD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD;AACD,UAAU,QAAQ;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAE/G,4FAA4F;AAC5F,qBAAa,kBAAkB;IAEjB,OAAO,CAAC,KAAK;IADzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACJ,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;YAInC,OAAO;IAef,QAAQ,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAMnD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAgB5C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAW5E,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI3D;AAED,yFAAyF;AACzF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,GAAE,OAAO,UAAuB;;;;;KAsC5I"}
@@ -0,0 +1,172 @@
1
+ import { applySetup, credentialWarnings, readPlannedAgentCredential, stageAgentCredential } from "./agent-setup.js";
2
+ export class AgentSetupError extends Error {
3
+ cleanupIds;
4
+ uncertainMint;
5
+ constructor(message, cleanupIds = [], uncertainMint = false) {
6
+ super(message);
7
+ this.cleanupIds = cleanupIds;
8
+ this.uncertainMint = uncertainMint;
9
+ }
10
+ }
11
+ const positive = (value) => typeof value === "number" && Number.isSafeInteger(value) && value > 0;
12
+ function object(value) { return !!value && typeof value === "object" && !Array.isArray(value); }
13
+ function rootOrigin(value) {
14
+ const url = new URL(value);
15
+ if (url.username || url.password || url.search || url.hash || url.pathname !== "/" || !["https:", "http:"].includes(url.protocol))
16
+ throw new Error();
17
+ return url;
18
+ }
19
+ export function agentApiOrigin(value) {
20
+ try {
21
+ const url = rootOrigin(value);
22
+ if (url.origin === "https://api.affitor.com")
23
+ return url.origin;
24
+ const development = process.env.AFFITOR_AGENT_DEV_API_ORIGIN;
25
+ if (development && ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname) && rootOrigin(development).origin === url.origin)
26
+ return url.origin;
27
+ throw new Error();
28
+ }
29
+ catch {
30
+ throw new AgentSetupError("Agent setup sends login credentials only to https://api.affitor.com. Local development requires AFFITOR_AGENT_DEV_API_ORIGIN to match the exact loopback API origin.");
31
+ }
32
+ }
33
+ /** User JWT only. Mint is never retried: a lost response may already have created a row. */
34
+ export class ProgramAgentClient {
35
+ token;
36
+ origin;
37
+ constructor(token, origin) {
38
+ this.token = token;
39
+ this.origin = agentApiOrigin(origin);
40
+ if (!token || /^aff_|^agt_/.test(token))
41
+ throw new AgentSetupError("Sign in with affitor login before creating agent keys.");
42
+ }
43
+ async request(path, method = "GET", body) {
44
+ try {
45
+ const response = await fetch(this.origin + path, {
46
+ method, redirect: "error", signal: AbortSignal.timeout(15_000),
47
+ headers: { Authorization: `Bearer ${this.token}`, "Content-Type": "application/json" },
48
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }),
49
+ });
50
+ if (!response.ok)
51
+ throw new AgentSetupError(`Agent key request failed (HTTP ${response.status}). Check login, Owner access and the CMS release.`, [], method === "POST" && response.status >= 500);
52
+ try {
53
+ return await response.json();
54
+ }
55
+ catch {
56
+ throw new AgentSetupError("Agent key response could not be read.", [], method === "POST");
57
+ }
58
+ }
59
+ catch (error) {
60
+ if (error instanceof AgentSetupError)
61
+ throw error;
62
+ throw new AgentSetupError("Agent key request did not complete. Check the API origin and connection.", [], method === "POST");
63
+ }
64
+ }
65
+ async programs() {
66
+ const result = await this.request("/api/v1/cli/programs");
67
+ const rows = object(result) ? result.data : null;
68
+ if (!Array.isArray(rows) || rows.some(row => !object(row) || !positive(row.id) || typeof row.name !== "string"))
69
+ throw new AgentSetupError("Program list response is invalid.");
70
+ return rows.map(row => ({ id: row.id, name: row.name.slice(0, 160).replace(/[\x00-\x1f\x7f]/g, "") }));
71
+ }
72
+ async list(programId) {
73
+ const rows = [];
74
+ let before = null;
75
+ for (let page = 0; page < 100; page++) {
76
+ const result = await this.request(`/api/v1/programs/${programId}/agents${before ? `?before=${before}` : ""}`);
77
+ if (!object(result) || !Array.isArray(result.data) || result.data.length > 100 || !object(result.meta))
78
+ throw new AgentSetupError("Agent key list response is invalid.");
79
+ for (const row of result.data) {
80
+ if (!object(row) || !positive(row.id) || typeof row.client !== "string" || typeof row.key_hint !== "string" || typeof row.status !== "string" || !["waiting", "connected", "verified", "failing", "revoked"].includes(row.status))
81
+ throw new AgentSetupError("Agent key list response is invalid.");
82
+ rows.push({ id: row.id, client: row.client, key_hint: row.key_hint, status: row.status, revoked_at: typeof row.revoked_at === "string" ? row.revoked_at : null });
83
+ }
84
+ const next = result.meta.next_cursor;
85
+ if (next === null)
86
+ return rows;
87
+ if (!positive(next) || (before !== null && next >= before))
88
+ throw new AgentSetupError("Agent key pagination is invalid.");
89
+ before = next;
90
+ }
91
+ throw new AgentSetupError("Agent key list is too large. Review credentials in the dashboard before retrying.");
92
+ }
93
+ async mint(programId, client) {
94
+ const result = await this.request(`/api/v1/programs/${programId}/agents`, "POST", { name: client, client });
95
+ const row = object(result) && object(result.data) ? result.data : null;
96
+ if (!row || !positive(row.id) || row.client !== client || typeof row.api_key !== "string" || !/^aff_ag_[A-Za-z0-9_-]{43}$/.test(row.api_key)) {
97
+ throw new AgentSetupError("Agent mint response is invalid. Review Waiting agents in the dashboard.", row && positive(row.id) ? [row.id] : [], !(row && positive(row.id)));
98
+ }
99
+ const created = new Date().toISOString();
100
+ return { version: 1, id: row.id, program_id: programId, client, api_url: this.origin, created_at: created,
101
+ credential_note: `Signed-in account; program ${programId}; ${client}; readiness/status/synthetic-test/click/test-only lead; created ${created}; not verified. Never commit this file.`,
102
+ api_key: row.api_key };
103
+ }
104
+ async revoke(programId, id) {
105
+ const result = await this.request(`/api/v1/programs/${programId}/agents/${id}`, "DELETE");
106
+ if (!object(result) || !object(result.data) || result.data.revoked !== true)
107
+ throw new AgentSetupError("Agent revocation could not be confirmed.");
108
+ }
109
+ }
110
+ /** Prepare every client before local writes; compensate only keys minted by this run. */
111
+ export async function installProgramAgents(plan, programId, api, apply = applySetup) {
112
+ if (!positive(programId) || !plan.agentKeys || plan.agentKeys.length !== plan.clients.length)
113
+ throw new AgentSetupError("Generate a fresh agent-key setup plan.");
114
+ const existing = plan.clients.map(client => {
115
+ const warnings = credentialWarnings(plan.project, `.affitor/agents/${client}.json`);
116
+ if (warnings.includes("credential_tracked"))
117
+ throw new AgentSetupError("A private agent credential is tracked by Git. Rotate it and resolve tracking/history before setup.");
118
+ if (warnings.length)
119
+ throw new AgentSetupError("Git credential tracking could not be checked. Resolve Git access and retry; no agent key was minted or files written.");
120
+ const record = readPlannedAgentCredential(plan, client);
121
+ if (record && (record.program_id !== programId || record.api_url !== api.origin))
122
+ throw new AgentSetupError("A selected agent belongs to another program or API origin. Revoke and remove that private credential before switching.");
123
+ return { client, record };
124
+ });
125
+ // Only owner list reads: never call readiness/status to pretend a client connected.
126
+ const rows = await api.list(programId), minted = [], replaced = [];
127
+ try {
128
+ for (const { client, record } of existing) {
129
+ const row = record && rows.find(row => row.id === record.id && row.client === client);
130
+ const active = row && row.status !== "revoked" && !row.revoked_at;
131
+ const reusable = record && active && row.key_hint === `aff_ag_…${record.api_key.slice(-4)}`;
132
+ const credential = reusable ? record : await api.mint(programId, client);
133
+ if (!reusable)
134
+ minted.push(credential.id);
135
+ if (record && active && !reusable)
136
+ replaced.push(record.id);
137
+ stageAgentCredential(plan, client, credential, !reusable);
138
+ }
139
+ apply(plan);
140
+ }
141
+ catch (error) {
142
+ const known = [...new Set([...minted, ...(error instanceof AgentSetupError ? error.cleanupIds : [])])];
143
+ const failed = [];
144
+ for (const id of known) {
145
+ try {
146
+ await api.revoke(programId, id);
147
+ }
148
+ catch {
149
+ failed.push(id);
150
+ }
151
+ }
152
+ const uncertain = error instanceof AgentSetupError && error.uncertainMint;
153
+ throw new AgentSetupError(uncertain || failed.length
154
+ ? "Setup did not finish. Review Waiting agents in the dashboard and revoke unused credentials before retrying. Local files/private backups may need recovery."
155
+ : "Setup did not finish; newly minted credentials were revoked. Check local files/private backups before retrying.", failed, uncertain);
156
+ }
157
+ // Local installation has committed. Failure to retire an old key must not
158
+ // compensate the new credentials that the client now uses.
159
+ const failed = [];
160
+ for (const id of new Set(replaced)) {
161
+ try {
162
+ await api.revoke(programId, id);
163
+ }
164
+ catch {
165
+ failed.push(id);
166
+ }
167
+ }
168
+ if (failed.length)
169
+ throw new AgentSetupError("New agent credentials were installed, but previous keys could not be confirmed revoked. Review the reported old key ids in Settings → Agents before retrying.", failed);
170
+ return plan.agentKeys.map(({ client, path, id, state }) => ({ client, path, id, state }));
171
+ }
172
+ //# sourceMappingURL=program-agent-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program-agent-client.js","sourceRoot":"","sources":["../../src/lib/program-agent-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "affitor",
3
- "version": "0.4.5",
3
+ "version": "0.4.6",
4
4
  "description": "CLI-native affiliate tracking. Connect Stripe, track commissions, manage partners \u2014 all from your terminal.",
5
5
  "type": "module",
6
6
  "bin": {