tryassay 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/create.js +13 -7
- package/dist/commands/create.js.map +1 -1
- package/dist/runtime/__tests__/integration-verifier.test.d.ts +9 -0
- package/dist/runtime/__tests__/integration-verifier.test.js +120 -0
- package/dist/runtime/__tests__/integration-verifier.test.js.map +1 -0
- package/dist/runtime/agents/planner-agent.js +25 -1
- package/dist/runtime/agents/planner-agent.js.map +1 -1
- package/dist/runtime/app-create-orchestrator.d.ts +2 -0
- package/dist/runtime/app-create-orchestrator.js +91 -16
- package/dist/runtime/app-create-orchestrator.js.map +1 -1
- package/dist/runtime/build-verifier.d.ts +7 -0
- package/dist/runtime/build-verifier.js +63 -0
- package/dist/runtime/build-verifier.js.map +1 -1
- package/dist/runtime/integration-verifier.d.ts +50 -0
- package/dist/runtime/integration-verifier.js +373 -0
- package/dist/runtime/integration-verifier.js.map +1 -0
- package/dist/runtime/types.d.ts +31 -2
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -18,7 +18,7 @@ const program = new Command();
|
|
|
18
18
|
program
|
|
19
19
|
.name('assay')
|
|
20
20
|
.description('Assay — AI code verification using the LUCID methodology')
|
|
21
|
-
.version('0.
|
|
21
|
+
.version('0.15.0');
|
|
22
22
|
program
|
|
23
23
|
.command('init')
|
|
24
24
|
.description('Initialize an Assay project in the current directory')
|
|
@@ -166,7 +166,7 @@ runtime
|
|
|
166
166
|
.description('Generate a verified application from a natural language description')
|
|
167
167
|
.argument('<description>', 'App description (e.g., "Invoice SaaS for freelancers")')
|
|
168
168
|
.option('--name <name>', 'Project name (auto-generated from description if omitted)')
|
|
169
|
-
.option('--framework <fw>', 'Framework: next.js, express, sveltekit', 'next.js')
|
|
169
|
+
.option('--framework <fw>', 'Framework: next.js, express, sveltekit, electron', 'next.js')
|
|
170
170
|
.option('--database <db>', 'Database: supabase, postgresql, sqlite', 'supabase')
|
|
171
171
|
.option('--language <lang>', 'Language: typescript, python', 'typescript')
|
|
172
172
|
.option('--features <list>', 'Comma-separated feature list')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACtjB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,EAAE,KAAK,CAAC;KAC/E,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;KAC/C,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;KAC3E,MAAM,CAAC,yBAAyB,EAAE,uDAAuD,CAAC;KAC1F,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,EAAE,GAAG,CAAC;KAC1E,MAAM,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;KAC3E,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;KAC3E,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,0EAA0E,CAAC;KACvF,MAAM,CAAC,0BAA0B,EAAE,0DAA0D,CAAC;KAC9F,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE7B,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,qFAAqF,CAAC;KAClG,MAAM,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;KAC3E,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,EAAE,GAAG,CAAC;KACrE,MAAM,CAAC,0BAA0B,EAAE,oCAAoC,EAAE,IAAI,CAAC;KAC9E,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;KACtD,MAAM,CAAC,wBAAwB,EAAE,qBAAqB,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,oEAAoE,CAAC;KACjF,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;KACtD,MAAM,CAAC,wBAAwB,EAAE,qBAAqB,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,0BAA0B,EAAE,2BAA2B,EAAE,GAAG,CAAC;KACpE,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,UAAU,EAAE,qCAAqC,CAAC;KAC3D,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;KACpD,MAAM,CAAC,oBAAoB,EAAE,kDAAkD,CAAC;KAChF,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,EAAE,GAAG,CAAC;KAClE,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,CAAC;KAC1E,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,gEAAgE;AAEhE,MAAM,OAAO,GAAG,OAAO;KACpB,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,+DAA+D,CAAC,CAAC;AAEhF,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;KACnD,MAAM,CAAC,mBAAmB,EAAE,YAAY,CAAC;KACzC,MAAM,CAAC,wBAAwB,EAAE,uCAAuC,CAAC;KACzE,MAAM,CAAC,2BAA2B,EAAE,oCAAoC,CAAC;KACzE,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;KAC3E,MAAM,CAAC,0BAA0B,EAAE,wBAAwB,CAAC;KAC5D,MAAM,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;KAC5D,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,4BAA4B,CAAC;KACrF,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,CAAC;KACnE,MAAM,CAAC,QAAQ,EAAE,uCAAuC,CAAC;KACzD,MAAM,CAAC,oBAAoB,EAAE,6CAA6C,EAAE,KAAK,CAAC;KAClF,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kDAAkD,CAAC;KAC/D,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,EAAE,GAAG,CAAC;KACxD,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,eAAe,EAAE,qBAAqB,EAAE,MAAM,CAAC;KACtD,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAEhC,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,eAAe,EAAE,qBAAqB,EAAE,MAAM,CAAC;KACtD,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mDAAmD,CAAC;KAChE,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,EAAE,GAAG,CAAC;KACxD,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEjC,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8DAA8D,CAAC;KAC3E,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,EAAE,GAAG,CAAC;KACxD,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iEAAiE,CAAC;KAC9E,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;KACnD,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;KACtD,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;KAC1D,MAAM,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,GAAG,CAAC;KACvD,MAAM,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,CAAC;KAChD,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wFAAwF,CAAC;KACrG,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;KACnD,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,uCAAuC,CAAC;KACjG,MAAM,CAAC,sBAAsB,EAAE,+BAA+B,EAAE,GAAG,CAAC;KACpE,MAAM,CAAC,sBAAsB,EAAE,+BAA+B,EAAE,QAAQ,CAAC;KACzE,MAAM,CAAC,oBAAoB,EAAE,8BAA8B,EAAE,IAAI,CAAC;KAClE,MAAM,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,CAAC;KAChD,MAAM,CAAC,6BAA6B,EAAE,uBAAuB,CAAC;KAC9D,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;KACtD,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;KAC1D,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;KACtD,MAAM,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;KAC9D,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAElC,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qEAAqE,CAAC;KAClF,QAAQ,CAAC,eAAe,EAAE,wDAAwD,CAAC;KACnF,MAAM,CAAC,eAAe,EAAE,2DAA2D,CAAC;KACpF,MAAM,CAAC,kBAAkB,EAAE,kDAAkD,EAAE,SAAS,CAAC;KACzF,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,EAAE,UAAU,CAAC;KAC/E,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,YAAY,CAAC;KACzE,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC3D,MAAM,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;KAC/D,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KAC5D,MAAM,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;KAC7D,MAAM,CAAC,6BAA6B,EAAE,uBAAuB,CAAC;KAC9D,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;KACtD,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;KAC1D,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;KACtD,MAAM,CAAC,cAAc,EAAE,+CAA+C,CAAC;KACvE,MAAM,CAAC,yBAAyB,EAAE,0CAA0C,EAAE,GAAG,CAAC;KAClF,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAEhC,MAAM,KAAK,GAAG,OAAO;KAClB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,yCAAyC,CAAC,CAAC;AAE1D,KAAK;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC;KACvF,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAEnC,KAAK;KACF,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACnD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC;KACvF,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;KACrE,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEtC,KAAK;KACF,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC;KACvF,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;KACrE,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAEvC,MAAM,MAAM,GAAG,OAAO;KACnB,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAExC,MAAM;KACH,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC;KACvF,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAEpC,MAAM;KACH,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,QAAQ,CAAC,aAAa,EAAE,8BAA8B,CAAC;KACvD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC;KACvF,MAAM,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,OAAO,CAAC;KAC/D,MAAM,CAAC,WAAW,EAAE,yCAAyC,CAAC;KAC9D,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAErC,MAAM;KACH,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;KAC5C,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;KACrE,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEtC,MAAM,KAAK,GAAG,OAAO;KAClB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAE5C,KAAK;KACF,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,QAAQ,CAAC,aAAa,EAAE,6BAA6B,CAAC;KACtD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC;KACvF,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEtC,KAAK;KACF,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2CAA2C,CAAC;KACxD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;KACzC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAErC,KAAK;KACF,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,yCAAyC,CAAC;KACtD,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEtC,MAAM,MAAM,GAAG,OAAO;KACnB,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC,CAAC;AAE7D,MAAM;KACH,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,eAAe,EAAE,2BAA2B,EAAE,GAAG,CAAC;KACzD,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEtC,MAAM;KACH,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,eAAe,EAAE,2BAA2B,EAAE,GAAG,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;KACrE,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAEpC,MAAM;KACH,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,0CAA0C,CAAC;KACvD,QAAQ,CAAC,aAAa,EAAE,8BAA8B,CAAC;KACvD,MAAM,CAAC,eAAe,EAAE,2BAA2B,EAAE,GAAG,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;KACrE,MAAM,CAAC,eAAe,EAAE,0CAA0C,EAAE,MAAM,CAAC;KAC3E,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAExC,MAAM;KACH,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,sCAAsC,CAAC;KACnD,QAAQ,CAAC,UAAU,EAAE,qDAAqD,CAAC;KAC3E,MAAM,CAAC,iBAAiB,EAAE,sDAAsD,EAAE,OAAO,CAAC;KAC1F,MAAM,CAAC,mBAAmB,EAAE,2EAA2E,EAAE,eAAe,CAAC;KACzH,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;KACrE,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;KACpD,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAE1C,+DAA+D;AAE/D,MAAM,GAAG,GAAG,OAAO;KAChB,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,mEAAmE,CAAC,CAAC;AAEpF,GAAG;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,CAAC;KACvD,MAAM,CAAC,iBAAiB,EAAE,4DAA4D,CAAC;KACvF,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/commands/create.js
CHANGED
|
@@ -5,19 +5,25 @@
|
|
|
5
5
|
export async function runtimeCreateCommand(description, opts) {
|
|
6
6
|
const { AppCreateOrchestrator } = await import('../runtime/app-create-orchestrator.js');
|
|
7
7
|
// Build tech stack config
|
|
8
|
+
const isElectron = (opts.framework ?? 'next.js').toLowerCase() === 'electron';
|
|
8
9
|
const techStack = {
|
|
9
10
|
language: opts.language ?? 'typescript',
|
|
10
11
|
framework: opts.framework ?? 'next.js',
|
|
11
|
-
database: opts.database ?? 'supabase',
|
|
12
|
+
database: opts.database ?? (isElectron ? 'postgresql' : 'supabase'),
|
|
12
13
|
};
|
|
13
|
-
// Build auth model if specified
|
|
14
|
+
// Build auth model if specified (skip for Electron — desktop apps don't need server-side auth)
|
|
14
15
|
let authModel;
|
|
15
16
|
if (opts.auth) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
if (isElectron) {
|
|
18
|
+
console.log(' Warning: --auth is ignored for Electron apps (desktop apps manage auth locally)');
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const methods = opts.auth.split(',').map(m => m.trim());
|
|
22
|
+
authModel = {
|
|
23
|
+
provider: techStack.database === 'supabase' ? 'supabase' : 'nextauth',
|
|
24
|
+
methods,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
21
27
|
}
|
|
22
28
|
// Build features list
|
|
23
29
|
const features = opts.features
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kDAAkD;AAClD,wEAAwE;AACxE,+DAA+D;AA4B/D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,IAA0B;IAE1B,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAExF,0BAA0B;IAC1B,MAAM,SAAS,GAAoB;QACjC,QAAQ,EAAG,IAAI,CAAC,QAAwC,IAAI,YAAY;QACxE,SAAS,EAAG,IAAI,CAAC,SAA0C,IAAI,SAAS;QACxE,QAAQ,EAAG,IAAI,CAAC,QAAwC,IAAI,UAAU;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration Verifier Tests — run against the real postico-clone/ directory.
|
|
3
|
+
*
|
|
4
|
+
* These tests prove the verifier catches known bugs in a real broken application.
|
|
5
|
+
* If all tests pass, the verifier works. If any fail, it's hallucinated.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx tsx src/runtime/__tests__/integration-verifier.test.ts
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration Verifier Tests — run against the real postico-clone/ directory.
|
|
3
|
+
*
|
|
4
|
+
* These tests prove the verifier catches known bugs in a real broken application.
|
|
5
|
+
* If all tests pass, the verifier works. If any fail, it's hallucinated.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx tsx src/runtime/__tests__/integration-verifier.test.ts
|
|
8
|
+
*/
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { IntegrationVerifier } from '../integration-verifier.js';
|
|
11
|
+
// ── Test Infrastructure ─────────────────────────────────────
|
|
12
|
+
let passed = 0;
|
|
13
|
+
let failed = 0;
|
|
14
|
+
const failures = [];
|
|
15
|
+
function assert(condition, message) {
|
|
16
|
+
if (condition) {
|
|
17
|
+
passed++;
|
|
18
|
+
console.log(` ✓ ${message}`);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
failed++;
|
|
22
|
+
failures.push(message);
|
|
23
|
+
console.log(` ✗ ${message}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function assertGreaterOrEqual(actual, expected, message) {
|
|
27
|
+
assert(actual >= expected, `${message} (expected >= ${expected}, got ${actual})`);
|
|
28
|
+
}
|
|
29
|
+
function assertEqual(actual, expected, message) {
|
|
30
|
+
assert(actual === expected, `${message} (expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)})`);
|
|
31
|
+
}
|
|
32
|
+
// ── Test Suite ───────────────────────────────────────────────
|
|
33
|
+
async function runTests() {
|
|
34
|
+
// The postico-clone is at the project root alongside src/
|
|
35
|
+
const projectRoot = join(import.meta.dirname, '..', '..', '..');
|
|
36
|
+
const posticoPath = join(projectRoot, 'postico-clone');
|
|
37
|
+
console.log(`\nRunning IntegrationVerifier against: ${posticoPath}\n`);
|
|
38
|
+
const verifier = new IntegrationVerifier(posticoPath, 'electron');
|
|
39
|
+
const result = await verifier.verify();
|
|
40
|
+
console.log(`Total checks: ${result.checks.length}`);
|
|
41
|
+
console.log(`Passed: ${result.passedCount}, Failed: ${result.failedCount}`);
|
|
42
|
+
console.log(`Overall verdict: ${result.verdict}\n`);
|
|
43
|
+
// ── Test 1: Detects missing Router provider ──────────────
|
|
44
|
+
console.log('Test 1: Detects missing Router provider');
|
|
45
|
+
const routingChecks = result.checks.filter(c => c.type === 'routing_provider');
|
|
46
|
+
assertGreaterOrEqual(routingChecks.length, 1, 'Should have at least 1 routing check');
|
|
47
|
+
const routingFails = routingChecks.filter(c => c.verdict === 'FAIL');
|
|
48
|
+
assertGreaterOrEqual(routingFails.length, 1, 'Should FAIL on routing_provider (no Router wraps components using hooks)');
|
|
49
|
+
if (routingFails.length > 0) {
|
|
50
|
+
assert(routingFails[0].evidence.includes('useNavigate') || routingFails[0].evidence.includes('router hooks') || routingFails[0].evidence.includes('react-router'), 'Evidence should mention router hooks or useNavigate');
|
|
51
|
+
}
|
|
52
|
+
console.log('');
|
|
53
|
+
// ── Test 2: Detects missing IPC handlers ─────────────────
|
|
54
|
+
console.log('Test 2: Detects missing IPC handlers (table:data:*)');
|
|
55
|
+
const ipcChecks = result.checks.filter(c => c.type === 'ipc_handler_coverage');
|
|
56
|
+
assert(ipcChecks.length > 0, 'Should have IPC handler checks');
|
|
57
|
+
// The table:data:* channels are invoked in preload but NOT handled in main
|
|
58
|
+
const missingTableChannels = ipcChecks.filter(c => c.verdict === 'FAIL' && c.evidence.includes('table:data:'));
|
|
59
|
+
assertGreaterOrEqual(missingTableChannels.length, 4, 'Should detect 4 missing table:data:* handlers (fetch, insert, update, delete)');
|
|
60
|
+
// Connection and query channels SHOULD pass (they have handlers)
|
|
61
|
+
const handledChannels = ipcChecks.filter(c => c.verdict === 'PASS');
|
|
62
|
+
assert(handledChannels.length > 0, 'Some IPC channels should PASS (connection:*, query:*, history:*)');
|
|
63
|
+
console.log('');
|
|
64
|
+
// ── Test 3: Detects stub functions ───────────────────────
|
|
65
|
+
console.log('Test 3: Detects stub functions (connect, disconnect)');
|
|
66
|
+
const stubChecks = result.checks.filter(c => c.type === 'stub_function');
|
|
67
|
+
assertGreaterOrEqual(stubChecks.length, 2, 'Should detect at least 2 stub functions');
|
|
68
|
+
const stubFails = stubChecks.filter(c => c.verdict === 'FAIL');
|
|
69
|
+
assertGreaterOrEqual(stubFails.length, 2, 'Should FAIL on at least 2 stubs (connect and disconnect)');
|
|
70
|
+
// Check that the evidence mentions the stub functions
|
|
71
|
+
const stubNames = stubFails.map(c => c.evidence.toLowerCase());
|
|
72
|
+
assert(stubNames.some(e => e.includes('connect')), 'Should detect connect as a stub');
|
|
73
|
+
assert(stubNames.some(e => e.includes('disconnect')), 'Should detect disconnect as a stub');
|
|
74
|
+
console.log('');
|
|
75
|
+
// ── Test 4: Detects unreachable pages ────────────────────
|
|
76
|
+
console.log('Test 4: Detects unreachable pages');
|
|
77
|
+
const pageChecks = result.checks.filter(c => c.type === 'unreachable_page');
|
|
78
|
+
assert(pageChecks.length > 0, 'Should have page reachability checks');
|
|
79
|
+
const unreachablePages = pageChecks.filter(c => c.verdict === 'FAIL');
|
|
80
|
+
assertGreaterOrEqual(unreachablePages.length, 3, 'Should detect 3 unreachable pages (ConnectionListPage, ConnectionFormPage, TableDataPage)');
|
|
81
|
+
const unreachableNames = unreachablePages.map(c => c.evidence);
|
|
82
|
+
assert(unreachableNames.some(e => e.includes('ConnectionListPage')), 'ConnectionListPage should be unreachable');
|
|
83
|
+
assert(unreachableNames.some(e => e.includes('ConnectionFormPage')), 'ConnectionFormPage should be unreachable');
|
|
84
|
+
assert(unreachableNames.some(e => e.includes('TableDataPage')), 'TableDataPage should be unreachable');
|
|
85
|
+
// WorkspacePage IS reachable (imported by App.tsx)
|
|
86
|
+
const reachablePages = pageChecks.filter(c => c.verdict === 'PASS');
|
|
87
|
+
assert(reachablePages.some(e => e.evidence.includes('WorkspacePage')), 'WorkspacePage should be reachable (imported by App.tsx)');
|
|
88
|
+
console.log('');
|
|
89
|
+
// ── Test 5: Overall verdict is FAIL ──────────────────────
|
|
90
|
+
console.log('Test 5: Overall verdict');
|
|
91
|
+
assertEqual(result.verdict, 'FAIL', 'Overall verdict should be FAIL for the broken postico-clone');
|
|
92
|
+
assert(result.failedCount > 0, 'Failed count should be > 0');
|
|
93
|
+
assertEqual(result.framework, 'electron', 'Framework should be electron');
|
|
94
|
+
console.log('');
|
|
95
|
+
// ── Summary ──────────────────────────────────────────────
|
|
96
|
+
console.log('════════════════════════════════════════════════════');
|
|
97
|
+
console.log(` RESULTS: ${passed} passed, ${failed} failed`);
|
|
98
|
+
if (failures.length > 0) {
|
|
99
|
+
console.log(`\n FAILURES:`);
|
|
100
|
+
for (const f of failures) {
|
|
101
|
+
console.log(` ✗ ${f}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
console.log('════════════════════════════════════════════════════');
|
|
105
|
+
// ── Detailed check output ────────────────────────────────
|
|
106
|
+
console.log('\n── All checks detail ──');
|
|
107
|
+
for (const check of result.checks) {
|
|
108
|
+
const icon = check.verdict === 'PASS' ? '✓' : '✗';
|
|
109
|
+
console.log(` ${icon} [${check.type}] ${check.verdict}: ${check.evidence.slice(0, 120)}`);
|
|
110
|
+
}
|
|
111
|
+
console.log('');
|
|
112
|
+
if (failed > 0) {
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
runTests().catch(err => {
|
|
117
|
+
console.error('Test runner crashed:', err);
|
|
118
|
+
process.exit(2);
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=integration-verifier.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-verifier.test.js","sourceRoot":"","sources":["../../../src/runtime/__tests__/integration-verifier.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -105,11 +105,34 @@ Respond with JSON:
|
|
|
105
105
|
"Every feature references its schema entities and API routes"
|
|
106
106
|
]
|
|
107
107
|
}`;
|
|
108
|
+
// Append Electron-specific guidance when framework is electron
|
|
109
|
+
const isElectron = task.constraints.some(c => /framework:\s*electron/i.test(c));
|
|
110
|
+
const electronAddendum = isElectron ? `
|
|
111
|
+
|
|
112
|
+
ELECTRON-SPECIFIC INSTRUCTIONS (MANDATORY):
|
|
113
|
+
- This is an Electron desktop application, NOT a web app.
|
|
114
|
+
- Use "ipcChannels" instead of "apiRoutes". The "apiRoutes" array MUST be empty.
|
|
115
|
+
- Each IPC channel has: channel (e.g. "db:query"), direction ("renderer-to-main"|"main-to-renderer"|"bidirectional"), description, requestType, responseType, featureId.
|
|
116
|
+
- Plan the directory structure as:
|
|
117
|
+
src/main/ — Main process (Node.js): app lifecycle, IPC handlers, database connections (pg library)
|
|
118
|
+
src/preload/ — contextBridge exposing typed APIs to renderer process
|
|
119
|
+
src/renderer/ — React UI (Vite-bundled): pages, components, App.tsx
|
|
120
|
+
- Omit "authPlan" entirely — desktop apps do not need server-side auth.
|
|
121
|
+
- Use "electron-vite" as the build tool. Set deployConfig.platform to "electron".
|
|
122
|
+
- The renderer process CANNOT access Node.js APIs directly — all Node.js work goes through IPC.
|
|
123
|
+
- Features should reference their IPC channels in the "ipcChannels" array (channel names).
|
|
124
|
+
- Include ipcChannels in your JSON response alongside schema, pages, and features.
|
|
125
|
+
|
|
126
|
+
Example ipcChannels:
|
|
127
|
+
"ipcChannels": [
|
|
128
|
+
{ "channel": "db:query", "direction": "renderer-to-main", "description": "Execute SQL query", "requestType": "{ sql: string, params?: unknown[] }", "responseType": "{ rows: unknown[], fields: string[] }", "featureId": "query-editor" }
|
|
129
|
+
]
|
|
130
|
+
` : '';
|
|
108
131
|
const userPrompt = `TASK: ${task.goal}
|
|
109
132
|
|
|
110
133
|
CONSTRAINTS:
|
|
111
134
|
${task.constraints.map(c => `- ${c}`).join('\n')}
|
|
112
|
-
|
|
135
|
+
${electronAddendum}
|
|
113
136
|
CONTEXT:
|
|
114
137
|
${contextSnippets || 'No additional context provided.'}
|
|
115
138
|
|
|
@@ -147,6 +170,7 @@ Design the complete architecture now. Remember to state your claims explicitly.`
|
|
|
147
170
|
apiRoutes: Array.isArray(parsed.apiRoutes) ? parsed.apiRoutes : [],
|
|
148
171
|
pages: Array.isArray(parsed.pages) ? parsed.pages : [],
|
|
149
172
|
features: Array.isArray(parsed.features) ? parsed.features : [],
|
|
173
|
+
ipcChannels: Array.isArray(parsed.ipcChannels) ? parsed.ipcChannels : [],
|
|
150
174
|
dependencyOrder: Array.isArray(parsed.dependencyOrder) ? parsed.dependencyOrder : [],
|
|
151
175
|
authPlan: parsed.authPlan ?? null,
|
|
152
176
|
deployConfig: parsed.deployConfig ?? null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/planner-agent.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mDAAmD;AACnD,6DAA6D;AAC7D,iEAAiE;AACjE,+DAA+D;AAE/D,OAAO,EACL,gBAAgB,GAGjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,OAAO,YAAa,SAAQ,gBAAgB;IAChD,YAAY,UAAsB,EAAE,IAAyB;QAC3D,KAAK,CACH,eAAe,EACf,SAAS,EACT;YACE,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,sCAAsC,EAAE,KAAK,EAAE,EAAE,EAAE;YAC/F,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,wCAAwC,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3F,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,+DAA+D,EAAE,KAAK,EAAE,EAAE,EAAE;SAC3H,EACD,UAAU,EACV,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,CAClD,CAAC;IACJ,CAAC;IAES,SAAS,CAAC,QAAsB;QACxC,8DAA8D;IAChE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAA2B;QAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW;aACrC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;aAC3D,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqFvB,CAAC;QAEC,MAAM,UAAU,GAAG,SAAS,IAAI,CAAC,IAAI;;;EAGvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"planner-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/planner-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,8 @@ export declare class AppCreateOrchestrator extends EventEmitter {
|
|
|
55
55
|
private slugify;
|
|
56
56
|
/** Get framework-specific directory convention instruction for agent prompts. */
|
|
57
57
|
private getDirectoryConvention;
|
|
58
|
+
/** Map an IPC channel name to its expected handler file path. e.g. "db:query" -> "src/main/ipc/db.ts" */
|
|
59
|
+
private ipcChannelToFilePath;
|
|
58
60
|
private routeToFilePath;
|
|
59
61
|
private pageToFilePath;
|
|
60
62
|
private fileExists;
|
|
@@ -13,6 +13,7 @@ import { MessageBus } from './message-bus.js';
|
|
|
13
13
|
import { CompositionVerifier } from './composition-verifier.js';
|
|
14
14
|
import { MultiAgentLoop } from './multi-agent-loop.js';
|
|
15
15
|
import { BuildVerifier } from './build-verifier.js';
|
|
16
|
+
import { IntegrationVerifier } from './integration-verifier.js';
|
|
16
17
|
// ── Default safety policy ───────────────────────────────────
|
|
17
18
|
const DEFAULT_SAFETY = {
|
|
18
19
|
formalOverridesConsensus: true,
|
|
@@ -50,14 +51,14 @@ export class AppCreateOrchestrator extends EventEmitter {
|
|
|
50
51
|
const plan = await this.runPlanningPhase(projectPath);
|
|
51
52
|
if (!plan) {
|
|
52
53
|
this.emitPhase({ phase: 'failed', reason: 'Planning failed after retries' });
|
|
53
|
-
return this.makeResult('failed', projectPath, null, [], null, null);
|
|
54
|
+
return this.makeResult('failed', projectPath, null, [], null, null, null);
|
|
54
55
|
}
|
|
55
56
|
// Phase: verifying_plan
|
|
56
57
|
this.emitPhase({ phase: 'verifying_plan' });
|
|
57
58
|
const planValid = this.verifyPlanStructure(plan);
|
|
58
59
|
if (!planValid) {
|
|
59
60
|
this.emitPhase({ phase: 'failed', reason: 'Plan verification failed — invalid structure' });
|
|
60
|
-
return this.makeResult('failed', projectPath, plan, [], null, null);
|
|
61
|
+
return this.makeResult('failed', projectPath, plan, [], null, null, null);
|
|
61
62
|
}
|
|
62
63
|
this.audit('verification_completed', {
|
|
63
64
|
phase: 'verifying_plan',
|
|
@@ -177,6 +178,7 @@ export class AppCreateOrchestrator extends EventEmitter {
|
|
|
177
178
|
maxRepairAttempts: maxAttempts,
|
|
178
179
|
codeModel: this.options.models?.code,
|
|
179
180
|
onReconcileDeps: () => this.reconcileDependencies(projectPath),
|
|
181
|
+
framework: this.description.techStack.framework,
|
|
180
182
|
});
|
|
181
183
|
buildVerification = await buildVerifier.verify();
|
|
182
184
|
this.audit('verification_completed', {
|
|
@@ -191,6 +193,19 @@ export class AppCreateOrchestrator extends EventEmitter {
|
|
|
191
193
|
totalDurationMs: buildVerification.totalDurationMs,
|
|
192
194
|
});
|
|
193
195
|
}
|
|
196
|
+
// Phase: integration verifying
|
|
197
|
+
let integrationVerification = null;
|
|
198
|
+
if (!this.options.skipBuildVerification) {
|
|
199
|
+
this.emitPhase({ phase: 'integration_verifying' });
|
|
200
|
+
const integrationVerifier = new IntegrationVerifier(projectPath, this.description.techStack.framework);
|
|
201
|
+
integrationVerification = await integrationVerifier.verify();
|
|
202
|
+
this.audit('verification_completed', {
|
|
203
|
+
phase: 'integration_verifying',
|
|
204
|
+
passed: integrationVerification.passedCount,
|
|
205
|
+
failed: integrationVerification.failedCount,
|
|
206
|
+
verdict: integrationVerification.verdict,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
194
209
|
// Phase: cross-verifying
|
|
195
210
|
this.emitPhase({ phase: 'cross_verifying' });
|
|
196
211
|
const crossVerification = await this.runCrossVerification(projectPath, plan);
|
|
@@ -204,9 +219,10 @@ export class AppCreateOrchestrator extends EventEmitter {
|
|
|
204
219
|
const allCompleted = featureResults.every(r => r.status === 'completed');
|
|
205
220
|
const anyCompleted = featureResults.some(r => r.status === 'completed');
|
|
206
221
|
const buildOk = !buildVerification || buildVerification.status === 'pass' || buildVerification.status === 'repaired' || buildVerification.status === 'skipped';
|
|
207
|
-
const
|
|
222
|
+
const integrationOk = !integrationVerification || integrationVerification.verdict === 'PASS';
|
|
223
|
+
const finalStatus = allCompleted && buildOk && integrationOk ? 'completed' : anyCompleted ? 'partial' : 'failed';
|
|
208
224
|
this.emitPhase({ phase: 'completed' });
|
|
209
|
-
return this.makeResult(finalStatus, projectPath, plan, featureResults, buildVerification, crossVerification);
|
|
225
|
+
return this.makeResult(finalStatus, projectPath, plan, featureResults, buildVerification, integrationVerification, crossVerification);
|
|
210
226
|
}
|
|
211
227
|
// ── Planning Phase ─────────────────────────────────────────
|
|
212
228
|
async runPlanningPhase(projectPath) {
|
|
@@ -450,7 +466,20 @@ Include a .env.local file with placeholder values for all required environment v
|
|
|
450
466
|
evidence: found ? `Found in project files` : `Not found in schema/migration files`,
|
|
451
467
|
});
|
|
452
468
|
}
|
|
453
|
-
// Check 4:
|
|
469
|
+
// Check 4: IPC channel handlers exist (Electron only)
|
|
470
|
+
if (this.description.techStack.framework.toLowerCase() === 'electron' && plan.ipcChannels) {
|
|
471
|
+
for (const channel of plan.ipcChannels) {
|
|
472
|
+
const expectedPath = this.ipcChannelToFilePath(channel.channel);
|
|
473
|
+
const exists = await this.fileExists(join(projectPath, expectedPath));
|
|
474
|
+
checks.push({
|
|
475
|
+
type: 'ipc_channel_exists',
|
|
476
|
+
description: `IPC channel "${channel.channel}" has handler at ${expectedPath}`,
|
|
477
|
+
verdict: exists ? 'PASS' : 'FAIL',
|
|
478
|
+
evidence: exists ? `File exists: ${expectedPath}` : `Missing: ${expectedPath}`,
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
// Check 5: Dependency consistency — features that depend on others were built after them
|
|
454
483
|
for (const feature of plan.features) {
|
|
455
484
|
for (const dep of feature.dependsOn) {
|
|
456
485
|
const depIndex = plan.dependencyOrder.indexOf(dep);
|
|
@@ -622,19 +651,40 @@ Include a .env.local file with placeholder values for all required environment v
|
|
|
622
651
|
// ── Feature Goal Builder ─────────────────────────────────
|
|
623
652
|
/** Build the goal string for a feature (shared between buildFeature and buildFeatureDirect). */
|
|
624
653
|
buildFeatureGoal(plan, feature, completedFeatures) {
|
|
654
|
+
const isElectron = this.description.techStack.framework.toLowerCase() === 'electron';
|
|
625
655
|
const relevantSchema = plan.schema
|
|
626
656
|
.filter(e => feature.schemaEntities.includes(e.name))
|
|
627
657
|
.map(e => `${e.name}: ${e.fields.map(f => `${f.name}:${f.type}`).join(', ')}`)
|
|
628
658
|
.join('\n');
|
|
629
|
-
const relevantRoutes = plan.apiRoutes
|
|
630
|
-
.filter(r => r.featureId === feature.id)
|
|
631
|
-
.map(r => `${r.method} ${r.path} — ${r.description}`)
|
|
632
|
-
.join('\n');
|
|
633
659
|
const relevantPages = plan.pages
|
|
634
660
|
.filter(p => p.featureId === feature.id)
|
|
635
661
|
.map(p => `${p.path} — ${p.component}: ${p.description ?? ''}`)
|
|
636
662
|
.join('\n');
|
|
637
663
|
const dirConvention = this.getDirectoryConvention();
|
|
664
|
+
// For Electron, use IPC channels instead of API routes
|
|
665
|
+
let routeSection;
|
|
666
|
+
if (isElectron) {
|
|
667
|
+
const relevantChannels = (plan.ipcChannels ?? [])
|
|
668
|
+
.filter(ch => ch.featureId === feature.id)
|
|
669
|
+
.map(ch => `${ch.channel} (${ch.direction}) — ${ch.description}`)
|
|
670
|
+
.join('\n');
|
|
671
|
+
routeSection = `IPC channels to implement:
|
|
672
|
+
${relevantChannels || 'None'}`;
|
|
673
|
+
}
|
|
674
|
+
else {
|
|
675
|
+
const relevantRoutes = plan.apiRoutes
|
|
676
|
+
.filter(r => r.featureId === feature.id)
|
|
677
|
+
.map(r => `${r.method} ${r.path} — ${r.description}`)
|
|
678
|
+
.join('\n');
|
|
679
|
+
routeSection = `API routes to implement:
|
|
680
|
+
${relevantRoutes || 'None'}`;
|
|
681
|
+
}
|
|
682
|
+
const stackDesc = isElectron
|
|
683
|
+
? `Electron + React + Vite (electron-vite), pg for PostgreSQL, ${this.description.techStack.language}`
|
|
684
|
+
: `${this.description.techStack.framework}, ${this.description.techStack.database}, ${this.description.techStack.language}`;
|
|
685
|
+
const importNote = isElectron
|
|
686
|
+
? `IMPORTANT: If you import any npm packages not in the standard Electron/React stack, include a file "package.additions.json" listing them: { "dependencies": { "package-name": "latest" } }`
|
|
687
|
+
: `IMPORTANT: If you import any npm packages not in the standard Next.js/React stack, include a file "package.additions.json" listing them: { "dependencies": { "package-name": "latest" } }`;
|
|
638
688
|
return `Implement feature: ${feature.name}
|
|
639
689
|
|
|
640
690
|
Feature description: Build the "${feature.name}" feature for a ${this.description.techStack.framework} application.
|
|
@@ -644,18 +694,17 @@ ${dirConvention}
|
|
|
644
694
|
Schema entities:
|
|
645
695
|
${relevantSchema || 'None'}
|
|
646
696
|
|
|
647
|
-
|
|
648
|
-
${relevantRoutes || 'None'}
|
|
697
|
+
${routeSection}
|
|
649
698
|
|
|
650
699
|
Pages to implement:
|
|
651
700
|
${relevantPages || 'None'}
|
|
652
701
|
|
|
653
|
-
Tech stack: ${
|
|
702
|
+
Tech stack: ${stackDesc}
|
|
654
703
|
|
|
655
704
|
Previously completed features: ${completedFeatures.join(', ') || 'None'}
|
|
656
705
|
|
|
657
|
-
Implement all API routes, pages, and business logic for this feature. Write complete, working code — no TODOs or stubs.
|
|
658
|
-
|
|
706
|
+
Implement all ${isElectron ? 'IPC handlers' : 'API routes'}, pages, and business logic for this feature. Write complete, working code — no TODOs or stubs.
|
|
707
|
+
${importNote}`;
|
|
659
708
|
}
|
|
660
709
|
// ── Post-Build: Dependency Reconciliation ─────────────────
|
|
661
710
|
/**
|
|
@@ -720,7 +769,7 @@ IMPORTANT: If you import any npm packages not in the standard Next.js/React stac
|
|
|
720
769
|
'node:events', 'node:fs', 'node:path', 'node:crypto', 'node:url', 'node:http', 'node:https',
|
|
721
770
|
'node:stream', 'node:util', 'node:os', 'node:child_process', 'node:buffer', 'node:assert',
|
|
722
771
|
'events', 'fs', 'path', 'crypto', 'url', 'http', 'https', 'stream', 'util', 'os',
|
|
723
|
-
'child_process', 'buffer', 'assert', 'fs/promises', 'react', 'react-dom', 'next',
|
|
772
|
+
'child_process', 'buffer', 'assert', 'fs/promises', 'react', 'react-dom', 'next', 'electron',
|
|
724
773
|
]);
|
|
725
774
|
// Add missing packages
|
|
726
775
|
let changed = false;
|
|
@@ -822,13 +871,14 @@ IMPORTANT: If you import any npm packages not in the standard Next.js/React stac
|
|
|
822
871
|
};
|
|
823
872
|
this.emit('progress', progress);
|
|
824
873
|
}
|
|
825
|
-
makeResult(status, projectPath, plan, featureResults, buildVerification, crossVerification) {
|
|
874
|
+
makeResult(status, projectPath, plan, featureResults, buildVerification, integrationVerification, crossVerification) {
|
|
826
875
|
return {
|
|
827
876
|
status,
|
|
828
877
|
projectPath,
|
|
829
878
|
plan,
|
|
830
879
|
featureResults,
|
|
831
880
|
buildVerification,
|
|
881
|
+
integrationVerification,
|
|
832
882
|
crossVerification,
|
|
833
883
|
totalDurationMs: Date.now() - this.startTime,
|
|
834
884
|
auditTrail: this.auditTrail,
|
|
@@ -861,13 +911,31 @@ IMPORTANT: If you import any npm packages not in the standard Next.js/React stac
|
|
|
861
911
|
if (fw.includes('svelte')) {
|
|
862
912
|
return `DIRECTORY CONVENTION (MANDATORY): Use "src/routes/" for pages and "src/lib/" for shared code.`;
|
|
863
913
|
}
|
|
914
|
+
if (fw.includes('electron')) {
|
|
915
|
+
return `DIRECTORY CONVENTION (MANDATORY — Electron):
|
|
916
|
+
src/main/ — Main process (Node.js): app lifecycle, IPC handlers, pg database connections
|
|
917
|
+
src/preload/ — contextBridge exposing typed APIs to renderer (preload.ts)
|
|
918
|
+
src/renderer/ — React UI (Vite-bundled): pages, components, App.tsx
|
|
919
|
+
Use electron-vite for build tooling. All Node.js work (database, filesystem) goes through IPC handlers in src/main/.
|
|
920
|
+
The renderer process communicates with main via contextBridge APIs exposed in src/preload/.`;
|
|
921
|
+
}
|
|
864
922
|
return `DIRECTORY CONVENTION: Use "src/" as the source root.`;
|
|
865
923
|
}
|
|
924
|
+
/** Map an IPC channel name to its expected handler file path. e.g. "db:query" -> "src/main/ipc/db.ts" */
|
|
925
|
+
ipcChannelToFilePath(channel) {
|
|
926
|
+
const namespace = channel.split(':')[0] ?? channel;
|
|
927
|
+
return `src/main/ipc/${namespace}.ts`;
|
|
928
|
+
}
|
|
866
929
|
routeToFilePath(routePath, framework) {
|
|
867
930
|
if (framework.toLowerCase().includes('next')) {
|
|
868
931
|
// /api/users -> app/api/users/route.ts
|
|
869
932
|
return `app${routePath}/route.ts`;
|
|
870
933
|
}
|
|
934
|
+
if (framework.toLowerCase().includes('electron')) {
|
|
935
|
+
// Electron doesn't have HTTP routes — map to IPC handler files
|
|
936
|
+
const parts = routePath.replace(/^\/api/, '').replace(/^\//, '');
|
|
937
|
+
return `src/main/ipc/${parts || 'index'}.ts`;
|
|
938
|
+
}
|
|
871
939
|
// Express or similar: src/routes/<path>.ts
|
|
872
940
|
const parts = routePath.replace(/^\/api/, '').replace(/^\//, '');
|
|
873
941
|
return `src/routes/${parts || 'index'}.ts`;
|
|
@@ -882,6 +950,13 @@ IMPORTANT: If you import any npm packages not in the standard Next.js/React stac
|
|
|
882
950
|
const normalized = pagePath === '/' ? '' : pagePath;
|
|
883
951
|
return `src/routes${normalized}/+page.svelte`;
|
|
884
952
|
}
|
|
953
|
+
if (framework.toLowerCase().includes('electron')) {
|
|
954
|
+
// Electron renderer pages: /query-editor -> src/renderer/pages/QueryEditor.tsx
|
|
955
|
+
if (pagePath === '/' || pagePath === '')
|
|
956
|
+
return 'src/renderer/App.tsx';
|
|
957
|
+
const name = pagePath.replace(/^\//, '').split('/').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('');
|
|
958
|
+
return `src/renderer/pages/${name}.tsx`;
|
|
959
|
+
}
|
|
885
960
|
// Generic: src/pages/<path>.tsx
|
|
886
961
|
const normalized = pagePath === '/' ? '/index' : pagePath;
|
|
887
962
|
return `src/pages${normalized}.tsx`;
|