@synergenius/flowweaver-pack-weaver 0.5.2 → 0.6.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.
Files changed (78) hide show
  1. package/dist/bot/ai-client.d.ts +1 -1
  2. package/dist/bot/ai-client.d.ts.map +1 -1
  3. package/dist/bot/ai-client.js +8 -4
  4. package/dist/bot/ai-client.js.map +1 -1
  5. package/dist/bot/cli-provider.d.ts +2 -1
  6. package/dist/bot/cli-provider.d.ts.map +1 -1
  7. package/dist/bot/cli-provider.js +10 -2
  8. package/dist/bot/cli-provider.js.map +1 -1
  9. package/dist/bot/genesis-prompt-context.d.ts +31 -0
  10. package/dist/bot/genesis-prompt-context.d.ts.map +1 -0
  11. package/dist/bot/genesis-prompt-context.js +121 -0
  12. package/dist/bot/genesis-prompt-context.js.map +1 -0
  13. package/dist/bot/genesis-store.d.ts +11 -1
  14. package/dist/bot/genesis-store.d.ts.map +1 -1
  15. package/dist/bot/genesis-store.js +65 -0
  16. package/dist/bot/genesis-store.js.map +1 -1
  17. package/dist/bot/provider-registry.js +2 -2
  18. package/dist/bot/provider-registry.js.map +1 -1
  19. package/dist/bot/types.d.ts +41 -1
  20. package/dist/bot/types.d.ts.map +1 -1
  21. package/dist/node-types/genesis-apply-retry.d.ts +6 -3
  22. package/dist/node-types/genesis-apply-retry.d.ts.map +1 -1
  23. package/dist/node-types/genesis-apply-retry.js +18 -10
  24. package/dist/node-types/genesis-apply-retry.js.map +1 -1
  25. package/dist/node-types/genesis-approve.d.ts.map +1 -1
  26. package/dist/node-types/genesis-approve.js +6 -1
  27. package/dist/node-types/genesis-approve.js.map +1 -1
  28. package/dist/node-types/genesis-diff-workflow.d.ts.map +1 -1
  29. package/dist/node-types/genesis-diff-workflow.js +30 -2
  30. package/dist/node-types/genesis-diff-workflow.js.map +1 -1
  31. package/dist/node-types/genesis-escrow-grace.d.ts +15 -0
  32. package/dist/node-types/genesis-escrow-grace.d.ts.map +1 -0
  33. package/dist/node-types/genesis-escrow-grace.js +52 -0
  34. package/dist/node-types/genesis-escrow-grace.js.map +1 -0
  35. package/dist/node-types/genesis-escrow-migrate.d.ts +21 -0
  36. package/dist/node-types/genesis-escrow-migrate.d.ts.map +1 -0
  37. package/dist/node-types/genesis-escrow-migrate.js +116 -0
  38. package/dist/node-types/genesis-escrow-migrate.js.map +1 -0
  39. package/dist/node-types/genesis-escrow-recover.d.ts +15 -0
  40. package/dist/node-types/genesis-escrow-recover.d.ts.map +1 -0
  41. package/dist/node-types/genesis-escrow-recover.js +90 -0
  42. package/dist/node-types/genesis-escrow-recover.js.map +1 -0
  43. package/dist/node-types/genesis-escrow-stage.d.ts +17 -0
  44. package/dist/node-types/genesis-escrow-stage.d.ts.map +1 -0
  45. package/dist/node-types/genesis-escrow-stage.js +86 -0
  46. package/dist/node-types/genesis-escrow-stage.js.map +1 -0
  47. package/dist/node-types/genesis-escrow-validate.d.ts +17 -0
  48. package/dist/node-types/genesis-escrow-validate.d.ts.map +1 -0
  49. package/dist/node-types/genesis-escrow-validate.js +110 -0
  50. package/dist/node-types/genesis-escrow-validate.js.map +1 -0
  51. package/dist/node-types/genesis-load-config.d.ts.map +1 -1
  52. package/dist/node-types/genesis-load-config.js +1 -0
  53. package/dist/node-types/genesis-load-config.js.map +1 -1
  54. package/dist/node-types/genesis-observe.d.ts.map +1 -1
  55. package/dist/node-types/genesis-observe.js +2 -0
  56. package/dist/node-types/genesis-observe.js.map +1 -1
  57. package/dist/node-types/genesis-propose.d.ts.map +1 -1
  58. package/dist/node-types/genesis-propose.js +41 -33
  59. package/dist/node-types/genesis-propose.js.map +1 -1
  60. package/dist/node-types/genesis-report.d.ts +4 -2
  61. package/dist/node-types/genesis-report.d.ts.map +1 -1
  62. package/dist/node-types/genesis-report.js +43 -17
  63. package/dist/node-types/genesis-report.js.map +1 -1
  64. package/dist/node-types/genesis-try-apply.d.ts.map +1 -1
  65. package/dist/node-types/genesis-try-apply.js +33 -0
  66. package/dist/node-types/genesis-try-apply.js.map +1 -1
  67. package/dist/node-types/genesis-update-history.d.ts.map +1 -1
  68. package/dist/node-types/genesis-update-history.js +21 -8
  69. package/dist/node-types/genesis-update-history.js.map +1 -1
  70. package/dist/node-types/genesis-validate-proposal.d.ts.map +1 -1
  71. package/dist/node-types/genesis-validate-proposal.js +39 -5
  72. package/dist/node-types/genesis-validate-proposal.js.map +1 -1
  73. package/dist/workflows/genesis-task.d.ts +28 -18
  74. package/dist/workflows/genesis-task.d.ts.map +1 -1
  75. package/dist/workflows/genesis-task.js +26 -18
  76. package/dist/workflows/genesis-task.js.map +1 -1
  77. package/flowweaver.manifest.json +1 -1
  78. package/package.json +3 -3
@@ -2,6 +2,7 @@ import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import { callCli, callApi, parseJsonResponse } from '../bot/ai-client.js';
4
4
  import { GenesisStore } from '../bot/genesis-store.js';
5
+ import { getGenesisSystemPrompt, getOperationExamples } from '../bot/genesis-prompt-context.js';
5
6
  /**
6
7
  * Scoped retry loop for apply + compile. Delegates the actual work to
7
8
  * a child node via the attempt callback, and between failures restores
@@ -10,8 +11,11 @@ import { GenesisStore } from '../bot/genesis-store.js';
10
11
  * @flowWeaver nodeType
11
12
  * @label Genesis Apply Retry
12
13
  * @input ctx [order:0] - Genesis context (JSON)
14
+ * @output start scope:attempt [order:10] [hidden] - Trigger scope execution (boolean)
13
15
  * @output attemptCtx scope:attempt [order:11] - Context for child (JSON)
14
- * @input attemptCtx scope:attempt [order:12] - Result context from child (JSON)
16
+ * @input success scope:attempt [order:12] [hidden] - Success signal from child (boolean)
17
+ * @input failure scope:attempt [order:13] [hidden] - Failure signal from child (boolean)
18
+ * @input attemptCtx scope:attempt [order:14] - Result context from child (JSON)
15
19
  * @output ctx [order:0] - Genesis context with applyResultJson (JSON)
16
20
  * @output onSuccess [order:-2] - On Success
17
21
  * @output onFailure [order:-1] - On Failure
@@ -30,12 +34,11 @@ export async function genesisApplyRetry(execute, ctx, attempt) {
30
34
  let lastErrors = '';
31
35
  for (let i = 1; i <= maxAttempts; i++) {
32
36
  console.log(`\x1b[36m→ Apply attempt ${i}/${maxAttempts}\x1b[0m`);
33
- const outcome = attempt(true, JSON.stringify(context));
37
+ const outcome = await attempt(true, JSON.stringify(context));
34
38
  const childCtx = JSON.parse(outcome.attemptCtx);
35
39
  lastResult = childCtx.applyResultJson ?? '';
36
40
  lastErrors = childCtx.error ?? '';
37
41
  if (outcome.success) {
38
- // Merge child results back
39
42
  context.applyResultJson = childCtx.applyResultJson;
40
43
  context.error = '';
41
44
  return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
@@ -50,7 +53,7 @@ export async function genesisApplyRetry(execute, ctx, attempt) {
50
53
  fs.writeFileSync(targetPath, snapshot, 'utf-8');
51
54
  }
52
55
  try {
53
- const revisedProposal = await reviseProposal(env, context.proposalJson, lastErrors);
56
+ const revisedProposal = await reviseProposal(env, config, context.proposalJson, lastErrors, targetPath, context.workflowDescription, !!context.stabilized);
54
57
  context.proposalJson = revisedProposal;
55
58
  console.log('\x1b[36m→ Revised proposal received\x1b[0m');
56
59
  }
@@ -68,19 +71,24 @@ export async function genesisApplyRetry(execute, ctx, attempt) {
68
71
  context.error = errorDesc;
69
72
  return { onSuccess: false, onFailure: true, ctx: JSON.stringify(context) };
70
73
  }
71
- async function reviseProposal(env, currentProposal, compileErrors) {
74
+ async function reviseProposal(env, config, currentProposal, compileErrors, targetPath, workflowDescription, stabilized) {
72
75
  const { providerInfo: pInfo } = env;
73
- const systemPrompt = 'You are a workflow evolution engine. Return ONLY valid JSON matching the GenesisProposal schema (operations array with type, args, costUnits, rationale; totalCost; impactLevel; summary).';
76
+ const systemPrompt = await getGenesisSystemPrompt(config, !!stabilized);
74
77
  const userPrompt = [
75
- 'The following proposal caused compile/validate errors when applied:',
78
+ 'The following proposal caused errors when applied. Revise it to fix these errors.',
76
79
  '',
77
- '## Current Proposal',
80
+ '## Current Workflow Structure',
81
+ workflowDescription || '(no description available)',
82
+ '',
83
+ '## Failed Proposal',
78
84
  currentProposal,
79
85
  '',
80
- '## Compile Errors',
86
+ '## Errors',
81
87
  compileErrors,
82
88
  '',
83
- 'Revise the proposal to fix these errors. Return the full revised proposal as JSON.',
89
+ getOperationExamples(targetPath),
90
+ '',
91
+ 'Return the full revised proposal as JSON. Use node IDs and port names that exist in the workflow structure above.',
84
92
  ].join('\n');
85
93
  let text;
86
94
  if (pInfo.type === 'anthropic') {
@@ -1 +1 @@
1
- {"version":3,"file":"genesis-apply-retry.js","sourceRoot":"","sources":["../../src/node-types/genesis-apply-retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"genesis-apply-retry.js","sourceRoot":"","sources":["../../src/node-types/genesis-apply-retry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"genesis-approve.d.ts","sourceRoot":"","sources":["../../src/node-types/genesis-approve.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CA8CD"}
1
+ {"version":3,"file":"genesis-approve.d.ts","sourceRoot":"","sources":["../../src/node-types/genesis-approve.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CAmDD"}
@@ -24,7 +24,12 @@ export async function genesisApprove(execute, ctx) {
24
24
  return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
25
25
  }
26
26
  const { config } = context.env;
27
- const approvalMode = typeof config.approval === 'string' ? config.approval : config.approval?.mode ?? 'prompt';
27
+ // Match the same default as runner.ts resolveApproval: no approval field = 'auto'
28
+ const approvalMode = !config.approval || config.approval === 'auto'
29
+ ? 'auto'
30
+ : typeof config.approval === 'string'
31
+ ? config.approval
32
+ : config.approval.mode;
28
33
  // Display proposal summary
29
34
  const proposal = JSON.parse(context.proposalJson);
30
35
  const diffData = JSON.parse(context.workflowDiffJson);
@@ -1 +1 @@
1
- {"version":3,"file":"genesis-approve.js","sourceRoot":"","sources":["../../src/node-types/genesis-approve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"genesis-approve.js","sourceRoot":"","sources":["../../src/node-types/genesis-approve.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"genesis-diff-workflow.d.ts","sourceRoot":"","sources":["../../src/node-types/genesis-diff-workflow.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CA0BhE"}
1
+ {"version":3,"file":"genesis-diff-workflow.d.ts","sourceRoot":"","sources":["../../src/node-types/genesis-diff-workflow.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAsDhE"}
@@ -1,3 +1,4 @@
1
+ import * as fs from 'node:fs';
1
2
  import * as path from 'node:path';
2
3
  import { execFileSync } from 'node:child_process';
3
4
  /**
@@ -16,6 +17,7 @@ export function genesisDiffWorkflow(ctx) {
16
17
  const config = JSON.parse(context.genesisConfigJson);
17
18
  const targetPath = path.resolve(context.env.projectDir, config.targetWorkflow);
18
19
  let diffOutput = '';
20
+ // Try semantic diff via flow-weaver first
19
21
  try {
20
22
  diffOutput = execFileSync('flow-weaver', ['diff', context.snapshotPath, targetPath], {
21
23
  cwd: context.env.projectDir,
@@ -28,10 +30,36 @@ export function genesisDiffWorkflow(ctx) {
28
30
  if (err && typeof err === 'object' && 'stdout' in err) {
29
31
  diffOutput = String(err.stdout).trim();
30
32
  }
31
- if (!diffOutput) {
32
- diffOutput = 'Unable to produce diff';
33
+ }
34
+ // Fallback to basic text diff if semantic diff failed
35
+ if (!diffOutput && context.snapshotPath) {
36
+ try {
37
+ const snapshotContent = fs.readFileSync(context.snapshotPath, 'utf-8');
38
+ const currentContent = fs.readFileSync(targetPath, 'utf-8');
39
+ if (snapshotContent === currentContent) {
40
+ diffOutput = '(no changes)';
41
+ }
42
+ else {
43
+ diffOutput = execFileSync('git', ['diff', '--no-index', '--no-color', context.snapshotPath, targetPath], {
44
+ cwd: context.env.projectDir,
45
+ encoding: 'utf-8',
46
+ stdio: ['pipe', 'pipe', 'pipe'],
47
+ timeout: 10_000,
48
+ }).trim();
49
+ }
50
+ }
51
+ catch (err) {
52
+ // git diff exits 1 when files differ (that's normal)
53
+ if (err && typeof err === 'object' && 'stdout' in err) {
54
+ const stdout = String(err.stdout).trim();
55
+ if (stdout)
56
+ diffOutput = stdout;
57
+ }
33
58
  }
34
59
  }
60
+ if (!diffOutput) {
61
+ diffOutput = '(diff unavailable)';
62
+ }
35
63
  console.log(`\x1b[36m→ Workflow diff: ${diffOutput.split('\n').length} lines\x1b[0m`);
36
64
  context.workflowDiffJson = JSON.stringify({ diff: diffOutput });
37
65
  return { ctx: JSON.stringify(context) };
@@ -1 +1 @@
1
- {"version":3,"file":"genesis-diff-workflow.js","sourceRoot":"","sources":["../../src/node-types/genesis-diff-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAkB,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAE/E,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,YAAa,EAAE,UAAU,CAAC,EAAE;YACpF,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;YAC3B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;YACtD,UAAU,GAAG,MAAM,CAAE,GAA0B,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,wBAAwB,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,CAAC;IAEtF,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"genesis-diff-workflow.js","sourceRoot":"","sources":["../../src/node-types/genesis-diff-workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Handles escrow grace period tracking at the end of each cycle.
3
+ * Decrements grace on success, triggers rollback on failure, and
4
+ * clears escrow once the grace period completes.
5
+ *
6
+ * @flowWeaver nodeType
7
+ * @expression
8
+ * @label Genesis Escrow Grace
9
+ * @input ctx [order:0] - Genesis context (JSON)
10
+ * @output ctx [order:0] - Genesis context (JSON)
11
+ */
12
+ export declare function genesisEscrowGrace(ctx: string): {
13
+ ctx: string;
14
+ };
15
+ //# sourceMappingURL=genesis-escrow-grace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesis-escrow-grace.d.ts","sourceRoot":"","sources":["../../src/node-types/genesis-escrow-grace.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CA6C/D"}
@@ -0,0 +1,52 @@
1
+ import * as path from 'node:path';
2
+ import { GenesisStore } from '../bot/genesis-store.js';
3
+ import { rollbackFromBackup } from './genesis-escrow-migrate.js';
4
+ /**
5
+ * Handles escrow grace period tracking at the end of each cycle.
6
+ * Decrements grace on success, triggers rollback on failure, and
7
+ * clears escrow once the grace period completes.
8
+ *
9
+ * @flowWeaver nodeType
10
+ * @expression
11
+ * @label Genesis Escrow Grace
12
+ * @input ctx [order:0] - Genesis context (JSON)
13
+ * @output ctx [order:0] - Genesis context (JSON)
14
+ */
15
+ export function genesisEscrowGrace(ctx) {
16
+ const context = JSON.parse(ctx);
17
+ const { env } = context;
18
+ const config = JSON.parse(context.genesisConfigJson);
19
+ if (!config.selfEvolve) {
20
+ return { ctx: JSON.stringify(context) };
21
+ }
22
+ const store = new GenesisStore(env.projectDir);
23
+ const token = store.loadEscrowToken();
24
+ if (!token || token.phase !== 'migrated' || token.graceRemaining <= 0) {
25
+ return { ctx: JSON.stringify(context) };
26
+ }
27
+ const packRoot = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..', '..');
28
+ // Cycle failed during grace: rollback
29
+ if (context.error) {
30
+ rollbackFromBackup(store, token, packRoot, `Grace cycle failed: ${context.error}`);
31
+ return { ctx: JSON.stringify(context) };
32
+ }
33
+ // Cycle succeeded: decrement grace
34
+ token.graceRemaining--;
35
+ token.graceCycleIds.push(context.cycleId);
36
+ store.saveEscrowToken(token);
37
+ console.log(`\x1b[36m→ Grace period: ${token.graceRemaining} cycle(s) remaining\x1b[0m`);
38
+ if (token.graceRemaining <= 0) {
39
+ store.appendSelfMigration({
40
+ migrationId: token.migrationId,
41
+ cycleId: token.cycleId,
42
+ timestamp: new Date().toISOString(),
43
+ affectedFiles: token.affectedFiles,
44
+ outcome: 'grace-cleared',
45
+ graceCompleted: true,
46
+ });
47
+ store.clearEscrow();
48
+ console.log('\x1b[32m→ Grace period complete, self-modification accepted\x1b[0m');
49
+ }
50
+ return { ctx: JSON.stringify(context) };
51
+ }
52
+ //# sourceMappingURL=genesis-escrow-grace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesis-escrow-grace.js","sourceRoot":"","sources":["../../src/node-types/genesis-escrow-grace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAClD,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAkB,CAAC;IAEtE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;IAEtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;QACtE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE3F,sCAAsC;IACtC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,uBAAuB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,cAAc,4BAA4B,CAAC,CAAC;IAEzF,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,mBAAmB,CAAC;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,OAAO,EAAE,eAAe;YACxB,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { EscrowToken } from '../bot/types.js';
2
+ import { GenesisStore } from '../bot/genesis-store.js';
3
+ /**
4
+ * Copies staged files to their actual pack locations, completing the
5
+ * self-modification migration. Uses a file lock to prevent concurrent access.
6
+ *
7
+ * @flowWeaver nodeType
8
+ * @label Genesis Escrow Migrate
9
+ * @input ctx [order:0] - Genesis context (JSON)
10
+ * @output ctx [order:0] - Genesis context with migration result (JSON)
11
+ * @output onSuccess [order:-2] - On Success
12
+ * @output onFailure [order:-1] [hidden] - On Failure
13
+ */
14
+ export declare function genesisEscrowMigrate(execute: boolean, ctx: string): Promise<{
15
+ onSuccess: boolean;
16
+ onFailure: boolean;
17
+ ctx: string;
18
+ }>;
19
+ /** Restore all affected files from backup, or delete newly-created files. */
20
+ export declare function rollbackFromBackup(store: GenesisStore, token: EscrowToken, packRoot: string, reason: string): void;
21
+ //# sourceMappingURL=genesis-escrow-migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesis-escrow-migrate.d.ts","sourceRoot":"","sources":["../../src/node-types/genesis-escrow-migrate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CA6DD;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,IAAI,CA6CN"}
@@ -0,0 +1,116 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { GenesisStore } from '../bot/genesis-store.js';
4
+ import { withFileLock } from '../bot/file-lock.js';
5
+ /**
6
+ * Copies staged files to their actual pack locations, completing the
7
+ * self-modification migration. Uses a file lock to prevent concurrent access.
8
+ *
9
+ * @flowWeaver nodeType
10
+ * @label Genesis Escrow Migrate
11
+ * @input ctx [order:0] - Genesis context (JSON)
12
+ * @output ctx [order:0] - Genesis context with migration result (JSON)
13
+ * @output onSuccess [order:-2] - On Success
14
+ * @output onFailure [order:-1] [hidden] - On Failure
15
+ */
16
+ export async function genesisEscrowMigrate(execute, ctx) {
17
+ const context = JSON.parse(ctx);
18
+ const { env } = context;
19
+ const store = new GenesisStore(env.projectDir);
20
+ const token = store.loadEscrowToken();
21
+ if (!execute) {
22
+ context.escrowResultJson = JSON.stringify({ migrated: false, reason: 'dry run' });
23
+ return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
24
+ }
25
+ if (!token || token.phase !== 'validated') {
26
+ // No validated escrow: pass through (not an error, just nothing to migrate)
27
+ return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
28
+ }
29
+ const packRoot = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..', '..');
30
+ const lockPath = path.join(env.projectDir, '.genesis', 'escrow', 'migrate');
31
+ try {
32
+ await withFileLock(lockPath, () => {
33
+ // Re-read token inside lock to confirm state
34
+ const lockedToken = store.loadEscrowToken();
35
+ if (!lockedToken || lockedToken.phase !== 'validated') {
36
+ throw new Error('Token state changed during lock acquisition');
37
+ }
38
+ lockedToken.phase = 'migrating';
39
+ store.saveEscrowToken(lockedToken);
40
+ // Copy each staged file to actual location
41
+ for (const relFile of lockedToken.affectedFiles) {
42
+ const stagedPath = store.getEscrowStagedPath(relFile);
43
+ const destPath = path.resolve(packRoot, relFile);
44
+ fs.mkdirSync(path.dirname(destPath), { recursive: true });
45
+ fs.copyFileSync(stagedPath, destPath);
46
+ }
47
+ lockedToken.phase = 'migrated';
48
+ lockedToken.migratedAt = new Date().toISOString();
49
+ store.saveEscrowToken(lockedToken);
50
+ });
51
+ console.log(`\x1b[32m→ Escrow migration complete: ${token.affectedFiles.length} file(s) swapped\x1b[0m`);
52
+ context.escrowResultJson = JSON.stringify({
53
+ migrated: true,
54
+ migrationId: token.migrationId,
55
+ files: token.affectedFiles,
56
+ });
57
+ return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
58
+ }
59
+ catch (err) {
60
+ const msg = err instanceof Error ? err.message : String(err);
61
+ console.error(`\x1b[31m→ Escrow migration failed: ${msg}\x1b[0m`);
62
+ // Attempt rollback
63
+ rollbackFromBackup(store, token, packRoot, `Migration failed: ${msg}`);
64
+ context.error = `Escrow migration failed: ${msg}`;
65
+ return { onSuccess: false, onFailure: true, ctx: JSON.stringify(context) };
66
+ }
67
+ }
68
+ /** Restore all affected files from backup, or delete newly-created files. */
69
+ export function rollbackFromBackup(store, token, packRoot, reason) {
70
+ for (const relFile of token.affectedFiles) {
71
+ const backupPath = store.getEscrowBackupPath(relFile);
72
+ const destPath = path.resolve(packRoot, relFile);
73
+ if (fs.existsSync(backupPath)) {
74
+ // Verify backup integrity
75
+ try {
76
+ const actualHash = GenesisStore.hashFile(backupPath);
77
+ const expectedHash = token.backupFileHashes[relFile];
78
+ if (expectedHash && actualHash !== expectedHash) {
79
+ console.error(`\x1b[31m→ Backup integrity check failed for ${relFile}\x1b[0m`);
80
+ continue;
81
+ }
82
+ }
83
+ catch {
84
+ console.error(`\x1b[31m→ Cannot read backup for ${relFile}\x1b[0m`);
85
+ continue;
86
+ }
87
+ fs.mkdirSync(path.dirname(destPath), { recursive: true });
88
+ fs.copyFileSync(backupPath, destPath);
89
+ }
90
+ else if (fs.existsSync(destPath) && !token.backupFileHashes[relFile]) {
91
+ // File was newly created during migration (no backup), remove it
92
+ try {
93
+ fs.unlinkSync(destPath);
94
+ }
95
+ catch { /* ignore */ }
96
+ }
97
+ }
98
+ // Update token
99
+ const fullToken = store.loadEscrowToken();
100
+ if (fullToken) {
101
+ fullToken.phase = 'rolled-back';
102
+ fullToken.rollbackReason = reason;
103
+ store.saveEscrowToken(fullToken);
104
+ }
105
+ store.appendSelfMigration({
106
+ migrationId: token.migrationId,
107
+ cycleId: token.cycleId,
108
+ timestamp: new Date().toISOString(),
109
+ affectedFiles: token.affectedFiles,
110
+ outcome: 'rolled-back',
111
+ graceCompleted: false,
112
+ rollbackReason: reason,
113
+ });
114
+ console.log(`\x1b[33m→ Rolled back migration ${token.migrationId}: ${reason}\x1b[0m`);
115
+ }
116
+ //# sourceMappingURL=genesis-escrow-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesis-escrow-migrate.js","sourceRoot":"","sources":["../../src/node-types/genesis-escrow-migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Checks for interrupted escrow migrations (crash recovery) and sets
3
+ * grace-period context flags for downstream nodes. Runs early in the
4
+ * workflow so propose and other nodes can see the escrow state.
5
+ *
6
+ * @flowWeaver nodeType
7
+ * @expression
8
+ * @label Genesis Escrow Recover
9
+ * @input ctx [order:0] - Genesis context (JSON)
10
+ * @output ctx [order:0] - Genesis context with escrow state flags (JSON)
11
+ */
12
+ export declare function genesisEscrowRecover(ctx: string): {
13
+ ctx: string;
14
+ };
15
+ //# sourceMappingURL=genesis-escrow-recover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesis-escrow-recover.d.ts","sourceRoot":"","sources":["../../src/node-types/genesis-escrow-recover.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAiFjE"}
@@ -0,0 +1,90 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { GenesisStore } from '../bot/genesis-store.js';
4
+ import { rollbackFromBackup } from './genesis-escrow-migrate.js';
5
+ /**
6
+ * Checks for interrupted escrow migrations (crash recovery) and sets
7
+ * grace-period context flags for downstream nodes. Runs early in the
8
+ * workflow so propose and other nodes can see the escrow state.
9
+ *
10
+ * @flowWeaver nodeType
11
+ * @expression
12
+ * @label Genesis Escrow Recover
13
+ * @input ctx [order:0] - Genesis context (JSON)
14
+ * @output ctx [order:0] - Genesis context with escrow state flags (JSON)
15
+ */
16
+ export function genesisEscrowRecover(ctx) {
17
+ const context = JSON.parse(ctx);
18
+ const { env } = context;
19
+ const config = JSON.parse(context.genesisConfigJson);
20
+ if (!config.selfEvolve) {
21
+ context.escrowGraceLocked = false;
22
+ return { ctx: JSON.stringify(context) };
23
+ }
24
+ const store = new GenesisStore(env.projectDir);
25
+ // Check if max failures exceeded (disables self-evolution for this cycle)
26
+ const maxFailures = config.selfEvolveMaxFailures ?? 3;
27
+ const failureCount = store.getSelfFailureCount();
28
+ if (failureCount >= maxFailures) {
29
+ console.log(`\x1b[33m→ Self-evolution disabled: ${failureCount} consecutive failures (max ${maxFailures})\x1b[0m`);
30
+ context.escrowGraceLocked = true;
31
+ context.escrowGraceRemaining = 0;
32
+ return { ctx: JSON.stringify(context) };
33
+ }
34
+ const token = store.loadEscrowToken();
35
+ if (!token) {
36
+ context.escrowGraceLocked = false;
37
+ return { ctx: JSON.stringify(context) };
38
+ }
39
+ const packRoot = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..', '..');
40
+ // Crash recovery: process died mid-swap
41
+ if (token.phase === 'migrating') {
42
+ console.log('\x1b[33m→ Detected interrupted migration, checking file integrity...\x1b[0m');
43
+ let needsRollback = false;
44
+ for (const relFile of token.affectedFiles) {
45
+ const absFile = path.resolve(packRoot, relFile);
46
+ if (!fs.existsSync(absFile)) {
47
+ needsRollback = true;
48
+ break;
49
+ }
50
+ const currentHash = GenesisStore.hashFile(absFile);
51
+ const stagedHash = token.stagedFileHashes[relFile];
52
+ const backupHash = token.backupFileHashes[relFile];
53
+ if (currentHash !== stagedHash && currentHash !== backupHash) {
54
+ needsRollback = true;
55
+ break;
56
+ }
57
+ }
58
+ if (needsRollback) {
59
+ console.log('\x1b[33m→ Inconsistent state, rolling back...\x1b[0m');
60
+ rollbackFromBackup(store, token, packRoot, 'Crash recovery: inconsistent file state');
61
+ }
62
+ else {
63
+ // Check if all files match staged (migration was actually complete)
64
+ const allStaged = token.affectedFiles.every(f => {
65
+ const absFile = path.resolve(packRoot, f);
66
+ return fs.existsSync(absFile) && GenesisStore.hashFile(absFile) === token.stagedFileHashes[f];
67
+ });
68
+ if (allStaged) {
69
+ token.phase = 'migrated';
70
+ token.migratedAt = new Date().toISOString();
71
+ store.saveEscrowToken(token);
72
+ console.log('\x1b[32m→ Migration was complete, advancing to grace period\x1b[0m');
73
+ }
74
+ else {
75
+ rollbackFromBackup(store, token, packRoot, 'Crash recovery: partial migration');
76
+ }
77
+ }
78
+ }
79
+ // Set grace state for downstream nodes
80
+ const current = store.loadEscrowToken();
81
+ if (current && current.phase === 'migrated' && current.graceRemaining > 0) {
82
+ context.escrowGraceLocked = true;
83
+ context.escrowGraceRemaining = current.graceRemaining;
84
+ }
85
+ else {
86
+ context.escrowGraceLocked = false;
87
+ }
88
+ return { ctx: JSON.stringify(context) };
89
+ }
90
+ //# sourceMappingURL=genesis-escrow-recover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesis-escrow-recover.js","sourceRoot":"","sources":["../../src/node-types/genesis-escrow-recover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Separates self-modify operations from the proposal, copies current files
3
+ * to backup, writes new content to staged, and creates the escrow token.
4
+ *
5
+ * @flowWeaver nodeType
6
+ * @label Genesis Escrow Stage
7
+ * @input ctx [order:0] - Genesis context (JSON)
8
+ * @output ctx [order:0] - Genesis context with escrow staging result (JSON)
9
+ * @output onSuccess [order:-2] - On Success
10
+ * @output onFailure [order:-1] [hidden] - On Failure
11
+ */
12
+ export declare function genesisEscrowStage(ctx: string): {
13
+ onSuccess: boolean;
14
+ onFailure: boolean;
15
+ ctx: string;
16
+ };
17
+ //# sourceMappingURL=genesis-escrow-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesis-escrow-stage.d.ts","sourceRoot":"","sources":["../../src/node-types/genesis-escrow-stage.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC/C,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;CACb,CAmFA"}