@pome-sh/cli 0.23.23 → 0.23.25
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/dist/build-info.json +3 -3
- package/dist/{checks-YQFN75H4.js → checks-UINTOJ2L.js} +1 -1
- package/dist/{chunk-XFPCVBUX.js → chunk-4VVQMRWP.js} +3 -3
- package/dist/{chunk-66WODSX4.js → chunk-DG2VDEQE.js} +1 -1
- package/dist/{chunk-JFODF7QI.js → chunk-DINCNFAQ.js} +1 -1
- package/dist/{chunk-63BAZ37N.js → chunk-VBLY7LYM.js} +1 -1
- package/dist/{chunk-G3DO5MZM.js → chunk-ZUQYEPY4.js} +2 -2
- package/dist/{runDemo-USSQMPPB.js → runDemo-5Z7PIYTZ.js} +4 -4
- package/dist/{runTrialGroup-ZII4WC4H.js → runTrialGroup-CL4EJZD2.js} +3 -3
- package/dist/src/cli/main.js +12 -12
- package/dist/{src-X43MUN4B.js → src-VQOLQJJT.js} +42 -14
- package/dist/twinHarness-WVKOQ7UP.js +5 -0
- package/dist/{twinStart-Q6BQGQX4.js → twinStart-MVO22G7C.js} +2 -2
- package/package.json +3 -4
- package/dist/twinHarness-DTJ4CPJL.js +0 -5
package/dist/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "pome-sh",
|
|
3
|
-
"version": "0.23.
|
|
4
|
-
"git_sha": "
|
|
5
|
-
"build_time": "2026-08-
|
|
3
|
+
"version": "0.23.25",
|
|
4
|
+
"git_sha": "0c0c2ffcf41c652e52b7e9a2ce07f2d0dec333b6",
|
|
5
|
+
"build_time": "2026-08-12T18:27:18.585Z"
|
|
6
6
|
}
|
|
@@ -183,7 +183,7 @@ async function checkTwinReachable(_configDir) {
|
|
|
183
183
|
});
|
|
184
184
|
let harness;
|
|
185
185
|
try {
|
|
186
|
-
const { bootTwin } = await import('./twinHarness-
|
|
186
|
+
const { bootTwin } = await import('./twinHarness-WVKOQ7UP.js');
|
|
187
187
|
harness = await bootTwin({
|
|
188
188
|
twin: "github",
|
|
189
189
|
seedState: void 0,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// ../packages/twin-github/package.json
|
|
2
2
|
var package_default = {
|
|
3
|
-
version: "0.10.
|
|
3
|
+
version: "0.10.8"};
|
|
4
4
|
|
|
5
5
|
// ../packages/twin-slack/package.json
|
|
6
6
|
var package_default2 = {
|
|
@@ -39,7 +39,7 @@ var TWIN_REGISTRY = {
|
|
|
39
39
|
defaultSeedState,
|
|
40
40
|
GitHubDomain,
|
|
41
41
|
openGitHubCloneDatabase
|
|
42
|
-
} = await import('./src-
|
|
42
|
+
} = await import('./src-VQOLQJJT.js');
|
|
43
43
|
const db = openGitHubCloneDatabase();
|
|
44
44
|
const domain = new GitHubDomain(db);
|
|
45
45
|
domain.seed(seedState === void 0 ? defaultSeedState() : seedState);
|
|
@@ -173,7 +173,7 @@ var TWIN_REGISTRY = {
|
|
|
173
173
|
}
|
|
174
174
|
};
|
|
175
175
|
async function createGitHubSmokeApp() {
|
|
176
|
-
const { createGitHubCloneApp } = await import('./src-
|
|
176
|
+
const { createGitHubCloneApp } = await import('./src-VQOLQJJT.js');
|
|
177
177
|
return createGitHubCloneApp();
|
|
178
178
|
}
|
|
179
179
|
function defaultPortFor(twin, env = process.env) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-
|
|
1
|
+
import { TWIN_NAMES, isTwinName, TWIN_REGISTRY } from './chunk-4VVQMRWP.js';
|
|
2
2
|
import { createFileBackedRecorderStore, createRecorderStore } from './chunk-OW7VVW6X.js';
|
|
3
3
|
|
|
4
4
|
// src/recorder/recorder.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { readManifest, normalizeManifestTwins } from './chunk-ABM3CMQB.js';
|
|
2
|
-
import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-
|
|
2
|
+
import { createHostedClient, perTwinReturnedByCloud, parseTaskFile, runAgentCommand, writeRunArtifactsCore, toTwinHttpEvent, redactJsonl, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, evaluationCounts } from './chunk-VBLY7LYM.js';
|
|
3
3
|
import { MOUNTED_TWINS, HostedAuthError, HostedDiscardRefusedError, HostedQuotaError, HostedOrchError, HostedTrialError, agentResponseSchema } from './chunk-X66JOOO7.js';
|
|
4
4
|
import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
|
|
5
5
|
import { existsSync } from 'node:fs';
|
|
@@ -2,7 +2,7 @@ import { criterionSchema, finalizeResponseSchema, HostedDiscardRefusedError, Hos
|
|
|
2
2
|
import { seedSchema, parseSeed, defaultSeedState as defaultSeedState$2 } from './chunk-KIUIKAVU.js';
|
|
3
3
|
import { gmailSeedSchema, defaultSeedState } from './chunk-NJ246QPJ.js';
|
|
4
4
|
import { linearSeedSchema, defaultSeedState as defaultSeedState$1 } from './chunk-ZKID2HS3.js';
|
|
5
|
-
import { isTwinName, TWIN_REGISTRY } from './chunk-
|
|
5
|
+
import { isTwinName, TWIN_REGISTRY } from './chunk-4VVQMRWP.js';
|
|
6
6
|
import { toTwinHttpEventRow } from './chunk-OW7VVW6X.js';
|
|
7
7
|
import { redactEvent, redactSecrets } from './chunk-SG6ZTIMT.js';
|
|
8
8
|
import { mkdir, appendFile, writeFile, readFile } from 'node:fs/promises';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getAvailablePort } from './chunk-XDU6TD4O.js';
|
|
2
2
|
import { buildEgressAllowlist, readBlockedEgress } from './chunk-CBFKZZBR.js';
|
|
3
|
-
import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-
|
|
4
|
-
import { createRecorder, bootTwin } from './chunk-
|
|
3
|
+
import { parseTaskFile, seedStateForTwin, runAgentCommand, writeRunArtifactsCore } from './chunk-VBLY7LYM.js';
|
|
4
|
+
import { createRecorder, bootTwin } from './chunk-DG2VDEQE.js';
|
|
5
5
|
import { eventSchema } from './chunk-VBATFCWR.js';
|
|
6
6
|
import { redactSecrets, redactEvent } from './chunk-SG6ZTIMT.js';
|
|
7
7
|
import { serve } from '@hono/node-server';
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { newGroupId, reassuranceBox, twinReadyLine, trialsHeaderLine, trialLine, summaryLines, evaluatingLine, criterionPhrase } from './chunk-RGZBC7NF.js';
|
|
2
2
|
import { DemoCapacityError, capacityLabel, parseCapacityMarker, capacityKindFrom } from './chunk-ZX4WNSZ5.js';
|
|
3
|
-
import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-
|
|
3
|
+
import { runTask, demoTaskPath, DEMO_TASK_NAME, DEMO_REPO } from './chunk-ZUQYEPY4.js';
|
|
4
4
|
import { getAvailablePort } from './chunk-XDU6TD4O.js';
|
|
5
5
|
import './chunk-CBFKZZBR.js';
|
|
6
|
-
import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-
|
|
6
|
+
import { createHostedClient, parseTaskFile, uploadRunBlobs, scoreFromFinalizeResponse, scoreStatus, outcomeOf } from './chunk-VBLY7LYM.js';
|
|
7
7
|
import './chunk-NW7HGA2K.js';
|
|
8
8
|
import { HostedQuotaError, HostedOrchError } from './chunk-X66JOOO7.js';
|
|
9
9
|
import './chunk-KIUIKAVU.js';
|
|
10
10
|
import './chunk-NJ246QPJ.js';
|
|
11
11
|
import './chunk-ZKID2HS3.js';
|
|
12
|
-
import { bootTwin } from './chunk-
|
|
13
|
-
import './chunk-
|
|
12
|
+
import { bootTwin } from './chunk-DG2VDEQE.js';
|
|
13
|
+
import './chunk-4VVQMRWP.js';
|
|
14
14
|
import './chunk-OW7VVW6X.js';
|
|
15
15
|
import './chunk-VBATFCWR.js';
|
|
16
16
|
import './chunk-SG6ZTIMT.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { newGroupId, criterionPhrase } from './chunk-RGZBC7NF.js';
|
|
2
|
-
import { runTaskHosted, resolveRunAgentIdentity } from './chunk-
|
|
2
|
+
import { runTaskHosted, resolveRunAgentIdentity } from './chunk-DINCNFAQ.js';
|
|
3
3
|
import './chunk-ABM3CMQB.js';
|
|
4
|
-
import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-
|
|
4
|
+
import { createHostedClient, parseTaskFile, outcomeOf } from './chunk-VBLY7LYM.js';
|
|
5
5
|
import './chunk-NW7HGA2K.js';
|
|
6
6
|
import { HostedQuotaError, HostedTrialError } from './chunk-X66JOOO7.js';
|
|
7
7
|
import './chunk-KIUIKAVU.js';
|
|
8
8
|
import './chunk-NJ246QPJ.js';
|
|
9
9
|
import './chunk-ZKID2HS3.js';
|
|
10
|
-
import './chunk-
|
|
10
|
+
import './chunk-4VVQMRWP.js';
|
|
11
11
|
import './chunk-OW7VVW6X.js';
|
|
12
12
|
import './chunk-VBATFCWR.js';
|
|
13
13
|
import './chunk-SG6ZTIMT.js';
|
package/dist/src/cli/main.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, VERDICT_ARTIFACT_VERSION, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-
|
|
2
|
+
import { DEFAULT_CONTROL_PLANE_URL, DEFAULT_DASHBOARD_URL, clearLocalCredentials, friendlyHostedError, runSessionCreate, runSessionList, runSessionStop, resolveCredentials, runTaskHosted, discoverRunSet, VERDICT_ARTIFACT_VERSION, persistCredentialsAfterLogin, DEFAULT_DOCS_SITE_ORIGIN, resolveSeams, resolveCachedAgentId, readLinkCache, postAgentResolver, writeLinkCache, ensurePomeGitignored } from '../../chunk-DINCNFAQ.js';
|
|
3
3
|
import { readManifest, writeManifest, MANIFEST_JSON, readRequiredManifest, normalizeManifestTwins } from '../../chunk-ABM3CMQB.js';
|
|
4
|
-
import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-
|
|
4
|
+
import { assetPath, runTask, resolvePackageRoot, DEMO_TASK_NAME, demoTaskPath } from '../../chunk-ZUQYEPY4.js';
|
|
5
5
|
import '../../chunk-XDU6TD4O.js';
|
|
6
6
|
import '../../chunk-CBFKZZBR.js';
|
|
7
|
-
import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, outcomeOf, readConfigTwins, scoreCountsSummary, markerFor, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-
|
|
7
|
+
import { parseTaskFile, scoreStatus, runScoreLine, readLatestRun, readMetaSummary, outcomeOf, readConfigTwins, scoreCountsSummary, markerFor, criterionMarkerLabel, twinSkipSuffix, readCodeCriteria, createHostedClient, toTwinHttpEvent, redactJsonl, scoreFromFinalizeResponse, parseGitHubSeedState, uploadRunBlobs, isPreSatisfied } from '../../chunk-VBLY7LYM.js';
|
|
8
8
|
import '../../chunk-NW7HGA2K.js';
|
|
9
9
|
import { MOUNTED_TWINS, deriveAgentSlug, exitCodeFor, HostedUsageError, HostedOrchError, HostedAuthError, HostedQuotaError } from '../../chunk-X66JOOO7.js';
|
|
10
10
|
import { TAPE_ASSERTABLE_TOOLS } from '../../chunk-FKZZWWYC.js';
|
|
@@ -15,8 +15,8 @@ import '../../chunk-NJ246QPJ.js';
|
|
|
15
15
|
import { LINEAR_CHECKS } from '../../chunk-XBT6ZLBG.js';
|
|
16
16
|
import '../../chunk-ZKID2HS3.js';
|
|
17
17
|
import { oneOf, defineCheck, repoRef, VACUITY_SENTINEL_NUMBER, childStatePath, VACUITY_SENTINEL, statePath, templateSlots, renderCheck, checksDigest, checkPattern, checkNearMissPattern } from '../../chunk-JWJYNAWI.js';
|
|
18
|
-
import '../../chunk-
|
|
19
|
-
import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-
|
|
18
|
+
import '../../chunk-DG2VDEQE.js';
|
|
19
|
+
import { TWIN_NAME_LIST, isTwinName, createGitHubSmokeApp } from '../../chunk-4VVQMRWP.js';
|
|
20
20
|
import '../../chunk-OW7VVW6X.js';
|
|
21
21
|
import { isLegacyEventRow, eventSchema } from '../../chunk-VBATFCWR.js';
|
|
22
22
|
import { redactEvent, redactSecrets } from '../../chunk-SG6ZTIMT.js';
|
|
@@ -850,7 +850,7 @@ async function throwForStatus(res) {
|
|
|
850
850
|
|
|
851
851
|
// src/task/seed-verifier.ts
|
|
852
852
|
async function verifySeedWithTwin(seed) {
|
|
853
|
-
const { GitHubDomain, openGitHubCloneDatabase } = await import('../../src-
|
|
853
|
+
const { GitHubDomain, openGitHubCloneDatabase } = await import('../../src-VQOLQJJT.js');
|
|
854
854
|
const db = openGitHubCloneDatabase(":memory:");
|
|
855
855
|
try {
|
|
856
856
|
new GitHubDomain(db).seed(seed);
|
|
@@ -4541,7 +4541,7 @@ var DEFAULT_AGENT_COMMAND = `node ${DEFAULT_AGENT_FILE}`;
|
|
|
4541
4541
|
var MANIFEST_SCHEMA_URL = "https://pome.sh/schemas/v1/pome.json";
|
|
4542
4542
|
var MAX_UNREADABLE_PATHS_SHOWN = 5;
|
|
4543
4543
|
function readPackageVersion() {
|
|
4544
|
-
if ("0.23.
|
|
4544
|
+
if ("0.23.25".length > 0) return "0.23.25";
|
|
4545
4545
|
try {
|
|
4546
4546
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
4547
4547
|
const candidates = [
|
|
@@ -4996,7 +4996,7 @@ function createProgram() {
|
|
|
4996
4996
|
return;
|
|
4997
4997
|
}
|
|
4998
4998
|
{
|
|
4999
|
-
const { runDoctorChecks } = await import('../../checks-
|
|
4999
|
+
const { runDoctorChecks } = await import('../../checks-UINTOJ2L.js');
|
|
5000
5000
|
const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
|
|
5001
5001
|
const doctorReport = await runDoctorChecks({ mode: useLocal ? "full" : "hosted" });
|
|
5002
5002
|
if (!doctorReport.ok) {
|
|
@@ -5034,7 +5034,7 @@ function createProgram() {
|
|
|
5034
5034
|
taskForRuns.config.runs
|
|
5035
5035
|
);
|
|
5036
5036
|
if (k > 1) {
|
|
5037
|
-
const { runTrialGroup } = await import('../../runTrialGroup-
|
|
5037
|
+
const { runTrialGroup } = await import('../../runTrialGroup-CL4EJZD2.js');
|
|
5038
5038
|
const fileForRerun = relative(process.cwd(), file);
|
|
5039
5039
|
const rerunCommand = defaultTask ? options.trials !== void 0 ? `pome run -n ${k}` : "pome run" : `pome run ${fileForRerun && !fileForRerun.startsWith("..") ? fileForRerun : file} -n ${k}`;
|
|
5040
5040
|
const groupResult = await runTrialGroup({
|
|
@@ -5128,7 +5128,7 @@ function createProgram() {
|
|
|
5128
5128
|
process.exitCode = 5;
|
|
5129
5129
|
return;
|
|
5130
5130
|
}
|
|
5131
|
-
const { runDemo } = await import('../../runDemo-
|
|
5131
|
+
const { runDemo } = await import('../../runDemo-5Z7PIYTZ.js');
|
|
5132
5132
|
const result = await runDemo({
|
|
5133
5133
|
apiBase: opts.apiUrl.replace(/\/$/, ""),
|
|
5134
5134
|
dashboardBase: process.env.POME_DASHBOARD_URL ?? DEFAULT_DASHBOARD_URL,
|
|
@@ -5146,7 +5146,7 @@ function createProgram() {
|
|
|
5146
5146
|
program.command("doctor").description(
|
|
5147
5147
|
"Check the agent\u2194twin wiring: pome.json (or pome.yaml) present + valid, the local twin boots + serves, requests routed to the twin (not a hardcoded production host), egress floor active. On failure prints one named cause (file:line where knowable) + one concrete fix and exits non-zero."
|
|
5148
5148
|
).action(async () => {
|
|
5149
|
-
const { runDoctorChecks } = await import('../../checks-
|
|
5149
|
+
const { runDoctorChecks } = await import('../../checks-UINTOJ2L.js');
|
|
5150
5150
|
const { renderDoctorReport } = await import('../../render-ZQQ4UMNO.js');
|
|
5151
5151
|
const report = await runDoctorChecks();
|
|
5152
5152
|
for (const line of renderDoctorReport(report, { passNote: true })) console.error(line);
|
|
@@ -5322,7 +5322,7 @@ function createProgram() {
|
|
|
5322
5322
|
).description(
|
|
5323
5323
|
"Start a standalone twin as a long-lived foreground server (Ctrl-C to stop)"
|
|
5324
5324
|
).action(async (name, options) => {
|
|
5325
|
-
const { runTwinStartCommand } = await import('../../twinStart-
|
|
5325
|
+
const { runTwinStartCommand } = await import('../../twinStart-MVO22G7C.js');
|
|
5326
5326
|
await runTwinStartCommand(name, options);
|
|
5327
5327
|
});
|
|
5328
5328
|
twin.command("reset").argument("[name]", "Twin name (default: github)", "github").description("Reset standalone twin state").action(async (name) => {
|
|
@@ -134,10 +134,11 @@ var GITHUB_ROUTES = {
|
|
|
134
134
|
// parameter: base64 is the only encoding this surface has. Undeclared
|
|
135
135
|
// now, so github's measured disposition (`ignore`) discards it.
|
|
136
136
|
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
//
|
|
137
|
+
// F-1460 closed the behavioural half too: `routes.ts` base64-decodes this
|
|
138
|
+
// field via `rest-content.ts`, and invalid base64 gets GitHub's own 422.
|
|
139
|
+
// ⚠️ ON THIS DOOR ONLY — the MCP write tools take plain text, because
|
|
140
|
+
// GitHub's MCP server does. Divergence 24 is retired; see FIDELITY.md
|
|
141
|
+
// "The two doors take `content` differently" before touching either.
|
|
141
142
|
}
|
|
142
143
|
}),
|
|
143
144
|
listCommits: declareInputs({
|
|
@@ -695,16 +696,18 @@ Available methods:
|
|
|
695
696
|
var TwinError = class extends Error {
|
|
696
697
|
status;
|
|
697
698
|
errors;
|
|
698
|
-
|
|
699
|
+
documentationUrl;
|
|
700
|
+
constructor(message, status, errors, documentationUrl) {
|
|
699
701
|
super(message);
|
|
700
702
|
this.status = status;
|
|
701
703
|
this.errors = errors;
|
|
704
|
+
this.documentationUrl = documentationUrl;
|
|
702
705
|
}
|
|
703
706
|
};
|
|
704
|
-
function githubError(message, status, errors) {
|
|
707
|
+
function githubError(message, status, errors, documentationUrl) {
|
|
705
708
|
return {
|
|
706
709
|
message,
|
|
707
|
-
documentation_url: "https://docs.github.com/rest",
|
|
710
|
+
documentation_url: documentationUrl ?? "https://docs.github.com/rest",
|
|
708
711
|
status,
|
|
709
712
|
...errors ? { errors } : {}
|
|
710
713
|
};
|
|
@@ -790,7 +793,13 @@ var toolArgumentSchemas = [
|
|
|
790
793
|
},
|
|
791
794
|
{
|
|
792
795
|
name: "create_or_update_file",
|
|
793
|
-
|
|
796
|
+
// F-1460 — no `encoding`. GitHub's MCP server declares none and needs none:
|
|
797
|
+
// it takes `content` as PLAIN TEXT and base64-encodes it itself before
|
|
798
|
+
// calling the REST API, which its own tool description says outright. The
|
|
799
|
+
// switch survived F-1389 because that ticket removed it from the REST
|
|
800
|
+
// DECLARATION, and the served table (a capture) and these validators are two
|
|
801
|
+
// different objects. Undeclared now, so `ignore` discards it if sent.
|
|
802
|
+
schema: z.object({ ...ownerRepo, path: z.string().min(1), message: z.string().min(1), content: z.string(), branch: z.string().min(1), sha: z.string().optional() })
|
|
794
803
|
},
|
|
795
804
|
{
|
|
796
805
|
name: "create_branch",
|
|
@@ -798,7 +807,9 @@ var toolArgumentSchemas = [
|
|
|
798
807
|
},
|
|
799
808
|
{
|
|
800
809
|
name: "push_files",
|
|
801
|
-
|
|
810
|
+
// Same as `create_or_update_file` above: GitHub's `push_files` hands each
|
|
811
|
+
// file's `content` straight to a Git tree entry, which takes plain UTF-8.
|
|
812
|
+
schema: z.object({ ...ownerRepo, branch: z.string().optional(), message: z.string().min(1), files: z.array(z.object({ path: z.string().min(1), content: z.string() })).min(1) })
|
|
802
813
|
},
|
|
803
814
|
// GitHub's consolidated issue pair (F-1376). `issue_read` and `issue_write`
|
|
804
815
|
// replace the seven single-purpose tools this twin used to serve — `get_issue`,
|
|
@@ -2554,8 +2565,7 @@ function createOrUpdateFile(domain, input, options = {}, onDelta) {
|
|
|
2554
2565
|
validationFailed("sha", "missing", path);
|
|
2555
2566
|
if (existing && input.sha !== existing.sha)
|
|
2556
2567
|
validationFailed("sha", "invalid", input.sha);
|
|
2557
|
-
const
|
|
2558
|
-
const commit = domain.commitFiles(repo, branch, input.message, [{ path, content }], options.actor ?? "pome-agent");
|
|
2568
|
+
const commit = domain.commitFiles(repo, branch, input.message, [{ path, content: input.content }], options.actor ?? "pome-agent");
|
|
2559
2569
|
const file = domain.getFile(repo.id, branch, path);
|
|
2560
2570
|
afterFile = file;
|
|
2561
2571
|
return { content: contentFileJson(file, repo), commit: commitJson(commit, repo) };
|
|
@@ -2576,7 +2586,7 @@ function pushFiles(domain, input, options = {}, onDelta) {
|
|
|
2576
2586
|
if (paths.has(path))
|
|
2577
2587
|
validationFailed("files.path", "duplicate", path);
|
|
2578
2588
|
paths.add(path);
|
|
2579
|
-
return { path, content: file.
|
|
2589
|
+
return { path, content: file.content };
|
|
2580
2590
|
});
|
|
2581
2591
|
const beforeFiles = files.map((file) => {
|
|
2582
2592
|
const existing = domain.getFile(repo.id, branch, file.path);
|
|
@@ -4489,6 +4499,20 @@ var GitHubDomain = class {
|
|
|
4489
4499
|
}
|
|
4490
4500
|
};
|
|
4491
4501
|
|
|
4502
|
+
// ../packages/twin-github/dist/src/rest-content.js
|
|
4503
|
+
var BASE64 = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
4504
|
+
function invalidBase64() {
|
|
4505
|
+
throw new TwinError("content is not valid Base64", 422, void 0, "https://docs.github.com/rest/repos/contents#create-or-update-file-contents");
|
|
4506
|
+
}
|
|
4507
|
+
function decodeRestContent(content) {
|
|
4508
|
+
const stripped = content.replace(/\s+/g, "");
|
|
4509
|
+
if (!BASE64.test(stripped))
|
|
4510
|
+
invalidBase64();
|
|
4511
|
+
if (stripped.length % 4 !== 0)
|
|
4512
|
+
invalidBase64();
|
|
4513
|
+
return Buffer.from(stripped, "base64");
|
|
4514
|
+
}
|
|
4515
|
+
|
|
4492
4516
|
// ../packages/twin-github/dist/src/routes.js
|
|
4493
4517
|
function captureDelta(fn) {
|
|
4494
4518
|
let delta = null;
|
|
@@ -4531,7 +4555,8 @@ function registerGitHubRoutes(session, { domain, recorder }) {
|
|
|
4531
4555
|
route(GITHUB_ROUTES.getRepositoryRootContents, ({ path, query }) => ok(domain.getFileContents({ owner: path.owner, repo: path.repo, path: "", ref: query.ref })));
|
|
4532
4556
|
route(GITHUB_ROUTES.getFileContents, ({ path, query }) => ok(domain.getFileContents({ ...path, ref: query.ref })));
|
|
4533
4557
|
route(GITHUB_ROUTES.createOrUpdateFile, ({ path, body }, c) => {
|
|
4534
|
-
const
|
|
4558
|
+
const content = decodeRestContent(body.content).toString("utf8");
|
|
4559
|
+
const { value, delta } = captureDelta((onDelta) => domain.createOrUpdateFile({ ...path, ...body, content }, { actor: sessionLogin(c) }, onDelta));
|
|
4535
4560
|
const status = delta !== null && delta.before === null ? 201 : 200;
|
|
4536
4561
|
return { status, body: value, mutation: true, delta };
|
|
4537
4562
|
});
|
|
@@ -4784,7 +4809,10 @@ function githubErrorEnvelope(err) {
|
|
|
4784
4809
|
};
|
|
4785
4810
|
}
|
|
4786
4811
|
if (err instanceof TwinError) {
|
|
4787
|
-
return {
|
|
4812
|
+
return {
|
|
4813
|
+
status: err.status,
|
|
4814
|
+
body: githubError(err.message, err.status, err.errors, err.documentationUrl)
|
|
4815
|
+
};
|
|
4788
4816
|
}
|
|
4789
4817
|
const issues = zodIssues(err);
|
|
4790
4818
|
if (issues) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { bootTwin } from './chunk-
|
|
2
|
-
import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-
|
|
1
|
+
import { bootTwin } from './chunk-DG2VDEQE.js';
|
|
2
|
+
import { isTwinName, TWIN_NAMES, defaultPortFor, TWIN_REGISTRY } from './chunk-4VVQMRWP.js';
|
|
3
3
|
import './chunk-OW7VVW6X.js';
|
|
4
4
|
import './chunk-VBATFCWR.js';
|
|
5
5
|
import './chunk-SG6ZTIMT.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pome-sh/cli",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.25",
|
|
4
4
|
"description": "Digital-twin testing for AI agents \u2014 run tasks against resettable local or hosted twins and record tool-call traces for evaluation on pome.sh.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -49,10 +49,9 @@
|
|
|
49
49
|
"prepublishOnly": "node scripts/assert-publishable.mjs && npm run build",
|
|
50
50
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
51
51
|
"test": "vitest run",
|
|
52
|
-
"test:e2e": "vitest run test/e2e",
|
|
53
|
-
"gate:no-eval": "node ../scripts/no-eval-in-oss.mjs",
|
|
54
|
-
"gate:no-native": "node ../scripts/no-native-modules.mjs --root .",
|
|
55
52
|
"gate:recorder-overhead": "tsx scripts/recorder-overhead-gate.ts",
|
|
53
|
+
"gate:agent-trace-overhead": "tsx scripts/overhead-gate.ts",
|
|
54
|
+
"gate:cas-adapter-acceptance": "tsx scripts/cas-adapter-acceptance.ts",
|
|
56
55
|
"emit:manifest-schema": "node scripts/emit-manifest-schema.mjs",
|
|
57
56
|
"check:manifest-schema": "node scripts/emit-manifest-schema.mjs --check"
|
|
58
57
|
},
|