@entrorove/skill 0.1.36 → 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CAPABILITY-MAP.md +11 -0
  2. package/CHANGELOG.md +10 -0
  3. package/IDE-EXECUTION.md +93 -0
  4. package/REUSE-DISCIPLINE.md +18 -0
  5. package/SKILL.md +22 -89
  6. package/cli.mjs +12 -8
  7. package/cloud-task-client.mjs +20 -7
  8. package/cloud-watch-client.mjs +4 -3
  9. package/ide-code-mode.mjs +38 -0
  10. package/ide-command.mjs +76 -0
  11. package/ide-hook.mjs +167 -0
  12. package/ide-install.mjs +59 -0
  13. package/ide-presentation.mjs +15 -7
  14. package/ide-results.mjs +59 -0
  15. package/ide-session.mjs +86 -0
  16. package/local-approved-plan.mjs +21 -6
  17. package/local-archguard-ast.mjs +6 -1
  18. package/local-archguard-language-ast.mjs +7 -0
  19. package/local-cli.mjs +6 -1
  20. package/local-contracts.mjs +4 -1
  21. package/local-discipline-actions.mjs +71 -0
  22. package/local-discipline-analysis.mjs +153 -0
  23. package/local-discipline-batch.mjs +32 -0
  24. package/local-discipline-contracts.d.mts +6 -0
  25. package/local-discipline-contracts.mjs +62 -0
  26. package/local-discipline-gate.mjs +85 -0
  27. package/local-discipline-native.mjs +33 -0
  28. package/local-discipline-operations.mjs +39 -0
  29. package/local-discipline-repository.mjs +87 -0
  30. package/local-discipline-snapshot.mjs +29 -0
  31. package/local-equivalence-runner.mjs +33 -0
  32. package/local-error.mjs +12 -0
  33. package/local-execution.mjs +1 -0
  34. package/local-git-executable.mjs +33 -0
  35. package/local-integrity.d.mts +5 -0
  36. package/local-integrity.mjs +4 -0
  37. package/local-merge-controller.mjs +1 -0
  38. package/local-merge-rollback.mjs +2 -1
  39. package/local-mutation-authority.mjs +16 -7
  40. package/local-mutation-batch.mjs +7 -3
  41. package/local-mutation-files.mjs +22 -0
  42. package/local-mutation-snapshot.mjs +6 -3
  43. package/local-mutation-wire.mjs +6 -1
  44. package/local-runner-discipline.mjs +23 -0
  45. package/local-scope-git-reads.mjs +3 -1
  46. package/local-scope-repository.mjs +19 -1
  47. package/local-task-handoff-write-receipts.mjs +11 -0
  48. package/manifest.json +1 -1
  49. package/native-client.mjs +1 -1
  50. package/native-notification.mjs +13 -6
  51. package/package.json +37 -4
  52. package/release-state.json +62 -31
  53. package/release.mjs +11 -1
  54. package/releases.json +12 -0
  55. package/remote-client.mjs +16 -1
  56. package/reuse-discipline-release.mjs +18 -0
  57. package/runtime/validator-runtime-v7.0.44.d.mts +3 -0
  58. package/runtime/validator-runtime-v7.0.44.mjs +1362 -0
  59. package/snapshot-cleanup-journal.mjs +32 -0
  60. package/snapshot-retention.mjs +95 -0
  61. package/task-entry-client.mjs +28 -0
  62. package/task-identity.d.mts +2 -0
  63. package/task-identity.mjs +9 -0
  64. package/validator-runtime-build.mjs +16 -0
@@ -5,10 +5,13 @@ import os from 'node:os';
5
5
  import { sha256 } from './local-integrity.mjs';
6
6
  import { readCredential } from './local-credential.mjs';
7
7
  import { withStateLock } from './local-state-lock.mjs';
8
+ import { sandboxTaskNumber } from './task-identity.mjs';
8
9
 
9
10
  const messageKinds = { confirmed: '任务需要你确认。', failed: '任务执行失败,请查看 IDE 中的状态。',
10
11
  blocked: '任务已阻断,请查看 IDE 中的所需操作。',
11
- reported: '任务输出已生成,请查看 IDE 中的结果。', verified: '任务验证已完成。', test: 'Entrorove 系统通知测试。' };
12
+ reported: '任务输出已生成,请查看 IDE 中的结果。', verified: '任务验证已完成。',
13
+ entered: '沙箱已进入。', balance: '模型余额不足。', test: 'Entrorove 系统通知测试。' };
14
+ const shortStates = { entered:'已进入',reported:'待验收',verified:'已完成',confirmed:'待确认',failed:'执行失败',blocked:'已阻断',balance:'余额不足' };
12
15
  function controls(home) { return path.join(home, '.entrorove', 'notifications.json'); }
13
16
  async function readControls(home) {
14
17
  const file = controls(home);
@@ -42,8 +45,9 @@ export async function configureNativeNotifications(input, home = os.homedir()) {
42
45
  await withStateLock(controls(home), () => saveControls(home, state));
43
46
  return notificationSettings(home);
44
47
  }
45
- export async function sendNativeNotification(kind, { platform = process.platform, execute = execFile } = {}) {
46
- const message = messageKinds[kind];
48
+ export async function sendNativeNotification(kind, { platform = process.platform, execute = execFile, taskNumber } = {}) {
49
+ const message = /^\d{5}$/u.test(taskNumber ?? '') && shortStates[kind]
50
+ ? `沙箱 ${taskNumber} · ${shortStates[kind]}` : messageKinds[kind];
47
51
  if (!message) throw new Error('Invalid notification kind');
48
52
  let file, args;
49
53
  if (platform === 'darwin') {
@@ -58,7 +62,9 @@ export async function sendNativeNotification(kind, { platform = process.platform
58
62
  return { submitted: true, displayVerified: false };
59
63
  }
60
64
  export async function notifyIdeEvent(event, { home = os.homedir(), send = sendNativeNotification } = {}) {
61
- const kind = event.requiresConfirmation && event.kind !== 'notice' ? 'confirmed'
65
+ const kind = event.taskId && event.phase === 'accepted' ? 'entered'
66
+ : event.errorCode === 'model-balance-insufficient' ? 'balance'
67
+ : event.requiresConfirmation && event.kind !== 'notice' ? 'confirmed'
62
68
  : event.kind === 'evaluation' ? event.disposition === 'bad' ? 'failed' : null
63
69
  : event.state === 'blocked' ? event.requiresConfirmation ? 'confirmed' : 'blocked'
64
70
  : event.phase === 'workflow' && ['reported', 'verified', 'failed'].includes(event.state) ? event.state : null;
@@ -68,9 +74,10 @@ export async function notifyIdeEvent(event, { home = os.homedir(), send = sendNa
68
74
  return withStateLock(controls(home), async () => {
69
75
  const state = await readControls(home);
70
76
  if (!state?.enabled || state.accountBinding !== sha256(await readCredential(home))) return { submitted: false };
71
- const key = sha256(`${id}:${kind}`);
77
+ const key = sha256(`${id}:${event.taskId ? kind === 'entered' ? 'start' : 'end' : kind}`);
72
78
  if (state.seen.includes(key)) return { submitted: false, duplicate: true };
79
+ const result = await send(kind,event.taskId ? { taskNumber:sandboxTaskNumber(event.taskId) } : {});
73
80
  state.seen = [...state.seen.slice(-99), key]; await saveControls(home, state);
74
- return send(kind);
81
+ return result;
75
82
  });
76
83
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@entrorove/skill",
3
- "version": "0.1.36",
3
+ "version": "0.1.38",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "entrorove": "cli.mjs"
@@ -43,6 +43,7 @@
43
43
  "local-mutation-batch.mjs",
44
44
  "local-mutation-batch-receipt.mjs",
45
45
  "local-integrity.mjs",
46
+ "local-integrity.d.mts",
46
47
  "local-evidence-verification.mjs",
47
48
  "local-error.mjs",
48
49
  "local-formula.mjs",
@@ -79,6 +80,9 @@
79
80
  "remote-client.mjs",
80
81
  "scope-runner-client.mjs",
81
82
  "cloud-task-client.mjs",
83
+ "task-entry-client.mjs",
84
+ "task-identity.mjs",
85
+ "task-identity.d.mts",
82
86
  "cloud-watch-client.mjs",
83
87
  "cloud-event-stream.mjs",
84
88
  "ide-presentation.mjs",
@@ -134,6 +138,7 @@
134
138
  "local-scope-workspaces.mjs",
135
139
  "local-scope-git.mjs",
136
140
  "local-scope-git-reads.mjs",
141
+ "local-git-executable.mjs",
137
142
  "local-scope-git-comparison.mjs",
138
143
  "local-scope-git-attributes.mjs",
139
144
  "local-scope-git-history.mjs",
@@ -192,16 +197,44 @@
192
197
  "local-final-gate16-contract.mjs",
193
198
  "local-final-gate16-release.mjs",
194
199
  "native-client.mjs",
195
- "native-notification.mjs"
200
+ "native-notification.mjs",
201
+ "ide-code-mode.mjs",
202
+ "ide-command.mjs",
203
+ "ide-hook.mjs",
204
+ "ide-install.mjs",
205
+ "ide-session.mjs",
206
+ "ide-results.mjs",
207
+ "local-discipline-actions.mjs",
208
+ "local-discipline-analysis.mjs",
209
+ "local-discipline-batch.mjs",
210
+ "local-discipline-contracts.mjs",
211
+ "local-discipline-gate.mjs",
212
+ "local-discipline-native.mjs",
213
+ "local-discipline-operations.mjs",
214
+ "local-discipline-repository.mjs",
215
+ "local-discipline-snapshot.mjs",
216
+ "local-equivalence-runner.mjs",
217
+ "local-runner-discipline.mjs",
218
+ "snapshot-retention.mjs",
219
+ "snapshot-cleanup-journal.mjs",
220
+ "validator-runtime-build.mjs",
221
+ "local-discipline-contracts.d.mts",
222
+ "runtime/validator-runtime-v7.0.44.mjs",
223
+ "runtime/validator-runtime-v7.0.44.d.mts",
224
+ "IDE-EXECUTION.md",
225
+ "REUSE-DISCIPLINE.md",
226
+ "reuse-discipline-release.mjs"
196
227
  ],
197
228
  "scripts": {
198
229
  "test": "node --test --test-concurrency=1 test/*.test.mjs",
199
230
  "prepublishOnly": "node release.mjs",
200
231
  "prepare:archguard": "node archguard-runtime-build.mjs",
201
232
  "check:archguard": "node archguard-runtime-build.mjs --check",
202
- "prepack": "node archguard-runtime-build.mjs && node calctool-runtime-build.mjs",
233
+ "prepack": "node archguard-runtime-build.mjs && node calctool-runtime-build.mjs && node validator-runtime-build.mjs",
203
234
  "prepare:calctool": "node calctool-runtime-build.mjs",
204
- "check:calctool": "node calctool-runtime-build.mjs --check"
235
+ "check:calctool": "node calctool-runtime-build.mjs --check",
236
+ "prepare:validator": "node validator-runtime-build.mjs",
237
+ "check:validator": "node validator-runtime-build.mjs --check"
205
238
  },
206
239
  "engines": {
207
240
  "node": ">=20"
@@ -1,8 +1,35 @@
1
1
  {
2
2
  "schemaVersion": "entrorove.release-state/1.0",
3
- "version": "0.1.36",
4
- "digest": "31125fc03752d64a87f994186ebf770a40966984d65a99358239ef71ab926723",
3
+ "version": "0.1.38",
4
+ "digest": "ccce063efbb70446cec357e3377a4947e9c9d2068c443cc33fba9050d074a1ba",
5
5
  "files": {
6
+ "ide-code-mode.mjs": "cd5318342aac23ba9719ad760b7d7b8018d31839df1bed4ed7142c2782e22def",
7
+ "ide-command.mjs": "06af72622b65dcc750da59e532399d7c711d95fc39f3d4282c68440e2edd35fd",
8
+ "ide-hook.mjs": "fbee62c9b1130674cfe19c65b2adeac664a702a0d3233b943157fd78f04d446b",
9
+ "ide-install.mjs": "13e202ba87feed2fe92b237519118381125abfacc62ad9f9e048bae3bd4c6ea0",
10
+ "ide-session.mjs": "bbe68b077e8854af36e4514ec6747bdeff8a10513d5169e6fa111ce8f95bcb88",
11
+ "ide-results.mjs": "8677b062bfe44b1683ae2508ad1048b93030a0840e8ccc1fa1c5e587ab43c7a3",
12
+ "local-discipline-actions.mjs": "2379c08d0f49c44068f8239db7e514d75885f4606b1b88a7a36e4ff19167caca",
13
+ "local-discipline-analysis.mjs": "ebea932438a53a157d5d07a5d68366496eee121a2c67cecfb4fdb2d5aa9763eb",
14
+ "local-discipline-batch.mjs": "2cc90dbae55efdee0c445da399c0a9acafa92e915344c25208ebca554fc4c9e9",
15
+ "local-discipline-contracts.mjs": "6cf8a3d132fdb9074eb1441600afe7aa199df33e88a71a660d9db534c14f19e4",
16
+ "local-discipline-contracts.d.mts": "defc684c78dc88afa1c54340ab4a01ae36db7aa11257cbe1f5cd323f608c78c4",
17
+ "local-discipline-gate.mjs": "04b1ba092d7f4342a0e77cfbeb44d9634dbce9fec0c79e6a1e4b11a662d904ac",
18
+ "local-discipline-native.mjs": "8b99b5ce951cab3c1426428ad807650c61c0ffb2c346d747b73b99057b382049",
19
+ "local-discipline-operations.mjs": "9fcb7b8889b7718d42e1d37936485d8198d5017d405e0cdbbabdbbd12fcc9d48",
20
+ "local-discipline-repository.mjs": "a5f894ec7551ff084fd477eaabff3391fbd7d295df54889649d540f4d64f9a47",
21
+ "local-discipline-snapshot.mjs": "8fd35b2cfbece8f64579f144f589a66dec9b6022d50fe931c4c1f886cb83134d",
22
+ "local-runner-discipline.mjs": "44694f4444e039d5440805eb051bb4b2b8e2c2412f9e66c2f35f965a16206c3c",
23
+ "local-integrity.d.mts": "21357f306234bd841c0d3d90bf2d09f7663f63746f897b9f38190428ae8198b3",
24
+ "local-equivalence-runner.mjs": "df2f406c693c4da7bb30542ec7b4d46a9336f56e9fdd263196c0f3a73d2f6e91",
25
+ "validator-runtime-build.mjs": "da20bd19eb088d79d62e33969b4c075dc2199761b395e40060227f8f86b9519a",
26
+ "runtime/validator-runtime-v7.0.44.mjs": "a3bf9aa24146e48ad5702dd498de9bd1ff270fc4263026abf0bf2a4ec20f5321",
27
+ "runtime/validator-runtime-v7.0.44.d.mts": "7797edbfe2f7de24da370204dce4dfd22822a1bd80df93514fff900b98afe36f",
28
+ "snapshot-retention.mjs": "4f8919fe8ec49fb4c23e080a8ad2fa3a9282bca3fffe7cf55c64e89ef316697e",
29
+ "snapshot-cleanup-journal.mjs": "76a9684cc95b4eb076e1298d78a9dff37948b00d9607b8f546c599072d3ed331",
30
+ "IDE-EXECUTION.md": "4a84684547d79a537fee14fafab4bd71aa7cdabf6b1e0a5ebdd78c500e98e783",
31
+ "REUSE-DISCIPLINE.md": "295ecd41c931b00c21d009ab65ac160f0e2ab81b4000ed498d2e8e97c2dc6c63",
32
+ "reuse-discipline-release.mjs": "bfe852da7f47bdbcf93afc809278fb27ec495a704995f61f64463e18bcf4d6b9",
6
33
  "local-final-gate16.mjs": "b30caab08441449ad556a6e9a3cefbf91190f0b3f7370f46d2a21156375aa8e3",
7
34
  "local-final-gate16-checks.mjs": "1dd30e9666d458d8b12ca6e4975f6f0ac8450c3ea9cbecc7401ae037f66b589a",
8
35
  "local-final-gate16-worker.mjs": "344d64b6c1c5552b96960e0d8514a876a3dbfa9762ab9eb749038e8351727121",
@@ -18,11 +45,11 @@
18
45
  "local-merge-artifacts.mjs": "36328391a4b8cc1cebfc43ac74b208da10edc9098a3b86dfa13583c928353b05",
19
46
  "local-merge-authority.mjs": "d07eb700392ca7797abd82ea3e05dada6f9ba5752bafabfcf0c11db6cff91f72",
20
47
  "local-merge-contracts.mjs": "8d9163643acdec63483c7f1521eda8977b85c362c4f6f7c151c15e1f29089469",
21
- "local-merge-controller.mjs": "4288dd772cb0a39c49305256d62854f1413a4b509716dbd6dc569d2b638d203a",
48
+ "local-merge-controller.mjs": "7dd36442e1fa75a9a6b2ce05b18eaefed330dc06370b3c3716958487b154926a",
22
49
  "local-merge-head.mjs": "a69366ddccbf0cc01da7c4b28596b11c933853006b52aad426f964538ddfbcd2",
23
50
  "local-merge-journal.mjs": "c8a169bb6386a7d91078b46629087144f7cb1577b91c6d064cf3365361916338",
24
51
  "local-merge-mutation.mjs": "40db09efba81f31b7f2d5721f5e75e73946fdb433c928d979ca5f6282b49af8c",
25
- "local-merge-rollback.mjs": "69f7bc850761ad7e20b72972eebd771ae0be2ed4150eb19eb182c2467bf7a798",
52
+ "local-merge-rollback.mjs": "f67eda76e1cffff40bd7dfd5f33308f68ba07dd577c3c8693c8ab32d788458f7",
26
53
  "local-merge-snapshot-rollback.mjs": "131bbe28302590b5fa13b421a41189544a0b8aa201b6ba800d3979a55a6bfc81",
27
54
  "local-merge-storage.mjs": "a64381eb111c3d553e22396186c3556d7b7a42298bf32d3e5f5d9008750d1f2b",
28
55
  "local-merge-targets.mjs": "4833a8159697e92db781f9920c64da4b0ab6c467ed9f8a2ba39869f01d6c4412",
@@ -44,23 +71,23 @@
44
71
  "local-autocoord17-waits.mjs": "2b0a713987822548a94e1ed3a9a891532db45383797dfc5d5bc8d1e35593cf25",
45
72
  "local-validator-isolation17.mjs": "48e94604e28b8fddd567dfb35ff60b73fd094a5803bd49f076388b7f310f92aa",
46
73
  "local-calctool-composition17.mjs": "ac89fcb41ab0d0d9b47c1b5696945281b0894eb064820775e36a011c76314e6a",
47
- "cli.mjs": "f0a3104ef9f4431ded2a7049c08ae6435b09ed53c4cba486c2bd52db2728d999",
74
+ "cli.mjs": "891ad9947fe5b9a83a236feead03f4ce94e3c0245428fd048a96de9e0e6251af",
48
75
  "review-client.mjs": "3491eef68ed533174b31db3c53febb6519b8f088f71a9964644714a9a4c03c77",
49
76
  "version.mjs": "1f392147d72c40af4b03b307ea607075fb815af5174fa07e254b95fe12dbf3e7",
50
- "SKILL.md": "f06fd87e2008e5951c778c2e206cb42eed668d21d5c0f2a12108a0a031fde9ad",
51
- "CAPABILITY-MAP.md": "40755edd3c698bbbbd4f49bc47a21c5ad9bbb8eb05e9542dd7d3a11a0254ea35",
77
+ "SKILL.md": "0ee5ae2b409a895bd66966812d60c97898ed0294b12d389ed737c271233a2bc4",
78
+ "CAPABILITY-MAP.md": "93d3a45034d3cb2de804b4696a0ef3977a46f7d438adcef19ac443e90db48f44",
52
79
  "AGREEMENT.md": "f93a68e92c457200dd024610e65f74e478b8f60860f951da818b70561f1b9bf8",
53
- "package.json": "9a7f12414556bcc150d57e64881694aeddfe0b760e98454491ac5a6585ed0421",
80
+ "package.json": "cd314c3ac62c1a4f63511c4e9cc49e9c9aee8e2d012c2a2f04a2ff541f43f40e",
54
81
  "manifest.json": "ab06e307795bc9da5add926752b6c4dbdaf18625090261a035aa356a679c504f",
55
- "release.mjs": "eca6032eae240fb90c7646e0b1509ea6b4c94c23b90aca87e4091996c5b9b5f8",
56
- "local-cli.mjs": "9eca8aefcb086cdce792105f9558cc26e34a0c88befaf0a56f4c7bdbd35f0a05",
82
+ "release.mjs": "203e367ed6d7a406937c358c87f5e5c43d2055ceedda4ca882711121a53c28ec",
83
+ "local-cli.mjs": "ee6319e2027689e0a4f511c8790fa6e606e520e2f3f30be5031a2e055231de4b",
57
84
  "local-state-lock.mjs": "1dbf64264642a0851faf043e07ee9f66d2ad0508e9f799b0626246e42fae893e",
58
- "local-execution.mjs": "cdada6df6dc8831cebb58a629b56c4b3f8e1bf9aae4e3fdc121521ba20839383",
59
- "local-integrity.mjs": "4f325376e536999c3b00245f66aac9ef1ae762c33012b363c231622008f72805",
85
+ "local-execution.mjs": "3d7db6576d902e2a5dea2045c7b78c5453f698a49f4264aacb3db8e38461d5ba",
86
+ "local-integrity.mjs": "e6d6eace80c610f3c7299d4f8644b0dc023aa9e3d8d64b26535ea7fbced248f1",
60
87
  "local-evidence-verification.mjs": "9b7dea31777505272f63616fd62af7603338f703bb1285fc565d6451715c7ce0",
61
88
  "local-formula.mjs": "706d5ec0cb2caf95a547531a81ca746fe246d4c53d902e03595a3b360e8c85af",
62
89
  "local-ledger.mjs": "2009fb68aadcd7292b72f1d0d99f378d03644be1c5b4b4150d9f6a0b3f7c15ce",
63
- "local-error.mjs": "9dc42763ca7013cde607543308e029796d68f3b020a5a3b4ad9e68815e38d0f5",
90
+ "local-error.mjs": "12a4aa19fe5d57218d78c8fecb0685dd02f99155999cbbfba8da8950047638f9",
64
91
  "blueprint-criterion-wire.mjs": "fb6b7dcce0b97a699e3e8968372767a3fddd83fedc750998573f789177243072",
65
92
  "blueprint-criterion-runner.mjs": "761c0e670b4b20c6bed53e5ca5d0178759505c3977ea2ed1b7223383c534bc4c",
66
93
  "local-chain-bindings.mjs": "b8eff999ccd17b53c614a3c9f5376da78fcaa8632bb3e07bc1adcceda2e75f6c",
@@ -73,7 +100,7 @@
73
100
  "local-chain-plan.mjs": "e45a9170f569c80f7e5532bbc109dbae3c24b696815316e503cb3779135be648",
74
101
  "local-chain-release-labels.mjs": "7ce5350d1062d5236f57f10e7e81713c1101463d5e7f252604ef0c2a30840bfe",
75
102
  "local-chain-results.mjs": "0455f72cad574cfef87c2c6c0928d6432bba7e5dbaff521a2b62a9575299ca10",
76
- "local-approved-plan.mjs": "bb31bf0f826ce22d1e57c6d9cda5314cbbb1fc04e6c0778eb319045ab23a3193",
103
+ "local-approved-plan.mjs": "825059864d4ca1e5a85d1a715ad68c3923350e1be233d4f3bb09d6f31b0143af",
77
104
  "local-budget-renewal.mjs": "6b436358066fe33b2f6d871fc90d8e7c551edd6255efd73c0d255d0fd35d5ef8",
78
105
  "local-probe.mjs": "9b948db1de1e34c7605c4c454cd4aced66d2b57d2cf4471adbb80bcc76dee635",
79
106
  "local-budget-grants.mjs": "c5f6542f5d2c3bfe07f3ca5b5bc849bf05d886b06014f720322d530510775d3d",
@@ -89,9 +116,10 @@
89
116
  "local-scope-candidate.mjs": "8f0bd9606e70d4a0ebacdd3cd600ec3afed85e2bb3e1760aa1144cf55d4e028a",
90
117
  "local-scope-context.mjs": "79753abfc6c76089d17f003a1be537dfaea10d6731c542f7fc53f2a9996ed164",
91
118
  "local-scope-files.mjs": "0671ac4baef610a55ea6c1db6ebca7a4b6cfda45edb8aeaa828019e2a26f5a76",
92
- "local-scope-repository.mjs": "af7fe24408509dcebe39bdfc6fcef6adcf66f6ad09473149f920d5e921a48d1a",
119
+ "local-scope-repository.mjs": "957fa72afacc148d0251a3081c387467922e63b9e939f40751d63eb6b09b427c",
93
120
  "local-scope-git.mjs": "53bbbb6c4795db711b5bc164591a6ad79a561427da046d6bbe997dae6eb82829",
94
- "local-scope-git-reads.mjs": "d18d4441664aa59ad8360ee16a69fc0282e7530705d5ae7950944a8158448bb4",
121
+ "local-scope-git-reads.mjs": "5d8a2636bab955cb325cb693db7423e69512355887ae5b5af3b8cb615f5ddad0",
122
+ "local-git-executable.mjs": "9391d716529025b1de3ee006df658a9d765b6ef29ad24ef9b7436829318e651e",
95
123
  "local-scope-git-comparison.mjs": "d86e559843087ae851795c9fb16b844dc46cc461fb5da37dbca0f6ba0d06450b",
96
124
  "local-scope-git-attributes.mjs": "63c37db40a6789a5dd98ca431b24d9d118ba3d808b330785b88c7f9037e40518",
97
125
  "local-scope-git-history.mjs": "47d2ee6baa0b1d3d5f0b7a1d5bb9e23c1fbd6cf2884328458448f45da5013483",
@@ -118,16 +146,19 @@
118
146
  "local-scope-state.mjs": "8b600a91fc0068d7a8c0bb752ddba7ed30ada93daafb118d6cba2368fd94cb27",
119
147
  "local-scope-workspaces.mjs": "a44c34537e5ed2dcaf193a985e5bc05957989fbb160a650f9e37ba7d66eb2de8",
120
148
  "local-task-routing.mjs": "e26d6f1ba134ffe1da2a49b4fb6bb6dfa5617671f774a08e719d04f202cf5eca",
121
- "remote-client.mjs": "886ca19718b1d23209807ee3ce7d336053a17c0ad2190bb71f4c96371694dff4",
122
- "cloud-task-client.mjs": "ecb6124ea5e6249f31fb95cb68d13d821d2daea8768fe47ddf6dcf82fc3392cc",
149
+ "remote-client.mjs": "1d99cf5bfdcad0203e2550a4c1deb6c2811b5a42d702ff9b73bf7b0ded6f72d1",
150
+ "cloud-task-client.mjs": "11acb1a033c94cdfbdfb177a3402ad97f6a5226f577138c8cf6395dc3ebb1a39",
123
151
  "scope-runner-client.mjs": "646ab4f80d4a8209e922fd45f40efd968f0744d9dfc03188b222c1a2e11e83b8",
124
- "native-client.mjs": "ea4d9c687b62858dc4e8fb6bceca59bb049cba0c2762380be460821393e025db",
125
- "native-notification.mjs": "f116772178140d1a2a7aac4a8e361a76543b1f47c84b3823a26a797f11a8bfbb",
152
+ "native-client.mjs": "6f5575909bae9daba643287f876ffa0f9ff1c53a367b32a40145d740456d6605",
153
+ "native-notification.mjs": "8859a26c6f13d222711f763acf49ed8546b3306cf71f990643ac31a5ccaf1ba1",
126
154
  "local-peer-status.mjs": "a971bcc69d60bb32b875ca5bb4297d948631d5d2821b812c279613ea059a8b4f",
127
- "cloud-watch-client.mjs": "f9629e67d1f14f50e9fb52f65001059e07999352fb224b7c7e28590b95609a8a",
155
+ "cloud-watch-client.mjs": "5b93935c19a104d72afed07d4a56746c9617707e075884b93d22050c95cee0c1",
128
156
  "cloud-event-stream.mjs": "e0eec9fc3e0613094523929634f25030df5ca5c5b5fe2c1e1a4586ab10574808",
129
- "ide-presentation.mjs": "d8f54505cf559af98cd1a93a739817c13df3e1e68d2dff9fde90554ea14cb10c",
157
+ "ide-presentation.mjs": "3bac21bfc824fcdad63aafb0d7c3326cd6456923f4224106dd5c38682060f315",
130
158
  "automatic-feedback-client.mjs": "75e92f50d6fbfa4f482af36e16c9ce5dd323a02e99eb9b434dcfa3faa846a532",
159
+ "task-entry-client.mjs": "1ebbbfd26c978e7cb291ab4930974bb86d1fb56f1a702808b8dc348e2cdf69f1",
160
+ "task-identity.mjs": "e0e6cf1f48bfa5ee3c5cb86a3c21adfce6d66b4220f4a164ca099263c7a09fb4",
161
+ "task-identity.d.mts": "55472e1ffc81b9d5e5c5bd56c0bf1d18ecde03ee5170a58a15ce9caf222d8761",
131
162
  "remote-transport.mjs": "93caaca646fca298a4e08142678b134ecc3a657e00de5b9939e2364b2db9d6c4",
132
163
  "local-credential.mjs": "2a302a7f67b5ea8dc73453fc96ab33db349b59ca11fa9456e48ca1d9669d877c",
133
164
  "local-invocations.mjs": "f6ac4c41c1a5ec34de358c4cca210ca8e403b3a913150a43bb55ec9be55d9998",
@@ -141,22 +172,22 @@
141
172
  "local-task-handoff-write-wire.mjs": "7b49b66de8ecc33c1c92e9dd50118528972f00e1c7748cb3a230a58eefa9ff3f",
142
173
  "local-task-handoff-read-authority.mjs": "7d2991cfac4562039232566d25441aa98106ce27bc9b7bcf6df4ff28d738e167",
143
174
  "local-task-handoff-write-archive.mjs": "3668f39d8ab5664ed717994cf1b4bcc7ea23e146a0e06291f851d30337faeb77",
144
- "local-task-handoff-write-receipts.mjs": "e163b810725201fd08cc56022b1eb1442621643319d82bf917cf0cacfe1aef5b",
175
+ "local-task-handoff-write-receipts.mjs": "e1321127bd6fcad7840e185639f81ae68a8722a0ee4264a7b504a02b27887647",
145
176
  "workflow-local-runner.mjs": "9fa899a11da2b6b7a436bf9b561641856adcbc5f8b914f6ba89a64dae224900d",
146
177
  "workflow-local-contracts.mjs": "604afa9e97c6dfc3d07b01509ef2476887a2fc219c9e827bcac5d563ab4719e7",
147
178
  "workflow-local-client.mjs": "45c954f694d96bf0ea87ee2dc6902a6763dac2cb1df713b6a5e749632054e9af",
148
179
  "workflow-local-request.mjs": "4e24c543ce386292a87dc9cd41f90d23375f12079cacffc515c8cd01fd571780",
149
180
  "task-message-entry.mjs": "31d10056cb905237cd5649e8eb067009ff1612ec5dc1061e0373209fbc0b646a",
150
181
  "task-message-cli.mjs": "3ca65e96c28129b3bd5cac962d106e0859a1f17df1f6a66ee543c6efc22f918d",
151
- "local-contracts.mjs": "e6c6b9b8b8b89e991c5689d935e26ccd92d398405ebced298817d673095bca1e",
182
+ "local-contracts.mjs": "f7c5eff49b6efa05857f6be8e37579b91a00d5ab79f8b8f5cceea5e935ddd2cf",
152
183
  "local-contract-types.mjs": "85e71fa4dd67e351a4b67573c740bcdb1661cede53f097189f11837771e75e91",
153
- "local-archguard-ast.mjs": "cefd835312a623e83bf48e4d8e1f76ac6a8adc56c35843705c16967d16bec4e6",
184
+ "local-archguard-ast.mjs": "7ff7df9dab0d98ed62983add751c80edea598bc94ef4f38ede0ebd4d41226c87",
154
185
  "local-archguard-checkpoint.mjs": "37896902520cc995720c96288e4a5ed3585952b55c9c35be281f91fa754c71ec",
155
186
  "local-archguard-components.mjs": "a8fb3d0fd787f9160905013fd333cc0b9e8cf624cce797461f36f4ab31d170ad",
156
187
  "local-archguard-contract.mjs": "cfc397a1ce171ab84f8bf1db152e6d8d280b7ca041da56a7a4cd62b02c2e2e89",
157
188
  "local-archguard-contracts.mjs": "29e9b86f14dc086aa0b791c874d6efc50d849f806b3f2b8725481114f01ba8ba",
158
189
  "local-archguard-evaluate.mjs": "c34f0956e7a4f1afaa1554c03e238a350dc8a981dc595cf4ed065fb14f733f93",
159
- "local-archguard-language-ast.mjs": "40cb81b524b8b95c71eb03c0e7bfe35b21c4d91ab9f9296a40dd9d9a5ba134b7",
190
+ "local-archguard-language-ast.mjs": "610e2b22c0497de3fa942c8d6071e2c60be30630cecae9cfd9c3b7ba9f5a448c",
160
191
  "local-archguard-mutation-fence.mjs": "bd81ecec581ce1b9cda7595332fc781434ea083b6ccd4f7138b4d099e24426bf",
161
192
  "local-archguard-operations.mjs": "1a35268b857b86eab54dd4efa78fc54bf08b39dfab4fa980c7dd63b8959206b0",
162
193
  "local-archguard-scope.mjs": "afbd23a79c175f198892ddb2026ecac219a1650ee6115763736d9b1ee5a07ee0",
@@ -175,14 +206,14 @@
175
206
  "local-calctool-contracts.mjs": "d8fccf662b2dd7aefd5cc6770b2473014af7a28855074fcf294937ca5a49eae8",
176
207
  "local-calctool-runtime.mjs": "9070b6900d1782bf77357fea1cc522bf796898d56929f96d7cb935b3036ac82f",
177
208
  "local-calctool-storage.mjs": "4c3f352847aeb368dea1247759a1055beeab25534adf25b6e7323196d76fd684",
178
- "local-mutation-files.mjs": "b99a1987e0884cee1f0f04552300fbf61853ea2547d74c77b77c71fc3ebb89ad",
179
- "local-mutation-snapshot.mjs": "a2f5f1df1fa0ecb40bdd4776e319c5244508ed04a2aa4493aebcec926fc61148",
209
+ "local-mutation-files.mjs": "087b00e8424a135e783eb432271012a71e55eeb4a5e30119490d1bc0b2160320",
210
+ "local-mutation-snapshot.mjs": "f9077539680fb8d3ff33a962657756a8fe6afa8409b6191334509534216ebfe8",
180
211
  "local-mutation-audit.mjs": "5a30ee3446f632e032ffcfe46bcd97d6dfc0f099a76ea5185c3f9a9118c4f6cb",
181
- "local-mutation-wire.mjs": "dc79992422254d876bec94c621407bede94c9f43c95367a2c9f16a2a64b15576",
212
+ "local-mutation-wire.mjs": "465463712f638f40c87fd885932f6a9a8c1db64489bb7ca6614fb643d7a36624",
182
213
  "local-mutation-binding.mjs": "a1756642dd758701b476d332a48799b4af56fdd8f67aba6d46ca9bb2341b6327",
183
214
  "local-mutation-pass-store.mjs": "8d6b57c6d1ea3df15a794e6a4cd39497f4412a5f911b9a30b0437498f51f92c0",
184
- "local-mutation-authority.mjs": "28561b5b672838a46fa13b0044b5d9302630d073aa5893a7e0990e6567336499",
185
- "local-mutation-batch.mjs": "80293d8111203687e2527cd23b771447cc44ff58c0b0155c368bcbfa05aa3bb8",
215
+ "local-mutation-authority.mjs": "1af7e04f545bb82df4ee91c256009d5f8d5ee71aab5a734c80d911dce6a646bb",
216
+ "local-mutation-batch.mjs": "a4e9d879172e0acf79a194707ae152b4428d6fc67a837171ff115dbc00e4d6e4",
186
217
  "local-mutation-batch-receipt.mjs": "b0e6a8522867255d899e60b66677885933f6a1c4c771cbb52f84dbbbdcf5e5c2",
187
218
  "calctool-runtime-entry.mjs": "98d2bc8df38d16131fc56db0a3d4d260531ba4df412baa5ddc4b8b5c5ca99fe9",
188
219
  "calctool-runtime-build.mjs": "3c5a9bd40bc1abe02e3b6e307809eea4eaaf198e8f0db6f5d6b2583dd68a59d2",
package/release.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import { FINAL_GATE16_PACKAGE_FILES, withFinalGate16ReleaseLabels } from './local-final-gate16-release.mjs'
2
+ import { REUSE_DISCIPLINE_SOURCE_FILES, reuseDisciplineReleaseLabels } from './reuse-discipline-release.mjs'
2
3
  import { createHash } from 'node:crypto'
3
4
  import { readFile, writeFile, rename, rm } from 'node:fs/promises'
4
5
  import path from 'node:path'
@@ -28,6 +29,7 @@ const coordination17SourceFiles = Object.freeze([
28
29
  'local-calctool-composition17.mjs',
29
30
  ])
30
31
  const sourceFiles = [
32
+ ...REUSE_DISCIPLINE_SOURCE_FILES,
31
33
  ...FINAL_GATE16_PACKAGE_FILES,
32
34
  'local-merge-archguard-verification.d.mts',
33
35
  'local-merge-archguard-verification.mjs',
@@ -65,6 +67,7 @@ const sourceFiles = [
65
67
  'local-scope-repository.mjs',
66
68
  'local-scope-git.mjs',
67
69
  'local-scope-git-reads.mjs',
70
+ 'local-git-executable.mjs',
68
71
  'local-scope-git-comparison.mjs',
69
72
  'local-scope-git-attributes.mjs',
70
73
  'local-scope-git-history.mjs',
@@ -94,6 +97,7 @@ const sourceFiles = [
94
97
  'scope-runner-client.mjs',
95
98
  'native-client.mjs', 'native-notification.mjs', 'local-peer-status.mjs',
96
99
  'cloud-watch-client.mjs', 'cloud-event-stream.mjs', 'ide-presentation.mjs', 'automatic-feedback-client.mjs',
100
+ 'task-entry-client.mjs', 'task-identity.mjs', 'task-identity.d.mts',
97
101
  'remote-transport.mjs', 'local-credential.mjs', 'local-invocations.mjs',
98
102
  'local-task-handoff-fence.mjs',
99
103
  'local-task-handoff-storage.mjs', 'local-task-handoff-overlay-wire.mjs', 'local-task-handoff-completion-wire.mjs',
@@ -251,6 +255,12 @@ const invocationReleaseLabels = {
251
255
  'local-credential.mjs': { zh: '唯一私有凭据与原子轮换', en: 'Single private credential and atomic rotation' },
252
256
  'local-invocations.mjs': { zh: '无明文调用台账与用量对账', en: 'Metadata invocation ledger and usage reconciliation' },
253
257
  }
258
+ const taskEntryReleaseLabels = {
259
+ 'task-entry-client.mjs': { zh: '账号沙箱偏好与任务入口确认', en: 'account sandbox preferences and task entry confirmation' },
260
+ 'task-identity.mjs': { zh: 'IDE与网页统一任务编号', en: 'shared IDE and website task numbers' },
261
+ 'task-identity.d.mts': { zh: '任务编号接口', en: 'task number interface' },
262
+ 'local-git-executable.mjs': { zh: 'Windows Git范围检查兼容', en: 'Windows Git scope inspection compatibility' },
263
+ }
254
264
 
255
265
  function releaseNote(changed) {
256
266
  const suppliedZh = process.env.ENTROROVE_RELEASE_NOTE_ZH?.trim()
@@ -269,7 +279,7 @@ function releaseNote(changed) {
269
279
  return { zh: `更新了${distinct.map(label => label.zh).join('、')}。`, en: `Updated ${distinct.map(label => label.en).join(', ')}.` }
270
280
  }
271
281
  function releaseLabels() {
272
- return withFinalGate16ReleaseLabels({ ...calctoolReleaseLabels, ...mutationReleaseLabels, ...swarmReleaseLabels, ...coordination17ReleaseLabels, ...nativeReadReleaseLabels, ...feedbackReleaseLabels, ...invocationReleaseLabels, ...chainReleaseLabels,
282
+ return withFinalGate16ReleaseLabels({ ...reuseDisciplineReleaseLabels, ...calctoolReleaseLabels, ...mutationReleaseLabels, ...swarmReleaseLabels, ...coordination17ReleaseLabels, ...nativeReadReleaseLabels, ...feedbackReleaseLabels, ...invocationReleaseLabels, ...chainReleaseLabels, ...taskEntryReleaseLabels,
273
283
  'blueprint-criterion-wire.mjs': { zh: '蓝图验收标准执行授权', en: 'Blueprint criterion execution authority' },
274
284
  'blueprint-criterion-runner.mjs': { zh: '蓝图验收标准实际执行器', en: 'Blueprint criterion process runner' },
275
285
  'local-archguard-ast.mjs': { zh: 'Archguard 架构合同与执行守卫', en: 'Archguard architecture contract and execution guard' },
package/releases.json CHANGED
@@ -1,4 +1,16 @@
1
1
  [
2
+ {
3
+ "version": "0.1.38",
4
+ "date": "2026-10-14",
5
+ "zh": "新增需宿主信任的 Codex 工具守卫,保留原任务和请求编号;接入确定性复用纪律、用途审查、变更分类、逐字段等价与全仓差集验收;仅验证完成并回传后清理冗余快照,按真实回执展示技术评分;更新日志每页 5 条。",
6
+ "en": "Added a Codex tool guard requiring host trust and preserving original task identities; enforce deterministic reuse, usage review, declared mutations, field equivalence and repository differences. Clean redundant snapshots only after verified completion and acknowledged feedback; display ratings from actual acknowledgements and five changelog entries per page."
7
+ },
8
+ {
9
+ "version": "0.1.37",
10
+ "date": "2026-10-13",
11
+ "zh": "统一 IDE 与网页沙箱任务编号;新任务按账号设置显示云端选择并保留原任务数据,进入及结束通知去重且发送失败可重试;适配 Windows Git 范围元数据检查。",
12
+ "en": "Unified IDE and website sandbox task numbers; added account-based entry choices while preserving original task facts, deduplicated lifecycle notifications with retryable OS rejection, and adapted Git scope metadata inspection for Windows."
13
+ },
2
14
  {
3
15
  "version": "0.1.36",
4
16
  "date": "2026-10-13",
package/remote-client.mjs CHANGED
@@ -4,6 +4,8 @@ import { parseTransportResponse, requestTransport, trustedOrigin } from './remot
4
4
  import { appendInvocation } from './local-invocations.mjs';
5
5
  import { acknowledgeAutomaticFeedback, verifyAutomaticFeedback } from './automatic-feedback-client.mjs';
6
6
  import { ideClientHeaders, presentInvocationNotices } from './ide-presentation.mjs';
7
+ import { routeTaskEntry } from './task-entry-client.mjs';
8
+ import { cleanupCompletedSnapshots } from './snapshot-retention.mjs';
7
9
 
8
10
  export const apiUrl = 'https://entrorove.com/api/skill/invoke';
9
11
 
@@ -71,8 +73,14 @@ export async function invokeRemote(data, dependencies) {
71
73
  return;
72
74
  }
73
75
  const token = await readCredential(home);
76
+ const routed = await routeTaskEntry(data, token, dependencies);
77
+ if (routed) {
78
+ process.stdout.write(JSON.stringify(routed) + '\n');
79
+ if (['blocked','failed','incomplete'].includes(routed.status)) process.exitCode = 2;
80
+ return routed;
81
+ }
74
82
  const { response, result } = await invokeDiscovered(data, token, { home, apiOrigin });
75
- process.stdout.write(JSON.stringify(presentInvocationNotices(result,dependencies.onIdeEvent)) + '\n');
83
+ process.stdout.write(JSON.stringify(presentInvocationNotices(result,dependencies.onIdeEvent,{home})) + '\n');
76
84
  if (!response.ok || result.output.status === 'blocked' || result.output.status === 'failed'
77
85
  || result.output.status === 'incomplete') process.exitCode = 2;
78
86
  }
@@ -140,6 +148,13 @@ export async function postInvocation(call, token, home, feedbackRequired = false
140
148
  else if (feedbackRequired && !['running','pending'].includes(result.output.status)) {
141
149
  throw new Error(`Automatic feedback receipt is missing; query feedback ${call.requestId}. Do not repeat the invocation.`);
142
150
  }
151
+ try {
152
+ const cleanup = await cleanupCompletedSnapshots(call.body, result, { home });
153
+ if (cleanup.status === 'completed') result.snapshotCleanup = cleanup;
154
+ } catch {
155
+ result.snapshotCleanup = { status: 'blocked', code: 'ENTROROVE_SNAPSHOT_CLEANUP_BLOCKED',
156
+ message: 'Execution and feedback are complete; cache cleanup encountered an unsafe entry and preserved it.' };
157
+ }
143
158
  return { response, result };
144
159
  }
145
160
 
@@ -0,0 +1,18 @@
1
+ const ide = ['ide-code-mode.mjs', 'ide-command.mjs', 'ide-hook.mjs', 'ide-install.mjs', 'ide-session.mjs', 'ide-results.mjs'];
2
+ const discipline = ['local-discipline-actions.mjs', 'local-discipline-analysis.mjs', 'local-discipline-batch.mjs',
3
+ 'local-discipline-contracts.mjs', 'local-discipline-contracts.d.mts', 'local-discipline-gate.mjs',
4
+ 'local-discipline-native.mjs', 'local-discipline-operations.mjs', 'local-discipline-repository.mjs',
5
+ 'local-discipline-snapshot.mjs', 'local-runner-discipline.mjs', 'local-integrity.d.mts'];
6
+ const equivalence = ['local-equivalence-runner.mjs', 'validator-runtime-build.mjs',
7
+ 'runtime/validator-runtime-v7.0.44.mjs', 'runtime/validator-runtime-v7.0.44.d.mts'];
8
+ const cleanup = ['snapshot-retention.mjs', 'snapshot-cleanup-journal.mjs'];
9
+ const documentation = ['IDE-EXECUTION.md', 'REUSE-DISCIPLINE.md'];
10
+ export const REUSE_DISCIPLINE_SOURCE_FILES = [...ide, ...discipline, ...equivalence, ...cleanup, ...documentation, 'reuse-discipline-release.mjs'];
11
+ export const reuseDisciplineReleaseLabels = Object.fromEntries([
12
+ ...ide.map(file => [file, { zh: 'Codex 后续轮次工具门禁', en: 'Codex tool guards across turns' }]),
13
+ ...discipline.map(file => [file, { zh: '复用与变更一致性门禁', en: 'reuse and change consistency checks' }]),
14
+ ...equivalence.map(file => [file, { zh: '真实新旧路径逐字段验证', en: 'actual fieldwise parallel-path verification' }]),
15
+ ...cleanup.map(file => [file, { zh: '验收后快照自动清理', en: 'verified snapshot cleanup' }]),
16
+ ...documentation.map(file => [file, { zh: 'IDE 执行与复用纪律文档', en: 'IDE execution and reuse discipline documentation' }]),
17
+ ['reuse-discipline-release.mjs', { zh: '复用纪律版本追踪', en: 'reuse discipline release tracking' }],
18
+ ]);
@@ -0,0 +1,3 @@
1
+ export const VALIDATOR_PARALLEL_PATHS_SCHEMA: Record<string, any>;
2
+ export function validatorParallelDeclarationsValid(value: unknown): boolean;
3
+ export function validatorEquivalenceFindings(subject: unknown): Array<Record<string, any>>;