@mestreyoda/fabrica 0.1.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 (45) hide show
  1. package/ARCHITECTURE.md +87 -0
  2. package/LICENSE +21 -0
  3. package/README.md +289 -0
  4. package/defaults/AGENTS.md +150 -0
  5. package/defaults/HEARTBEAT.md +3 -0
  6. package/defaults/IDENTITY.md +6 -0
  7. package/defaults/SOUL.md +39 -0
  8. package/defaults/TOOLS.md +15 -0
  9. package/defaults/fabrica/prompts/architect.md +147 -0
  10. package/defaults/fabrica/prompts/developer.md +211 -0
  11. package/defaults/fabrica/prompts/reviewer.md +114 -0
  12. package/defaults/fabrica/prompts/security-checklist.md +58 -0
  13. package/defaults/fabrica/prompts/tester.md +150 -0
  14. package/defaults/fabrica/workflow.yaml +184 -0
  15. package/dist/index.js +143075 -0
  16. package/dist/index.js.map +7 -0
  17. package/dist/lib/worker.cjs +214 -0
  18. package/dist/worker.cjs +4754 -0
  19. package/fabrica.manifest.json +24 -0
  20. package/genesis/configs/classification-rules.json +32 -0
  21. package/genesis/configs/interview-templates.json +73 -0
  22. package/genesis/configs/labels.json +202 -0
  23. package/genesis/configs/triage-matrix.json +39 -0
  24. package/genesis/scripts/classify-idea.sh +161 -0
  25. package/genesis/scripts/conduct-interview.sh +199 -0
  26. package/genesis/scripts/create-task.sh +797 -0
  27. package/genesis/scripts/delivery-target-lib.sh +88 -0
  28. package/genesis/scripts/generate-qa-contract.sh +188 -0
  29. package/genesis/scripts/generate-spec.sh +171 -0
  30. package/genesis/scripts/genesis-telemetry.sh +97 -0
  31. package/genesis/scripts/genesis-utils.sh +617 -0
  32. package/genesis/scripts/impact-analysis.sh +135 -0
  33. package/genesis/scripts/interview.sh +98 -0
  34. package/genesis/scripts/map-project.sh +309 -0
  35. package/genesis/scripts/receive-idea.sh +69 -0
  36. package/genesis/scripts/register-project.sh +520 -0
  37. package/genesis/scripts/research-idea.sh +84 -0
  38. package/genesis/scripts/scaffold-project.sh +1396 -0
  39. package/genesis/scripts/security-review.sh +141 -0
  40. package/genesis/scripts/sideband-lib.sh +243 -0
  41. package/genesis/scripts/stack-detection-lib.sh +130 -0
  42. package/genesis/scripts/triage.sh +598 -0
  43. package/genesis/scripts/validate-step.sh +81 -0
  44. package/openclaw.plugin.json +45 -0
  45. package/package.json +60 -0
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __commonJS = (cb, mod) => function __require() {
4
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
5
+ };
6
+
7
+ // node_modules/real-require/src/index.js
8
+ var require_src = __commonJS({
9
+ "node_modules/real-require/src/index.js"(exports2, module2) {
10
+ var realImport2 = new Function("modulePath", "return import(modulePath)");
11
+ function realRequire2(modulePath) {
12
+ if (typeof __non_webpack__require__ === "function") {
13
+ return __non_webpack__require__(modulePath);
14
+ }
15
+ return require(modulePath);
16
+ }
17
+ module2.exports = { realImport: realImport2, realRequire: realRequire2 };
18
+ }
19
+ });
20
+
21
+ // node_modules/thread-stream/lib/indexes.js
22
+ var require_indexes = __commonJS({
23
+ "node_modules/thread-stream/lib/indexes.js"(exports2, module2) {
24
+ "use strict";
25
+ var WRITE_INDEX2 = 4;
26
+ var READ_INDEX2 = 8;
27
+ module2.exports = {
28
+ WRITE_INDEX: WRITE_INDEX2,
29
+ READ_INDEX: READ_INDEX2
30
+ };
31
+ }
32
+ });
33
+
34
+ // node_modules/thread-stream/lib/wait.js
35
+ var require_wait = __commonJS({
36
+ "node_modules/thread-stream/lib/wait.js"(exports2, module2) {
37
+ "use strict";
38
+ var WAIT_MS = 1e4;
39
+ function wait(state2, index, expected, timeout, done) {
40
+ const max = timeout === Infinity ? Infinity : Date.now() + timeout;
41
+ const check = () => {
42
+ const current = Atomics.load(state2, index);
43
+ if (current === expected) {
44
+ done(null, "ok");
45
+ return;
46
+ }
47
+ if (max !== Infinity && Date.now() > max) {
48
+ done(null, "timed-out");
49
+ return;
50
+ }
51
+ const remaining = max === Infinity ? WAIT_MS : Math.min(WAIT_MS, Math.max(1, max - Date.now()));
52
+ const result = Atomics.waitAsync(state2, index, current, remaining);
53
+ if (result.async) {
54
+ result.value.then(check);
55
+ } else {
56
+ setImmediate(check);
57
+ }
58
+ };
59
+ check();
60
+ }
61
+ function waitDiff2(state2, index, expected, timeout, done) {
62
+ const max = timeout === Infinity ? Infinity : Date.now() + timeout;
63
+ const check = () => {
64
+ const current = Atomics.load(state2, index);
65
+ if (current !== expected) {
66
+ done(null, "ok");
67
+ return;
68
+ }
69
+ if (max !== Infinity && Date.now() > max) {
70
+ done(null, "timed-out");
71
+ return;
72
+ }
73
+ const remaining = max === Infinity ? WAIT_MS : Math.min(WAIT_MS, Math.max(1, max - Date.now()));
74
+ const result = Atomics.waitAsync(state2, index, expected, remaining);
75
+ if (result.async) {
76
+ result.value.then(check);
77
+ } else {
78
+ setImmediate(check);
79
+ }
80
+ };
81
+ check();
82
+ }
83
+ module2.exports = { wait, waitDiff: waitDiff2 };
84
+ }
85
+ });
86
+
87
+ // node_modules/thread-stream/lib/worker.js
88
+ var { realImport, realRequire } = require_src();
89
+ var { workerData, parentPort } = require("worker_threads");
90
+ var { WRITE_INDEX, READ_INDEX } = require_indexes();
91
+ var { waitDiff } = require_wait();
92
+ var {
93
+ dataBuf,
94
+ filename,
95
+ stateBuf
96
+ } = workerData;
97
+ var destination;
98
+ var state = new Int32Array(stateBuf);
99
+ var data = Buffer.from(dataBuf);
100
+ var keepAlive = setInterval(() => {
101
+ }, 60 * 60 * 1e3);
102
+ async function start() {
103
+ let worker;
104
+ try {
105
+ worker = await realImport(filename);
106
+ } catch (error) {
107
+ if ((error.code === "ENOTDIR" || error.code === "ERR_MODULE_NOT_FOUND") && filename.startsWith("file://")) {
108
+ worker = realRequire(decodeURIComponent(filename.replace("file://", "")));
109
+ } else if (error.code === void 0 || error.code === "ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING") {
110
+ try {
111
+ worker = realRequire(decodeURIComponent(filename.replace(process.platform === "win32" ? "file:///" : "file://", "")));
112
+ } catch {
113
+ throw error;
114
+ }
115
+ } else if (filename.endsWith(".ts") || filename.endsWith(".cts")) {
116
+ try {
117
+ if (!process[Symbol.for("ts-node.register.instance")]) {
118
+ realRequire("ts-node/register");
119
+ } else if (process.env.TS_NODE_DEV) {
120
+ realRequire("ts-node-dev");
121
+ }
122
+ worker = realRequire(decodeURIComponent(filename.replace(process.platform === "win32" ? "file:///" : "file://", "")));
123
+ } catch {
124
+ throw error;
125
+ }
126
+ } else {
127
+ throw error;
128
+ }
129
+ }
130
+ if (typeof worker === "object") worker = worker.default;
131
+ if (typeof worker === "object") worker = worker.default;
132
+ destination = await worker(workerData.workerData);
133
+ destination.on("error", function(err) {
134
+ Atomics.store(state, WRITE_INDEX, -2);
135
+ Atomics.notify(state, WRITE_INDEX);
136
+ Atomics.store(state, READ_INDEX, -2);
137
+ Atomics.notify(state, READ_INDEX);
138
+ parentPort.postMessage({
139
+ code: "ERROR",
140
+ err
141
+ });
142
+ });
143
+ destination.on("close", function() {
144
+ const end = Atomics.load(state, WRITE_INDEX);
145
+ Atomics.store(state, READ_INDEX, end);
146
+ Atomics.notify(state, READ_INDEX);
147
+ clearInterval(keepAlive);
148
+ setImmediate(() => {
149
+ process.exit(0);
150
+ });
151
+ });
152
+ }
153
+ start().then(function() {
154
+ parentPort.postMessage({
155
+ code: "READY"
156
+ });
157
+ process.nextTick(run);
158
+ });
159
+ function run() {
160
+ const current = Atomics.load(state, READ_INDEX);
161
+ const end = Atomics.load(state, WRITE_INDEX);
162
+ if (end === current) {
163
+ if (end === data.length) {
164
+ waitDiff(state, READ_INDEX, end, Infinity, run);
165
+ } else {
166
+ waitDiff(state, WRITE_INDEX, end, Infinity, run);
167
+ }
168
+ return;
169
+ }
170
+ if (end === -1) {
171
+ destination.end();
172
+ return;
173
+ }
174
+ const toWrite = data.toString("utf8", current, end);
175
+ const res = destination.write(toWrite);
176
+ if (res) {
177
+ Atomics.store(state, READ_INDEX, end);
178
+ Atomics.notify(state, READ_INDEX);
179
+ setImmediate(run);
180
+ } else {
181
+ destination.once("drain", function() {
182
+ Atomics.store(state, READ_INDEX, end);
183
+ Atomics.notify(state, READ_INDEX);
184
+ run();
185
+ });
186
+ }
187
+ }
188
+ process.on("unhandledRejection", function(err) {
189
+ parentPort.postMessage({
190
+ code: "ERROR",
191
+ err
192
+ });
193
+ process.exit(1);
194
+ });
195
+ process.on("uncaughtException", function(err) {
196
+ parentPort.postMessage({
197
+ code: "ERROR",
198
+ err
199
+ });
200
+ process.exit(1);
201
+ });
202
+ process.once("exit", (exitCode) => {
203
+ if (exitCode !== 0) {
204
+ process.exit(exitCode);
205
+ return;
206
+ }
207
+ if (destination?.writableNeedDrain && !destination?.writableEnded) {
208
+ parentPort.postMessage({
209
+ code: "WARNING",
210
+ err: new Error("ThreadStream: process exited before destination stream was drained. this may indicate that the destination stream try to write to a another missing stream")
211
+ });
212
+ }
213
+ process.exit(0);
214
+ });