dev-flow-codex 0.5.0 → 0.5.1
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 +10 -10
- package/bin/dev-flow-codex.mjs +0 -3
- package/lib/lifecycle.mjs +4 -14
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/skills/dev-flow/SKILL.md +5 -9
- package/plugin/skills/dev-flow/references/method-profiles.md +1 -1
- package/plugin/skills/dev-flow/references/node-payloads.md +1 -1
- package/runtime/darwin-arm64/dev-flow +0 -0
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ dev-flow-codex setup
|
|
|
21
21
|
GitHub Release `v0.4.0` 与 registry 回读证据为准。
|
|
22
22
|
|
|
23
23
|
当前公开支持 native macOS arm64、Node.js `>=24` 和 Codex
|
|
24
|
-
`>=0.147.0
|
|
24
|
+
`>=0.147.0`。没有 Linux、Windows、Intel Mac、Rosetta 或 DeepSeek 产品支持声明。
|
|
25
25
|
|
|
26
26
|
## Closed package
|
|
27
27
|
|
|
@@ -87,17 +87,17 @@ does not select this Skill;wrong plugin namespace、wrong Skill base name 或
|
|
|
87
87
|
This does not disable ordinary Codex repository tools. The package does not make or claim selector-bound MCP visibility or authorization。
|
|
88
88
|
|
|
89
89
|
被接纳的请求必须只涉及一个现有 Git repository,并先调用 `dev_flow_server_info({})`。当前
|
|
90
|
-
source-local
|
|
90
|
+
source-local current contract handshake 必须返回:
|
|
91
91
|
|
|
92
92
|
```text
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
process = standard-development@1
|
|
93
|
+
process = standard-development
|
|
94
|
+
definition_digest = exact current process content
|
|
96
95
|
method_profiles = plain, spec-kit, openspec
|
|
97
96
|
exact six-tool catalog
|
|
98
97
|
```
|
|
99
98
|
|
|
100
|
-
|
|
99
|
+
不完整或不同顺序的 catalog、schema、process digest 会停止请求。Core 产品版本从实际 bundled
|
|
100
|
+
executable 读取,不要求与 Codex package version 相等。公开工具为:
|
|
101
101
|
|
|
102
102
|
```text
|
|
103
103
|
dev_flow_server_info
|
|
@@ -142,10 +142,10 @@ Core 返回的五分类 Assessment 和 advice。Probe 零写入;只有显式 r
|
|
|
142
142
|
Core-derived transition 或创建一次 blocker。Adapter 不判断 classification、retry safety、resume
|
|
143
143
|
node 或 destination。
|
|
144
144
|
|
|
145
|
-
##
|
|
145
|
+
## pre-graph data unsupported guidance
|
|
146
146
|
|
|
147
|
-
Graph package 只支持
|
|
148
|
-
|
|
147
|
+
Graph package 只支持 current SQLite layout、strict current snapshot 和精确 `standard-development`。
|
|
148
|
+
遇到 incompatible/pre-graph data 时 Core 返回 `SCHEMA_UNSUPPORTED`,且不 decode、migrate、rename、truncate、
|
|
149
149
|
delete 或 reset 旧数据。不要重复启动或自动清理。
|
|
150
150
|
|
|
151
151
|
用户必须明确选择一个新的绝对、canonical、usable `DEV_FLOW_DATA_DIR`,或在 Core 外部手工
|
|
@@ -158,7 +158,7 @@ archive/rename/delete 旧目录,再启动 graph Core。错误信息不回显
|
|
|
158
158
|
|
|
159
159
|
setup/update/remove/uninstall 均保留 Core task data 和未知相邻文件,不会修改目标 repository 或
|
|
160
160
|
Git。remove 应先证明 plugin/marketplace absence,再单独执行 package-manager uninstall。重新安装
|
|
161
|
-
兼容的 graph artifact 可以从同一
|
|
161
|
+
兼容的 graph artifact 可以从同一 current SQLite format 数据目录恢复任务;没有任何 pre-graph data reader 或
|
|
162
162
|
conversion path。
|
|
163
163
|
|
|
164
164
|
## Closed node payload construction
|
package/bin/dev-flow-codex.mjs
CHANGED
|
@@ -58,9 +58,6 @@ export async function runCLI(arguments_, dependencies = {}) {
|
|
|
58
58
|
environment,
|
|
59
59
|
currentDirectory: paths.packageRoot,
|
|
60
60
|
});
|
|
61
|
-
if (coreVersion !== packageVersion) {
|
|
62
|
-
throw new Error(`package version ${packageVersion} does not match Core version ${coreVersion}`);
|
|
63
|
-
}
|
|
64
61
|
stdout.write(`dev-flow-codex ${packageVersion} (core ${coreVersion})\n`);
|
|
65
62
|
return { code: 0, signal: null };
|
|
66
63
|
}
|
package/lib/lifecycle.mjs
CHANGED
|
@@ -20,7 +20,7 @@ import { containedPath } from "./paths.mjs";
|
|
|
20
20
|
|
|
21
21
|
const execFile = promisify(execFileCallback);
|
|
22
22
|
|
|
23
|
-
export const CODEX_COMPATIBILITY_RANGE = ">=0.147.0
|
|
23
|
+
export const CODEX_COMPATIBILITY_RANGE = ">=0.147.0";
|
|
24
24
|
export const MARKETPLACE_NAME = "dev-flow-local";
|
|
25
25
|
export const PLUGIN_NAME = "dev-flow-codex";
|
|
26
26
|
export const PLUGIN_SELECTOR = `${PLUGIN_NAME}@${MARKETPLACE_NAME}`;
|
|
@@ -293,9 +293,6 @@ async function preflightSetup({ paths, packageVersion, codexExecutable, environm
|
|
|
293
293
|
environment,
|
|
294
294
|
currentDirectory: paths.packageRoot,
|
|
295
295
|
});
|
|
296
|
-
if (coreVersion !== packageVersion) {
|
|
297
|
-
throw new Error(`packaged Core version ${coreVersion} does not match package version ${packageVersion}`);
|
|
298
|
-
}
|
|
299
296
|
const codexVersion = await inspectCodexVersion(codexExecutable, {
|
|
300
297
|
environment,
|
|
301
298
|
currentDirectory: paths.packageRoot,
|
|
@@ -473,7 +470,6 @@ function assertRegistrationAbsent(state, paths) {
|
|
|
473
470
|
function assertRemovalReceipt(receipt, paths, packageVersion) {
|
|
474
471
|
const matches =
|
|
475
472
|
receipt.product.version === packageVersion &&
|
|
476
|
-
receipt.product.core_version === packageVersion &&
|
|
477
473
|
receipt.registration.marketplace_name === MARKETPLACE_NAME &&
|
|
478
474
|
receipt.registration.marketplace_root === paths.marketplaceRoot &&
|
|
479
475
|
receipt.registration.plugin_name === PLUGIN_NAME &&
|
|
@@ -739,7 +735,6 @@ function createReceipt({
|
|
|
739
735
|
installedAt,
|
|
740
736
|
}) {
|
|
741
737
|
return validateReceipt({
|
|
742
|
-
schema_version: 3,
|
|
743
738
|
product: {
|
|
744
739
|
name: PLUGIN_NAME,
|
|
745
740
|
version: packageVersion,
|
|
@@ -822,29 +817,26 @@ async function readJSON(path, label) {
|
|
|
822
817
|
}
|
|
823
818
|
|
|
824
819
|
export function versionSatisfiesRange(version, range = CODEX_COMPATIBILITY_RANGE) {
|
|
825
|
-
const match = /^>=(\S+)
|
|
820
|
+
const match = /^>=(\S+)$/.exec(range);
|
|
826
821
|
if (!match) throw new Error(`unsupported compatibility range ${JSON.stringify(range)}`);
|
|
827
822
|
const candidate = parseSemver(version, "Codex version");
|
|
828
823
|
const minimum = parseSemver(match[1], "compatibility minimum");
|
|
829
|
-
|
|
830
|
-
return compareSemver(candidate, minimum) >= 0 && compareSemver(candidate, maximum) < 0;
|
|
824
|
+
return compareSemver(candidate, minimum) >= 0;
|
|
831
825
|
}
|
|
832
826
|
|
|
833
827
|
export function validateReceipt(receipt, { compatibilityRange = CODEX_COMPATIBILITY_RANGE } = {}) {
|
|
834
828
|
assertObject(receipt, "registration receipt");
|
|
835
829
|
assertExactKeys(
|
|
836
830
|
receipt,
|
|
837
|
-
["
|
|
831
|
+
["product", "host", "registration", "paths", "resource_digests", "installed_at"],
|
|
838
832
|
"registration receipt",
|
|
839
833
|
);
|
|
840
|
-
if (receipt.schema_version !== 3) throw new Error("registration receipt schema_version must equal 3");
|
|
841
834
|
|
|
842
835
|
assertObject(receipt.product, "product");
|
|
843
836
|
assertExactKeys(receipt.product, ["name", "version", "core_version", "codex_compatibility"], "product");
|
|
844
837
|
assertEqual(receipt.product.name, "dev-flow-codex", "product.name");
|
|
845
838
|
parseSemver(receipt.product.version, "product.version");
|
|
846
839
|
parseSemver(receipt.product.core_version, "product.core_version");
|
|
847
|
-
assertEqual(receipt.product.core_version, receipt.product.version, "product Core version");
|
|
848
840
|
assertEqual(receipt.product.codex_compatibility, compatibilityRange, "product compatibility range");
|
|
849
841
|
|
|
850
842
|
assertObject(receipt.host, "host");
|
|
@@ -1005,7 +997,6 @@ function assertCompatibleReceiptUpgrade(previousReceipt, currentReceipt) {
|
|
|
1005
997
|
|
|
1006
998
|
function upgradeOwnershipProjection(receipt) {
|
|
1007
999
|
return {
|
|
1008
|
-
schema_version: receipt.schema_version,
|
|
1009
1000
|
product: {
|
|
1010
1001
|
name: receipt.product.name,
|
|
1011
1002
|
codex_compatibility: receipt.product.codex_compatibility,
|
|
@@ -1022,7 +1013,6 @@ function upgradeOwnershipProjection(receipt) {
|
|
|
1022
1013
|
|
|
1023
1014
|
function ownershipProjection(receipt) {
|
|
1024
1015
|
return {
|
|
1025
|
-
schema_version: receipt.schema_version,
|
|
1026
1016
|
product: receipt.product,
|
|
1027
1017
|
host: receipt.host,
|
|
1028
1018
|
registration: receipt.registration,
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@ description: "Explicit-only Dev Flow entry point for Codex. Use only when the cu
|
|
|
5
5
|
|
|
6
6
|
# Dev Flow
|
|
7
7
|
|
|
8
|
-
This Skill is the
|
|
8
|
+
This Skill is the current Core contract Codex adapter for the shared Dev Flow Core. Core owns task state,
|
|
9
9
|
current node, legal transitions, destinations, recovery, blockers, and terminal outcomes. The Skill
|
|
10
10
|
admits one explicit request, presents a complete Core Action, renders method work, and forwards one
|
|
11
11
|
closed result without keeping adapter state.
|
|
@@ -44,11 +44,10 @@ Only after admission passes, call `dev_flow_server_info({})`; it must be the fir
|
|
|
44
44
|
call. Require one complete structured result proving:
|
|
45
45
|
|
|
46
46
|
- product is exactly `dev-flow`, and Core version equals the packaged product version;
|
|
47
|
-
- `schema_version` is exactly `2` and `core_limits_version` is exactly `0.2`;
|
|
48
47
|
- transport is exactly `stdio`, health is exactly `ready`, and the supported host set contains
|
|
49
48
|
`codex`;
|
|
50
|
-
- `supported_processes` contains exactly one closed `standard-development
|
|
51
|
-
`process_id` is `standard-development
|
|
49
|
+
- `supported_processes` contains exactly one closed `standard-development` entry:
|
|
50
|
+
`process_id` is `standard-development` is `1`, `definition_digest` is present
|
|
52
51
|
and canonical, and `new_task_supported` is exactly `true`;
|
|
53
52
|
- `method_profiles` is exactly `plain`, `spec-kit`, `openspec` in that order;
|
|
54
53
|
- the tool catalog contains exactly these six raw names, in this order:
|
|
@@ -116,7 +115,7 @@ or resumes a task. Report an ownership or contract conflict unchanged in meaning
|
|
|
116
115
|
## Governed action loop
|
|
117
116
|
|
|
118
117
|
The inseparable Action fields are exactly `task_id`, `revision`, `action_id`, `action_kind`,
|
|
119
|
-
`process_id`, `
|
|
118
|
+
`process_id`, `process_definition_digest`, `current_node`, `node_purpose`,
|
|
120
119
|
`entry_conditions`, `completion_conditions`, `allowed_effects`, `required_evidence`,
|
|
121
120
|
`method_profile`, `method_steps`, `available_transitions`, `payload_contract`, `guidance`,
|
|
122
121
|
`repository_binding_digest`, and `issued_at`.
|
|
@@ -247,7 +246,6 @@ Map every mutation top-level field from the same fresh Action:
|
|
|
247
246
|
- `fresh_action.action_id` -> top-level `action_id`;
|
|
248
247
|
- `fresh_action.action_kind` -> top-level `action_kind`;
|
|
249
248
|
- `fresh_action.process_id` -> top-level `process_id`;
|
|
250
|
-
- `fresh_action.process_version` -> top-level `process_version`;
|
|
251
249
|
- `fresh_action.process_definition_digest` -> top-level `process_definition_digest`;
|
|
252
250
|
- `fresh_action.current_node` -> top-level `source_cursor`;
|
|
253
251
|
- `fresh_action.repository_binding_digest` -> top-level `repository_binding_digest`;
|
|
@@ -262,7 +260,6 @@ apply_arguments = {
|
|
|
262
260
|
"action_id": fresh_action.action_id,
|
|
263
261
|
"action_kind": fresh_action.action_kind,
|
|
264
262
|
"process_id": fresh_action.process_id,
|
|
265
|
-
"process_version": fresh_action.process_version,
|
|
266
263
|
"process_definition_digest": fresh_action.process_definition_digest,
|
|
267
264
|
"source_cursor": fresh_action.current_node,
|
|
268
265
|
"repository_binding_digest": fresh_action.repository_binding_digest,
|
|
@@ -312,7 +309,7 @@ transport-failed instead of returning one complete structured result. Do not imm
|
|
|
312
309
|
`dev_flow_apply_action` and do not infer the result from repository state or worktree contents.
|
|
313
310
|
|
|
314
311
|
Before calling `dev_flow_apply_action`, retain the original `request_id`, `task_id`, `process_id`,
|
|
315
|
-
`
|
|
312
|
+
`process_definition_digest`, `source_cursor`, `revision`, `action_id`,
|
|
316
313
|
`action_kind`, `repository_binding_digest`, and exact closed `payload` from the same fresh action and
|
|
317
314
|
the same apply dispatch. Never derive or reconstruct them from an incomplete response or partial
|
|
318
315
|
output.
|
|
@@ -324,7 +321,6 @@ When all required original identity values are retained, construct exactly this
|
|
|
324
321
|
{
|
|
325
322
|
"operation_id": "<original apply request_id>",
|
|
326
323
|
"process_id": "standard-development",
|
|
327
|
-
"process_version": 1,
|
|
328
324
|
"process_definition_digest": "<original process definition digest>",
|
|
329
325
|
"source_cursor": "<original source cursor>",
|
|
330
326
|
"expected_revision": 3,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Codex Method Profile Rendering Reference
|
|
2
2
|
|
|
3
|
-
This is the closed Codex Host-rendering reference for Core
|
|
3
|
+
This is the closed Codex Host-rendering reference for current Core contract semantic method steps. Read
|
|
4
4
|
it only after Core returns a complete current Action. It explains how Codex may perform the work; it
|
|
5
5
|
is not a process definition or a second task cursor.
|
|
6
6
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Core
|
|
1
|
+
# current Core contract Node Payload Construction
|
|
2
2
|
|
|
3
3
|
This reference helps the Codex Adapter construct the one closed payload branch returned by the
|
|
4
4
|
current Core Action. It is not a process definition, transition table, cursor, or authority. The
|
|
Binary file
|