@opengroundplan/core 0.1.1 → 0.2.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 (64) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-runtime.d.ts +81 -0
  3. package/dist/agent-runtime.js +108 -0
  4. package/dist/agent-runtime.js.map +1 -0
  5. package/dist/analysis.d.ts +36 -0
  6. package/dist/analysis.js +106 -0
  7. package/dist/analysis.js.map +1 -0
  8. package/dist/analyze.d.ts +26 -0
  9. package/dist/analyze.js +155 -0
  10. package/dist/analyze.js.map +1 -0
  11. package/dist/assessment.d.ts +39 -0
  12. package/dist/assessment.js +81 -0
  13. package/dist/assessment.js.map +1 -0
  14. package/dist/autoplan.d.ts +60 -0
  15. package/dist/autoplan.js +219 -0
  16. package/dist/autoplan.js.map +1 -0
  17. package/dist/blueprint.d.ts +102 -0
  18. package/dist/blueprint.js +490 -0
  19. package/dist/blueprint.js.map +1 -0
  20. package/dist/config.d.ts +11 -0
  21. package/dist/config.js +18 -0
  22. package/dist/config.js.map +1 -1
  23. package/dist/graph.d.ts +20 -0
  24. package/dist/graph.js +84 -0
  25. package/dist/graph.js.map +1 -0
  26. package/dist/improve.d.ts +20 -0
  27. package/dist/improve.js +50 -0
  28. package/dist/improve.js.map +1 -0
  29. package/dist/index.d.ts +15 -0
  30. package/dist/index.js +15 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/infer-llm.d.ts +29 -0
  33. package/dist/infer-llm.js +114 -0
  34. package/dist/infer-llm.js.map +1 -0
  35. package/dist/intent.js +24 -1
  36. package/dist/intent.js.map +1 -1
  37. package/dist/knowledge.d.ts +23 -0
  38. package/dist/knowledge.js +61 -0
  39. package/dist/knowledge.js.map +1 -0
  40. package/dist/library.d.ts +25 -0
  41. package/dist/library.js +89 -0
  42. package/dist/library.js.map +1 -0
  43. package/dist/loader.js +23 -5
  44. package/dist/loader.js.map +1 -1
  45. package/dist/pipeline.d.ts +25 -0
  46. package/dist/pipeline.js +37 -0
  47. package/dist/pipeline.js.map +1 -0
  48. package/dist/schema.d.ts +113 -113
  49. package/dist/simulate.d.ts +15 -0
  50. package/dist/simulate.js +89 -0
  51. package/dist/simulate.js.map +1 -0
  52. package/dist/variables.d.ts +7 -0
  53. package/dist/variables.js +37 -0
  54. package/dist/variables.js.map +1 -0
  55. package/dist/verification.d.ts +23 -0
  56. package/dist/verification.js +61 -0
  57. package/dist/verification.js.map +1 -0
  58. package/package.json +7 -4
  59. package/templates/bases/fastapi-service/blueprint.yaml +2 -3
  60. package/templates/layers/auth-jwt/blueprint.yaml +3 -0
  61. package/templates/layers/auth-oidc/blueprint.yaml +1 -0
  62. package/templates/layers/db-mongo/blueprint.yaml +1 -0
  63. package/templates/layers/db-postgres/blueprint.yaml +3 -0
  64. package/templates/layers/db-sqlite/blueprint.yaml +1 -0
package/dist/graph.js ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * The engineering knowledge graph — the second-order needs a capability drags in. Choosing
3
+ * "payments" is really choosing webhooks, and webhooks mean retries, and retries mean idempotency,
4
+ * and money movement means an audit trail. Groundplan reasons through that chain deterministically
5
+ * here, rather than hoping a model remembers it, and surfaces the implied work before it bites.
6
+ */
7
+ /** capability → the capabilities it structurally requires. A DAG walked transitively. */
8
+ export const CAPABILITY_GRAPH = {
9
+ payments: ['webhooks', 'idempotency', 'audit-logging', 'reconciliation'],
10
+ webhooks: ['retry-strategy', 'idempotency', 'signature-verification'],
11
+ 'retry-strategy': ['idempotency', 'dead-letter-queue'],
12
+ idempotency: ['audit-logging'],
13
+ 'audit-logging': ['monitoring'],
14
+ 'multi-tenancy': ['authorization', 'audit-logging', 'data-isolation'],
15
+ authentication: ['authorization', 'session-management'],
16
+ authorization: ['audit-logging'],
17
+ realtime: ['websockets', 'presence', 'backpressure', 'monitoring'],
18
+ 'file-uploads': ['object-storage', 'virus-scanning', 'cdn'],
19
+ search: ['indexing', 'caching'],
20
+ ledger: ['idempotency', 'audit-logging', 'reconciliation'],
21
+ notifications: ['queue', 'retry-strategy'],
22
+ queue: ['dead-letter-queue', 'monitoring'],
23
+ };
24
+ /** Terms in an idea that seed a capability into the graph walk. */
25
+ const SEEDS = [
26
+ { patterns: /\b(payment|billing|checkout|payout|subscription)/, capability: 'payments' },
27
+ { patterns: /\b(multi[- ]?tenant|saas|workspace)/, capability: 'multi-tenancy' },
28
+ { patterns: /\b(realtime|real[- ]time|live|streaming|chat|collaborativ)/, capability: 'realtime' },
29
+ { patterns: /\b(upload|file|image|media|attachment)/, capability: 'file-uploads' },
30
+ { patterns: /\b(search|discovery|listings|catalog)/, capability: 'search' },
31
+ { patterns: /\b(ledger|wallet|trading|banking|accounting)/, capability: 'ledger' },
32
+ { patterns: /\b(login|auth|account|sign[- ]?in|user)/, capability: 'authentication' },
33
+ { patterns: /\b(notification|email|webhook|alert)/, capability: 'notifications' },
34
+ ];
35
+ /** Seed capabilities from an idea's text. */
36
+ export function seedCapabilities(idea) {
37
+ const text = idea.toLowerCase();
38
+ return [...new Set(SEEDS.filter((s) => s.patterns.test(text)).map((s) => s.capability))];
39
+ }
40
+ /** Transitive closure of the graph from the seeds — every implied capability, with what pulled it in. */
41
+ export function expandCapabilities(seeds) {
42
+ const seen = new Set();
43
+ const out = [];
44
+ const queue = seeds.map((c) => ({ capability: c, via: null, depth: 0 }));
45
+ while (queue.length) {
46
+ const node = queue.shift();
47
+ if (seen.has(node.capability))
48
+ continue;
49
+ seen.add(node.capability);
50
+ out.push(node);
51
+ for (const dep of CAPABILITY_GRAPH[node.capability] ?? []) {
52
+ if (!seen.has(dep))
53
+ queue.push({ capability: dep, via: node.capability, depth: node.depth + 1 });
54
+ }
55
+ }
56
+ return out;
57
+ }
58
+ /** Render the reasoning: seeds and the chain of implied capabilities each drags in. */
59
+ export function renderGraph(idea) {
60
+ const seeds = seedCapabilities(idea);
61
+ if (seeds.length === 0) {
62
+ return `# Knowledge graph\n\nNo second-order capabilities inferred from the description.\n`;
63
+ }
64
+ const nodes = expandCapabilities(seeds);
65
+ const implied = nodes.filter((n) => n.via !== null);
66
+ return [
67
+ `# Knowledge graph`,
68
+ ``,
69
+ `The capabilities the description implies, and the second-order work each one drags in —`,
70
+ `reasoned through the dependency graph, not guessed.`,
71
+ ``,
72
+ `## Seeds`,
73
+ ``,
74
+ ...seeds.map((s) => `- ${s}`),
75
+ ``,
76
+ `## Implied by those`,
77
+ ``,
78
+ ...(implied.length ? implied.map((n) => `- **${n.capability}** ← needed by ${n.via}`) : ['- None.']),
79
+ ``,
80
+ `_${nodes.length} capabilities total. Anything here that the plan does not already cover is real work to scope._`,
81
+ ``,
82
+ ].join('\n');
83
+ }
84
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Self-improvement — analyze a repo, then propose the smallest set of justified changes that
3
+ * raise its quality, with a before/after score. It never edits code: it produces the plan and
4
+ * the projected result, and delegates the actual change to `groundplan new` or an agent. Every
5
+ * proposed change carries the finding that justifies it, so nothing is added blindly.
6
+ */
7
+ import { type RepoAnalysis } from './analyze.js';
8
+ export interface Change {
9
+ capability: string;
10
+ layer: string;
11
+ why: string;
12
+ how: string;
13
+ }
14
+ export interface Improvement {
15
+ before: RepoAnalysis;
16
+ afterOverall: number;
17
+ changes: Change[];
18
+ }
19
+ export declare function planImprovements(dir: string): Improvement;
20
+ export declare function renderImprovement(imp: Improvement): Record<string, string>;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Self-improvement — analyze a repo, then propose the smallest set of justified changes that
3
+ * raise its quality, with a before/after score. It never edits code: it produces the plan and
4
+ * the projected result, and delegates the actual change to `groundplan new` or an agent. Every
5
+ * proposed change carries the finding that justifies it, so nothing is added blindly.
6
+ */
7
+ import { analyzeRepo, assessFacts } from './analyze.js';
8
+ /** Baseline categories map to the concrete layer that satisfies them. */
9
+ const CONCRETE = { auth: 'auth-jwt', testing: 'testing-unit' };
10
+ export function planImprovements(dir) {
11
+ const before = analyzeRepo(dir);
12
+ const changes = before.facts.missing.map((capability) => {
13
+ const layer = CONCRETE[capability] ?? capability;
14
+ const finding = before.findings.find((f) => f.recommendation.includes(layer) || f.message.toLowerCase().includes(capability));
15
+ return {
16
+ capability,
17
+ layer,
18
+ why: finding?.message ?? `The production baseline expects ${capability}, which is absent.`,
19
+ how: `Add the ${layer} layer (e.g. \`groundplan new "<the project>" --layers ${layer}\`, or wire it by hand).`,
20
+ };
21
+ });
22
+ // The projected repo has the current capabilities plus the additions.
23
+ const afterFacts = {
24
+ ...before.facts,
25
+ present: [...new Set([...before.facts.present, ...changes.map((c) => c.layer)])],
26
+ missing: [],
27
+ };
28
+ return { before, afterOverall: assessFacts(afterFacts).overall, changes };
29
+ }
30
+ export function renderImprovement(imp) {
31
+ const { before, afterOverall, changes } = imp;
32
+ const delta = afterOverall - before.overall;
33
+ const report = [
34
+ `# Improvement plan`,
35
+ ``,
36
+ `**${before.facts.stack}** repo — quality **${before.overall}/100** now, **${afterOverall}/100** after the changes below (${delta >= 0 ? '+' : ''}${delta}).`,
37
+ ``,
38
+ `Every change is justified by a finding; nothing is added blindly. This plan does not edit`,
39
+ `your code — apply it with \`groundplan new\` or an agent, then re-run \`groundplan analyze\`.`,
40
+ ``,
41
+ changes.length === 0 ? `The production baseline is already covered — no changes proposed.` : `## Proposed changes`,
42
+ ``,
43
+ ...changes.flatMap((c) => [`### Add ${c.layer}`, ``, `- **Why:** ${c.why}`, `- **How:** ${c.how}`, ``]),
44
+ ].join('\n');
45
+ return {
46
+ 'improve-report.md': report,
47
+ 'improve.json': JSON.stringify({ before: { overall: before.overall, facts: before.facts }, afterOverall, changes }, null, 2) + '\n',
48
+ };
49
+ }
50
+ //# sourceMappingURL=improve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve.js","sourceRoot":"","sources":["../src/improve.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAqC,MAAM,cAAc,CAAC;AAe3F,yEAAyE;AACzE,MAAM,QAAQ,GAA2B,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAEvF,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAa,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9H,OAAO;YACL,UAAU;YACV,KAAK;YACL,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,mCAAmC,UAAU,oBAAoB;YAC1F,GAAG,EAAE,WAAW,KAAK,0DAA0D,KAAK,0BAA0B;SAC/G,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,sEAAsE;IACtE,MAAM,UAAU,GAAc;QAC5B,GAAG,MAAM,CAAC,KAAK;QACf,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChF,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAgB;IAChD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IAC9C,MAAM,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;IAC5C,MAAM,MAAM,GAAG;QACb,oBAAoB;QACpB,EAAE;QACF,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,uBAAuB,MAAM,CAAC,OAAO,iBAAiB,YAAY,mCAAmC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI;QAC7J,EAAE;QACF,2FAA2F;QAC3F,+FAA+F;QAC/F,EAAE;QACF,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,mEAAmE,CAAC,CAAC,CAAC,qBAAqB;QAClH,EAAE;QACF,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;KACxG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,mBAAmB,EAAE,MAAM;QAC3B,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI;KACpI,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,21 @@ export * from './plan.js';
8
8
  export * from './apply.js';
9
9
  export * from './recommend.js';
10
10
  export * from './intent.js';
11
+ export * from './autoplan.js';
12
+ export * from './variables.js';
13
+ export * from './infer-llm.js';
14
+ export * from './pipeline.js';
15
+ export * from './agent-runtime.js';
16
+ export * from './analysis.js';
17
+ export * from './assessment.js';
18
+ export * from './simulate.js';
19
+ export * from './library.js';
20
+ export * from './graph.js';
21
+ export * from './blueprint.js';
22
+ export * from './analyze.js';
23
+ export * from './improve.js';
24
+ export * from './verification.js';
25
+ export * from './knowledge.js';
11
26
  export * from './agentkit.js';
12
27
  export * from './adapters.js';
13
28
  export * from './python-requirements.js';
package/dist/index.js CHANGED
@@ -8,6 +8,21 @@ export * from './plan.js';
8
8
  export * from './apply.js';
9
9
  export * from './recommend.js';
10
10
  export * from './intent.js';
11
+ export * from './autoplan.js';
12
+ export * from './variables.js';
13
+ export * from './infer-llm.js';
14
+ export * from './pipeline.js';
15
+ export * from './agent-runtime.js';
16
+ export * from './analysis.js';
17
+ export * from './assessment.js';
18
+ export * from './simulate.js';
19
+ export * from './library.js';
20
+ export * from './graph.js';
21
+ export * from './blueprint.js';
22
+ export * from './analyze.js';
23
+ export * from './improve.js';
24
+ export * from './verification.js';
25
+ export * from './knowledge.js';
11
26
  export * from './agentkit.js';
12
27
  export * from './adapters.js';
13
28
  export * from './python-requirements.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Optional LLM augmentation of intent inference. The deterministic signal table
3
+ * ([intent.ts]) is the floor — offline, reproducible, always present. When a model is
4
+ * configured (`GROUNDPLAN_MODEL_INFER` + a key, or an Anthropic SDK profile), this reads the
5
+ * brief far more flexibly than regex can, and returns a selection constrained to the catalog:
6
+ * the model may only choose ids that exist, and anything it wants that the catalog lacks comes
7
+ * back as a `gap` rather than an invalid pick.
8
+ *
9
+ * Every failure mode — no SDK installed, no key, an API error, a malformed response — returns
10
+ * null, and the caller falls back to the deterministic path. The model can never break a build;
11
+ * at worst it doesn't help.
12
+ */
13
+ import { z } from 'zod';
14
+ import { Characteristic, Stack } from './schema.js';
15
+ import type { Catalog } from './loader.js';
16
+ import type { GroundplanConfig } from './config.js';
17
+ export interface LlmInference {
18
+ stack?: z.infer<typeof Stack>;
19
+ architecture?: string;
20
+ layers: string[];
21
+ adapters: string[];
22
+ priorities: Partial<Record<z.infer<typeof Characteristic>, number>>;
23
+ teamSize?: number;
24
+ /** Capabilities the brief asked for that no catalog entry provides. */
25
+ gaps: string[];
26
+ rationale: string;
27
+ }
28
+ /** Returns a catalog-constrained selection, or null when the model path is unavailable or fails. */
29
+ export declare function inferWithModel(description: string, catalog: Catalog, config: GroundplanConfig): Promise<LlmInference | null>;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Optional LLM augmentation of intent inference. The deterministic signal table
3
+ * ([intent.ts]) is the floor — offline, reproducible, always present. When a model is
4
+ * configured (`GROUNDPLAN_MODEL_INFER` + a key, or an Anthropic SDK profile), this reads the
5
+ * brief far more flexibly than regex can, and returns a selection constrained to the catalog:
6
+ * the model may only choose ids that exist, and anything it wants that the catalog lacks comes
7
+ * back as a `gap` rather than an invalid pick.
8
+ *
9
+ * Every failure mode — no SDK installed, no key, an API error, a malformed response — returns
10
+ * null, and the caller falls back to the deterministic path. The model can never break a build;
11
+ * at worst it doesn't help.
12
+ */
13
+ import { z } from 'zod';
14
+ import { Characteristic, Stack } from './schema.js';
15
+ /** Returns a catalog-constrained selection, or null when the model path is unavailable or fails. */
16
+ export async function inferWithModel(description, catalog, config) {
17
+ if (!config.ai.enabled)
18
+ return null;
19
+ const sdk = await loadSdk();
20
+ if (!sdk)
21
+ return null;
22
+ const client = makeClient(sdk.Anthropic, config);
23
+ if (!client)
24
+ return null;
25
+ const architectures = [...catalog.architectures.values()];
26
+ const layers = [...catalog.blueprints.values()].filter((b) => b.kind === 'layer');
27
+ const adapters = [...catalog.adapters.values()];
28
+ const schema = buildSchema(architectures.map((a) => a.id), layers.map((l) => l.id), adapters.map((a) => a.id));
29
+ try {
30
+ const response = await client.messages.parse({
31
+ model: config.ai.inferModel,
32
+ max_tokens: 2048,
33
+ output_config: { format: sdk.zodOutputFormat(schema), effort: config.ai.inferEffort },
34
+ system: SYSTEM,
35
+ messages: [{ role: 'user', content: prompt(description, architectures, layers, adapters) }],
36
+ });
37
+ return normalize(response.parsed_output);
38
+ }
39
+ catch {
40
+ // Any API/parse failure is non-fatal — the deterministic path takes over.
41
+ return null;
42
+ }
43
+ }
44
+ const SYSTEM = 'You are a software architect selecting from a fixed catalog. Choose only ids present in the ' +
45
+ 'lists provided. Pick the single best architecture, the base stack, and the layers the project ' +
46
+ 'genuinely needs — no more. If the project needs a capability no catalog entry covers, name it ' +
47
+ 'in "gaps" rather than forcing a wrong pick. Weight priorities 0-5 by how much the brief implies them.';
48
+ function prompt(description, architectures, layers, adapters) {
49
+ const arch = architectures.map((a) => ` ${a.id} — ${a.oneLine} [${a.family}]`).join('\n');
50
+ const layer = layers.map((l) => ` ${l.id} — ${l.description}`).join('\n');
51
+ const tool = adapters.map((a) => a.id).join(', ');
52
+ return [
53
+ `PROJECT:\n${description}`,
54
+ `\nSTACKS: ${Stack.options.join(', ')}`,
55
+ `\nARCHITECTURES:\n${arch}`,
56
+ `\nLAYERS:\n${layer}`,
57
+ `\nAI TOOLS: ${tool}`,
58
+ ].join('\n');
59
+ }
60
+ function buildSchema(archIds, layerIds, adapterIds) {
61
+ const enumOrString = (ids) => ids.length > 0 ? z.enum(ids) : z.string();
62
+ return z.object({
63
+ stack: Stack.nullable(),
64
+ architecture: enumOrString(archIds).nullable(),
65
+ layers: z.array(enumOrString(layerIds)),
66
+ adapters: z.array(enumOrString(adapterIds)),
67
+ priorities: z.array(z.object({ name: Characteristic, weight: z.number().int() })),
68
+ teamSize: z.number().int().nullable(),
69
+ gaps: z.array(z.string()),
70
+ rationale: z.string(),
71
+ });
72
+ }
73
+ function normalize(parsed) {
74
+ if (!parsed || typeof parsed !== 'object')
75
+ return null;
76
+ const p = parsed;
77
+ const priorities = {};
78
+ for (const entry of Array.isArray(p.priorities) ? p.priorities : []) {
79
+ const name = entry.name;
80
+ const weight = Number(entry.weight);
81
+ if (name && Number.isFinite(weight) && weight > 0)
82
+ priorities[name] = Math.min(5, Math.max(0, weight));
83
+ }
84
+ return {
85
+ stack: p.stack ?? undefined,
86
+ architecture: p.architecture ?? undefined,
87
+ layers: Array.isArray(p.layers) ? p.layers : [],
88
+ adapters: Array.isArray(p.adapters) ? p.adapters : [],
89
+ priorities,
90
+ teamSize: typeof p.teamSize === 'number' ? p.teamSize : undefined,
91
+ gaps: Array.isArray(p.gaps) ? p.gaps : [],
92
+ rationale: typeof p.rationale === 'string' ? p.rationale : '',
93
+ };
94
+ }
95
+ /** The SDK is an optional dependency; a missing install disables the model path, never throws. */
96
+ async function loadSdk() {
97
+ try {
98
+ const mod = (await import('@anthropic-ai/sdk'));
99
+ const helpers = (await import('@anthropic-ai/sdk/helpers/zod'));
100
+ return { Anthropic: mod.default, zodOutputFormat: helpers.zodOutputFormat };
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ }
106
+ function makeClient(Anthropic, config) {
107
+ try {
108
+ return config.ai.apiKey ? new Anthropic({ apiKey: config.ai.apiKey }) : new Anthropic();
109
+ }
110
+ catch {
111
+ return null;
112
+ }
113
+ }
114
+ //# sourceMappingURL=infer-llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer-llm.js","sourceRoot":"","sources":["../src/infer-llm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,KAAK,EAAkB,MAAM,aAAa,CAAC;AAgBpE,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,OAAgB,EAChB,MAAwB;IAExB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/G,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3C,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE;YACrF,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;SAC5F,CAAC,CAAC;QACH,OAAO,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,MAAM,GACV,8FAA8F;IAC9F,gGAAgG;IAChG,gGAAgG;IAChG,uGAAuG,CAAC;AAE1G,SAAS,MAAM,CACb,WAAmB,EACnB,aAAoF,EACpF,MAAmB,EACnB,QAA0E;IAE1E,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO;QACL,aAAa,WAAW,EAAE;QAC1B,aAAa,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACvC,qBAAqB,IAAI,EAAE;QAC3B,cAAc,KAAK,EAAE;QACrB,eAAe,IAAI,EAAE;KACtB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,OAAiB,EAAE,QAAkB,EAAE,UAAoB;IAC9E,MAAM,YAAY,GAAG,CAAC,GAAa,EAAE,EAAE,CACrC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAA4B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrE,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;QACvB,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;QAC9C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACrC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,MAAe;IAChC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpE,MAAM,IAAI,GAAI,KAA2B,CAAC,IAAkD,CAAC;QAC7F,MAAM,MAAM,GAAG,MAAM,CAAE,KAA8B,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,OAAO;QACL,KAAK,EAAG,CAAC,CAAC,KAA+B,IAAI,SAAS;QACtD,YAAY,EAAG,CAAC,CAAC,YAAuB,IAAI,SAAS;QACrD,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,MAAmB,CAAC,CAAC,CAAC,EAAE;QAC7D,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,QAAqB,CAAC,CAAC,CAAC,EAAE;QACnE,UAAU;QACV,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACjE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,IAAiB,CAAC,CAAC,CAAC,EAAE;QACvD,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,KAAK,UAAU,OAAO;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAkE,CAAC;QACjH,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAE7D,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,SAAgD,EAAE,MAAwB;IAC5F,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;IAC1F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/intent.js CHANGED
@@ -78,12 +78,35 @@ export const SIGNALS = [
78
78
  },
79
79
  {
80
80
  id: 'ai-agent',
81
- patterns: [/\b(ai agent|llm|rag|chatbot|copilot|semantic search|embedding|vector (db|search)|prompt)\b/],
81
+ patterns: [
82
+ /\bai[- ]?(agent|assistant|tutor\w*|powered|driven|native|copilot)\b/,
83
+ /\b(artificial intelligence|llm|rag|chatbot|copilot|gpt|openai|anthropic|claude|semantic search|embedding|vector (db|search)|prompt\w*|agentic|multi[- ]agent)\b/,
84
+ ],
82
85
  weights: { evolvability: 4, testability: 4, cost: 4, responsiveness: 3 },
83
86
  family: 'ai',
84
87
  implies: ['observability', 'evals'],
85
88
  because: 'LLM systems are unpredictable in cost and quality without evals and tracing',
86
89
  },
90
+ {
91
+ id: 'voice-interface',
92
+ patterns: [/\b(voice|speech|text[- ]to[- ]speech|speech[- ]to[- ]text|tts|stt|transcription|spoken|talk to (them|it|the user)|conversational)\b/],
93
+ weights: { responsiveness: 4, evolvability: 2 },
94
+ family: 'ai',
95
+ implies: ['observability'],
96
+ because: 'a spoken interface is latency-bound and model-driven',
97
+ },
98
+ {
99
+ id: 'screen-vision',
100
+ patterns: [
101
+ /\bscreen[- ]?(watch\w*|monitor\w*|shar\w*|captur\w*|record\w*)\b/,
102
+ /\b(watch\w*|monitor\w*|observ\w*) [^.]{0,25}screen\b/,
103
+ /\b(computer vision|ocr|webcam|image recognition|screen monitoring)\b/,
104
+ ],
105
+ weights: { responsiveness: 3, 'fault-tolerance': 2 },
106
+ family: 'ai',
107
+ implies: ['observability'],
108
+ because: 'watching a live screen is a realtime perception loop',
109
+ },
87
110
  {
88
111
  id: 'data-pipeline',
89
112
  patterns: [/\b(etl|elt|data (pipeline|warehouse|lake)|analytics|batch (job|process)|ingest)\b/],
@@ -1 +1 @@
1
- {"version":3,"file":"intent.js","sourceRoot":"","sources":["../src/intent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intent.js","sourceRoot":"","sources":["../src/intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface ProjectMemory {
2
+ idea: string;
3
+ stack: string;
4
+ architecture?: string;
5
+ layers: string[];
6
+ family?: string;
7
+ /** The intent signals this project matched — the similarity key. */
8
+ signals: string[];
9
+ }
10
+ export interface Recollection {
11
+ memory: ProjectMemory;
12
+ /** 0..1 — Jaccard overlap of signals, with a small bonus for the same family. */
13
+ score: number;
14
+ }
15
+ /** Read the store, tolerating a missing file and skipping any malformed line. */
16
+ export declare function loadMemories(file: string | undefined): ProjectMemory[];
17
+ /** Append a project to the store. A no-op when no store path is configured. */
18
+ export declare function rememberProject(file: string | undefined, memory: ProjectMemory): void;
19
+ /** The past projects most like this intent, most-similar first. */
20
+ export declare function recall(intent: {
21
+ signals: string[];
22
+ family?: string;
23
+ }, memories: ProjectMemory[], k?: number): Recollection[];
@@ -0,0 +1,61 @@
1
+ /**
2
+ * A reusable intelligence layer: what past projects chose, so a new one starts from prior art
3
+ * instead of a blank slate. An append-only JSONL store keyed on the intent signals a project
4
+ * matched; recall ranks past projects by signal overlap.
5
+ *
6
+ * Off by default and zero-footprint — nothing is read or written unless a store path is
7
+ * configured (`GROUNDPLAN_KNOWLEDGE`). Recall never changes a recommendation; it surfaces
8
+ * precedent for a human (or an agent) to weigh, keeping the deterministic path deterministic.
9
+ */
10
+ import fs from 'node:fs';
11
+ import path from 'node:path';
12
+ /** Read the store, tolerating a missing file and skipping any malformed line. */
13
+ export function loadMemories(file) {
14
+ if (!file || !fs.existsSync(file))
15
+ return [];
16
+ const out = [];
17
+ for (const line of fs.readFileSync(file, 'utf8').split('\n')) {
18
+ const trimmed = line.trim();
19
+ if (!trimmed)
20
+ continue;
21
+ try {
22
+ const parsed = JSON.parse(trimmed);
23
+ if (parsed && typeof parsed.stack === 'string' && Array.isArray(parsed.signals))
24
+ out.push(parsed);
25
+ }
26
+ catch {
27
+ // A corrupt line is skipped, not fatal — the store is a cache, not a source of truth.
28
+ }
29
+ }
30
+ return out;
31
+ }
32
+ /** Append a project to the store. A no-op when no store path is configured. */
33
+ export function rememberProject(file, memory) {
34
+ if (!file)
35
+ return;
36
+ fs.mkdirSync(path.dirname(file), { recursive: true });
37
+ fs.appendFileSync(file, JSON.stringify(memory) + '\n', 'utf8');
38
+ }
39
+ /** The past projects most like this intent, most-similar first. */
40
+ export function recall(intent, memories, k = 3) {
41
+ const want = new Set(intent.signals);
42
+ return memories
43
+ .map((memory) => ({ memory, score: similarity(want, intent.family, memory) }))
44
+ .filter((r) => r.score > 0)
45
+ .sort((a, b) => b.score - a.score)
46
+ .slice(0, k);
47
+ }
48
+ function similarity(want, family, memory) {
49
+ const have = new Set(memory.signals);
50
+ const union = new Set([...want, ...have]);
51
+ if (union.size === 0)
52
+ return 0;
53
+ let intersection = 0;
54
+ for (const s of want)
55
+ if (have.has(s))
56
+ intersection++;
57
+ const jaccard = intersection / union.size;
58
+ const familyBonus = family && memory.family === family ? 0.1 : 0;
59
+ return Math.min(1, jaccard + familyBonus);
60
+ }
61
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../src/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The verified blueprint library — the recurring shapes of software, so an idea is matched to a
3
+ * known industry pattern and adapted, not invented from scratch. Each entry names the capabilities
4
+ * that industry almost always needs, its DNA defaults, its recommended patterns, and the
5
+ * anti-patterns that sink it. Surfaced in the blueprint as guidance; it does not override the
6
+ * deterministic selection, it informs the reader (and an agent) what the pattern expects.
7
+ */
8
+ export interface IndustryBlueprint {
9
+ id: string;
10
+ name: string;
11
+ /** Lowercased terms that match an idea to this blueprint. */
12
+ keywords: string[];
13
+ /** Capabilities this industry almost always needs (human-readable). */
14
+ recommends: string[];
15
+ dna: {
16
+ security: 'standard' | 'elevated';
17
+ compliance: 'none' | 'regulated';
18
+ scale: 'small' | 'growing' | 'large';
19
+ };
20
+ patterns: string[];
21
+ antiPatterns: string[];
22
+ }
23
+ export declare const INDUSTRY_BLUEPRINTS: IndustryBlueprint[];
24
+ /** Match an idea to the best-fitting industry blueprint, or null when nothing scores. */
25
+ export declare function matchIndustry(idea: string): IndustryBlueprint | null;