@pome-sh/cli 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +3 -3
- package/node_modules/@pome-sh/sdk/dist/checks.d.ts +16 -0
- package/node_modules/@pome-sh/sdk/dist/checks.js.map +1 -1
- package/node_modules/@pome-sh/sdk/package.json +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/check-tape.d.ts +2 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-tape.js +82 -0
- package/node_modules/@pome-sh/twin-github/dist/src/check-tape.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/checks.d.ts +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/checks.js +12 -4
- package/node_modules/@pome-sh/twin-github/dist/src/checks.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/package.json +2 -2
- package/package.json +3 -3
package/dist/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "pome-sh",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"git_sha": "
|
|
5
|
-
"build_time": "2026-07-
|
|
3
|
+
"version": "0.12.0",
|
|
4
|
+
"git_sha": "255ba763f78f424368749baed6aa19b5a3f5c444",
|
|
5
|
+
"build_time": "2026-07-29T18:54:35.706Z"
|
|
6
6
|
}
|
|
@@ -16,10 +16,26 @@ export interface CheckOutcome {
|
|
|
16
16
|
passed: boolean;
|
|
17
17
|
reason: string;
|
|
18
18
|
status?: "passed" | "failed" | "unmatched" | "skipped";
|
|
19
|
+
evidenceEventIds?: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface CheckTapeEvent {
|
|
22
|
+
ts?: string | null;
|
|
23
|
+
twin?: string | null;
|
|
24
|
+
method?: string | null;
|
|
25
|
+
path?: string | null;
|
|
26
|
+
request_body?: unknown;
|
|
27
|
+
status?: number | null;
|
|
28
|
+
response_body?: unknown;
|
|
29
|
+
latency_ms?: number | null;
|
|
30
|
+
fidelity?: string | null;
|
|
31
|
+
state_mutation?: boolean | null;
|
|
32
|
+
error?: string | null;
|
|
33
|
+
event_id?: string | null;
|
|
19
34
|
}
|
|
20
35
|
export interface CheckSubstrate<TState> {
|
|
21
36
|
seed: TState | null;
|
|
22
37
|
final: TState;
|
|
38
|
+
tape: readonly CheckTapeEvent[] | null;
|
|
23
39
|
}
|
|
24
40
|
export interface CheckDefinition<TState, TArgs extends Record<string, string>> {
|
|
25
41
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,2DAA2D;AAC3D,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AACvE,0EAA0E;AAC1E,yEAAyE;AACzE,wDAAwD;AACxD,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,gDAAgD;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,wEAAwE;AACxE,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,8EAA8E;AAC9E,sBAAsB;AACtB,EAAE;AACF,iFAAiF;AACjF,+EAA+E;AAC/E,iFAAiF;AACjF,6BAA6B;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAyBjD,8EAA8E;AAC9E,uEAAuE;AACvE,+EAA+E;AAC/E,yCAAyC;AACzC,MAAM,CAAC,MAAM,OAAO,GAAmB;IACrC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,iCAAiC;IAC1C,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;IACxB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG;CACpB,CAAC;AAEF,6EAA6E;AAC7E,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,uCAAuC;AACvC,EAAE;AACF,iFAAiF;AACjF,+EAA+E;AAC/E,6EAA6E;AAC7E,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,MAAyB,EAAE,OAAgB;IAC7E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,kCAAkC,CAAC,CAAC;IAC/F,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;QACrD,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAE;QAC9B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;QACxB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG;KACpB,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,iFAAiF;AACjF,6EAA6E;AAC7E,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,uBAAuB;AACvB,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pome-sh/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Twin engine for Pome digital twins — defineTwin() + serve(): HTTP mounting, bearer auth, trace recorder, MCP dispatch, SQLite-backed state.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
//
|
|
3
|
+
// What GitHub's declared checks can assert about the RUN — the recorded call
|
|
4
|
+
// tape rather than the exported end state (F-1076, settling D1's open half).
|
|
5
|
+
//
|
|
6
|
+
// Why this class has to exist at all: an unsupported call leaves NO STATE
|
|
7
|
+
// TRACE. The twin answers 501 and mutates nothing, so `state_final.json` is
|
|
8
|
+
// byte-identical whether the examinee reached for an unimplemented route or
|
|
9
|
+
// never tried. The runtime stamps `fidelity: "unsupported"` on the recorded
|
|
10
|
+
// event instead, and that stamp is the only place the fact survives.
|
|
11
|
+
//
|
|
12
|
+
// This check was a hand-written regex in pome-cloud until now. It stayed behind
|
|
13
|
+
// when F-1075 moved the other ten, for one reason: whether a declaration MAY
|
|
14
|
+
// read the tape was D1's open half, and declaring a substrate nothing supplied
|
|
15
|
+
// would have been a promise with no engine behind it.
|
|
16
|
+
//
|
|
17
|
+
// Declarations only. The grammar rules they obey are in `checks.ts`, which
|
|
18
|
+
// assembles them.
|
|
19
|
+
import { defineCheck } from "@pome-sh/sdk/checks";
|
|
20
|
+
export const noUnsupportedEndpoint = defineCheck({
|
|
21
|
+
id: "github.no-unsupported-endpoint",
|
|
22
|
+
description: "Scans the recorded call tape for any request the twin answered with " +
|
|
23
|
+
'fidelity "unsupported" — a route it does not implement, answered 501. It asserts ' +
|
|
24
|
+
"nothing about whether the run SUCCEEDED, and nothing about calls that were merely " +
|
|
25
|
+
"rejected: a 404 or a 422 from a route the twin does implement is a semantic answer " +
|
|
26
|
+
"and passes this check. The tape is scoped to this twin by the engine before the " +
|
|
27
|
+
"check sees it, so an unsupported call to a DIFFERENT twin in a multi-twin session " +
|
|
28
|
+
"cannot fail it.",
|
|
29
|
+
// No slots. The corpus says this exact sentence in all ten places it appears,
|
|
30
|
+
// and under position 2 an author PICKS the check rather than typing it — so
|
|
31
|
+
// the legacy regex's optional twin word ("No unsupported GitHub endpoint was
|
|
32
|
+
// called") and its plural/`were` variants are retired rather than ported,
|
|
33
|
+
// exactly as F-1075 retired `issue-has-label-generic`.
|
|
34
|
+
template: "No unsupported endpoint was called",
|
|
35
|
+
params: {},
|
|
36
|
+
substrate: "tape",
|
|
37
|
+
// A prohibition. Nothing is required to happen; only the examinee reaching
|
|
38
|
+
// for an unimplemented route can break it.
|
|
39
|
+
polarity: () => "negative",
|
|
40
|
+
// No caller-supplied literal is hunted for in any substrate, so there is
|
|
41
|
+
// nothing a redactor could silently delete out from under this check.
|
|
42
|
+
subject: () => null,
|
|
43
|
+
// No capture groups, so the sentence carries no literal to falsify. The
|
|
44
|
+
// trigger is "a call with fidelity=unsupported exists", which lives on the
|
|
45
|
+
// tape and not in the sentence. Reported as `no_trigger`, never as clean.
|
|
46
|
+
vacuityMutant: () => null,
|
|
47
|
+
evaluate(_args, { tape }) {
|
|
48
|
+
// The engine guards this before calling; the check guards too, so a
|
|
49
|
+
// consumer that forgets gets a named skip rather than a vacuous pass. For a
|
|
50
|
+
// NEGATIVE criterion that distinction is the whole ballgame — passing here
|
|
51
|
+
// would be a clean bill of health issued over a tape nobody read.
|
|
52
|
+
//
|
|
53
|
+
// Note `null` and `[]` are deliberately different: an EMPTY tape is a real
|
|
54
|
+
// world (the agent called nothing, so it called nothing unsupported) and
|
|
55
|
+
// reaches a real verdict below.
|
|
56
|
+
if (tape === null)
|
|
57
|
+
return { passed: false, reason: "tape_missing", status: "skipped" };
|
|
58
|
+
const unsupported = tape.filter((event) => event.fidelity === "unsupported");
|
|
59
|
+
if (unsupported.length === 0) {
|
|
60
|
+
// No evidence on the pass branch (F-980). This asserts a NEGATIVE over the
|
|
61
|
+
// whole tape — "none of these calls was unsupported" — and a negative over
|
|
62
|
+
// an empty set has no single call to point at. Citing all N inspected
|
|
63
|
+
// calls would be a copy of the trace, not evidence.
|
|
64
|
+
return {
|
|
65
|
+
passed: true,
|
|
66
|
+
reason: `no unsupported GitHub endpoint was called (${tape.length} call(s) inspected)`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Cite the offenders. A row with no `event_id` drops out of the CITATION but
|
|
70
|
+
// not out of the count or the prose: losing an id must never lose a finding.
|
|
71
|
+
const evidenceEventIds = unsupported
|
|
72
|
+
.map((event) => event.event_id)
|
|
73
|
+
.filter((id) => typeof id === "string" && id !== "");
|
|
74
|
+
const outcome = {
|
|
75
|
+
passed: false,
|
|
76
|
+
reason: `${unsupported.length} unsupported GitHub call(s): ` +
|
|
77
|
+
`[${unsupported.map((event) => event.path ?? "?").join(", ")}]`,
|
|
78
|
+
};
|
|
79
|
+
return evidenceEventIds.length > 0 ? { ...outcome, evidenceEventIds } : outcome;
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=check-tape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-tape.js","sourceRoot":"","sources":["../../src/check-tape.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,qEAAqE;AACrE,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,sDAAsD;AACtD,EAAE;AACF,2EAA2E;AAC3E,kBAAkB;AAElB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,CAAC,MAAM,qBAAqB,GAAiC,WAAW,CAAC;IAC7E,EAAE,EAAE,gCAAgC;IACpC,WAAW,EACT,sEAAsE;QACtE,mFAAmF;QACnF,oFAAoF;QACpF,qFAAqF;QACrF,kFAAkF;QAClF,oFAAoF;QACpF,iBAAiB;IACnB,8EAA8E;IAC9E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,uDAAuD;IACvD,QAAQ,EAAE,oCAAoC;IAC9C,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,MAAM;IACjB,2EAA2E;IAC3E,2CAA2C;IAC3C,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,yEAAyE;IACzE,sEAAsE;IACtE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE;QACtB,oEAAoE;QACpE,4EAA4E;QAC5E,2EAA2E;QAC3E,kEAAkE;QAClE,EAAE;QACF,2EAA2E;QAC3E,yEAAyE;QACzE,gCAAgC;QAChC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAEvF,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC;QAC7E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,2EAA2E;YAC3E,2EAA2E;YAC3E,sEAAsE;YACtE,oDAAoD;YACpD,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,8CAA8C,IAAI,CAAC,MAAM,qBAAqB;aACvF,CAAC;QACJ,CAAC;QAED,6EAA6E;QAC7E,6EAA6E;QAC7E,MAAM,gBAAgB,GAAG,WAAW;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;aAC9B,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,KAAK;YACb,MAAM,EACJ,GAAG,WAAW,CAAC,MAAM,+BAA+B;gBACpD,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;SAClE,CAAC;QACF,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAClF,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -37,13 +37,17 @@
|
|
|
37
37
|
// more than one word order. Nothing renders the second one now, so it is
|
|
38
38
|
// retired rather than ported.
|
|
39
39
|
//
|
|
40
|
-
//
|
|
41
|
-
// TAPE, and
|
|
42
|
-
//
|
|
43
|
-
//
|
|
40
|
+
// F-1076 brought the last one home. `No unsupported endpoint was called` reads
|
|
41
|
+
// the call TAPE, and until D1's open half was settled there was no substrate to
|
|
42
|
+
// declare — the promise would have had no engine behind it. There is one now:
|
|
43
|
+
// `check-tape.ts` holds the declaration, and the consuming engine REFUSES to
|
|
44
|
+
// evaluate it against a tape it was not given rather than skipping silently.
|
|
45
|
+
//
|
|
46
|
+
// So github now has no hand-written predicate left anywhere.
|
|
44
47
|
import { issueAssignee, issueCommentContains, issueExactlyOneLabel, issueExists, issueHasLabel, issueStateCheck, } from "./check-issues.js";
|
|
45
48
|
import { pullRequestReviewExists, pullRequestStateCheck } from "./check-pulls.js";
|
|
46
49
|
import { commitStatus, fileExists, noNewLabels } from "./check-repos.js";
|
|
50
|
+
import { noUnsupportedEndpoint } from "./check-tape.js";
|
|
47
51
|
// Order is not first-match-wins here — the generated patterns are anchored and
|
|
48
52
|
// mutually exclusive, and `checks-contract.test.ts` proves no sentence is
|
|
49
53
|
// claimed by two checks. It is the order an authoring surface lists them in, so
|
|
@@ -61,5 +65,9 @@ export const GITHUB_CHECKS = [
|
|
|
61
65
|
pullRequestReviewExists,
|
|
62
66
|
fileExists,
|
|
63
67
|
commitStatus,
|
|
68
|
+
// Last, because the listing order runs from the assertion an author reaches
|
|
69
|
+
// for first to the ones a specialised task needs — and this is the only one
|
|
70
|
+
// that asserts about the RUN rather than the world it left behind.
|
|
71
|
+
noUnsupportedEndpoint,
|
|
64
72
|
];
|
|
65
73
|
//# sourceMappingURL=checks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/checks.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,4EAA4E;AAC5E,kEAAkE;AAClE,+EAA+E;AAC/E,4CAA4C;AAC5C,EAAE;AACF,6DAA6D;AAC7D,6EAA6E;AAC7E,8DAA8D;AAC9D,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,oEAAoE;AACpE,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,EAAE;AACF,wEAAwE;AACxE,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,6EAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/checks.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,4EAA4E;AAC5E,kEAAkE;AAClE,+EAA+E;AAC/E,4CAA4C;AAC5C,EAAE;AACF,6DAA6D;AAC7D,6EAA6E;AAC7E,8DAA8D;AAC9D,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,oEAAoE;AACpE,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,EAAE;AACF,wEAAwE;AACxE,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,6DAA6D;AAE7D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAexD,+EAA+E;AAC/E,0EAA0E;AAC1E,gFAAgF;AAChF,uEAAuE;AACvE,0BAA0B;AAC1B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,eAAe;IACf,aAAa;IACb,oBAAoB;IACpB,aAAa;IACb,oBAAoB;IACpB,WAAW;IACX,qBAAqB;IACrB,uBAAuB;IACvB,UAAU;IACV,YAAY;IACZ,4EAA4E;IAC5E,4EAA4E;IAC5E,mEAAmE;IACnE,qBAAqB;CACb,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pome-sh/twin-github",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Deterministic GitHub-shaped twin for agent testing — REST + MCP, SQLite-backed state.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@hono/node-server": "^2.0.10",
|
|
37
|
-
"@pome-sh/sdk": "0.
|
|
37
|
+
"@pome-sh/sdk": "0.8.0",
|
|
38
38
|
"@pome-sh/shared-types": "0.12.2",
|
|
39
39
|
"hono": "^4.12.31",
|
|
40
40
|
"zod": "^4.1.13"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pome-sh/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Digital-twin testing for AI agents — run tasks against resettable local or hosted twins and record tool-call traces for evaluation on pome.sh.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"@anthropic-ai/sdk": "^0.110.0",
|
|
66
66
|
"@hono/node-server": "^2.0.10",
|
|
67
67
|
"@openrouter/ai-sdk-provider": "^3.0.0",
|
|
68
|
-
"@pome-sh/sdk": "0.
|
|
68
|
+
"@pome-sh/sdk": "0.8.0",
|
|
69
69
|
"@pome-sh/shared-types": "0.12.2",
|
|
70
70
|
"@pome-sh/twin-gmail": "0.2.0",
|
|
71
|
-
"@pome-sh/twin-github": "0.
|
|
71
|
+
"@pome-sh/twin-github": "0.5.0",
|
|
72
72
|
"@pome-sh/twin-linear": "0.1.0",
|
|
73
73
|
"@pome-sh/twin-slack": "0.2.2",
|
|
74
74
|
"@pome-sh/twin-stripe": "0.2.5",
|