agentic-lang 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.
- package/COMMUNITY.md +220 -0
- package/CONTRIBUTING.md +194 -0
- package/FINAL_REPORT.md +398 -0
- package/FOR_OTHER_LLMS.md +286 -0
- package/IMPROVEMENTS.md +319 -0
- package/LAUNCH_GUIDE.md +388 -0
- package/LICENSE +21 -0
- package/NPM_PUBLISH.md +257 -0
- package/PROJECT_COMPLETE.md +414 -0
- package/PROJECT_OVERVIEW.md +265 -0
- package/PROJECT_TREE.txt +228 -0
- package/PUBLISHING_GUIDE.md +426 -0
- package/PUBLISH_NOW.md +337 -0
- package/QUICKSTART.md +207 -0
- package/README.md +195 -0
- package/README_ENHANCED.md +329 -0
- package/READY_TO_LAUNCH.txt +56 -0
- package/REFACTOR_PLAN.md +179 -0
- package/ROADMAP.md +201 -0
- package/SUMMARY.md +315 -0
- package/bin/agentic.js +3 -0
- package/blog/001-introducing-agentic.md +382 -0
- package/blog/002-confidence-driven-development.md +490 -0
- package/blog/003-formal-verification.md +427 -0
- package/blog/004-multi-agent-production.md +436 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +151 -0
- package/dist/cli.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +115 -0
- package/dist/diagnostics/diagnostic.d.ts.map +1 -0
- package/dist/diagnostics/diagnostic.js +101 -0
- package/dist/diagnostics/diagnostic.js.map +1 -0
- package/dist/diagnostics/formatter.d.ts +36 -0
- package/dist/diagnostics/formatter.d.ts.map +1 -0
- package/dist/diagnostics/formatter.js +263 -0
- package/dist/diagnostics/formatter.js.map +1 -0
- package/dist/effects/effect-system.d.ts +64 -0
- package/dist/effects/effect-system.d.ts.map +1 -0
- package/dist/effects/effect-system.js +197 -0
- package/dist/effects/effect-system.js.map +1 -0
- package/dist/generator/typescript-generator.d.ts +31 -0
- package/dist/generator/typescript-generator.d.ts.map +1 -0
- package/dist/generator/typescript-generator.js +308 -0
- package/dist/generator/typescript-generator.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/lean4/exporter.d.ts +24 -0
- package/dist/lean4/exporter.d.ts.map +1 -0
- package/dist/lean4/exporter.js +142 -0
- package/dist/lean4/exporter.js.map +1 -0
- package/dist/lsp/server.d.ts +6 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +131 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/parser/lexer.d.ts +79 -0
- package/dist/parser/lexer.d.ts.map +1 -0
- package/dist/parser/lexer.js +296 -0
- package/dist/parser/lexer.js.map +1 -0
- package/dist/parser/parser-enhanced.d.ts +12 -0
- package/dist/parser/parser-enhanced.d.ts.map +1 -0
- package/dist/parser/parser-enhanced.js +206 -0
- package/dist/parser/parser-enhanced.js.map +1 -0
- package/dist/parser/parser.d.ts +34 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +507 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/property-tests/generator-enhanced.d.ts +27 -0
- package/dist/property-tests/generator-enhanced.d.ts.map +1 -0
- package/dist/property-tests/generator-enhanced.js +209 -0
- package/dist/property-tests/generator-enhanced.js.map +1 -0
- package/dist/property-tests/generator-fixed.d.ts +2 -0
- package/dist/property-tests/generator-fixed.d.ts.map +1 -0
- package/dist/property-tests/generator-fixed.js +7 -0
- package/dist/property-tests/generator-fixed.js.map +1 -0
- package/dist/property-tests/generator.d.ts +28 -0
- package/dist/property-tests/generator.d.ts.map +1 -0
- package/dist/property-tests/generator.js +284 -0
- package/dist/property-tests/generator.js.map +1 -0
- package/dist/refinements/refinement-types.d.ts +96 -0
- package/dist/refinements/refinement-types.d.ts.map +1 -0
- package/dist/refinements/refinement-types.js +234 -0
- package/dist/refinements/refinement-types.js.map +1 -0
- package/dist/repl.d.ts +21 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +317 -0
- package/dist/repl.js.map +1 -0
- package/dist/runtime/agents.d.ts +97 -0
- package/dist/runtime/agents.d.ts.map +1 -0
- package/dist/runtime/agents.js +258 -0
- package/dist/runtime/agents.js.map +1 -0
- package/dist/runtime/index.d.ts +98 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +253 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/types-extended.d.ts +197 -0
- package/dist/types-extended.d.ts.map +1 -0
- package/dist/types-extended.js +7 -0
- package/dist/types-extended.js.map +1 -0
- package/dist/types.d.ts +129 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/verification/z3-engine.d.ts +75 -0
- package/dist/verification/z3-engine.d.ts.map +1 -0
- package/dist/verification/z3-engine.js +234 -0
- package/dist/verification/z3-engine.js.map +1 -0
- package/examples/advanced-features.agentic +98 -0
- package/examples/annotations.agentic +37 -0
- package/examples/auth.agentic +53 -0
- package/examples/enterprise-example.agentic +360 -0
- package/examples/minimal.agentic +3 -0
- package/examples/minimal.ts +7 -0
- package/examples/ml-pipeline.agentic +350 -0
- package/examples/multi-agent-example.agentic +212 -0
- package/examples/onboarding-tutorial.agentic +263 -0
- package/examples/production-api.agentic +304 -0
- package/examples/real-world-chatbot.agentic +351 -0
- package/examples/result-handling.agentic +34 -0
- package/examples/runtime.ts +24 -0
- package/examples/showcase.agentic +22 -0
- package/examples/showcase.ts +28 -0
- package/examples/simple-test.agentic +4 -0
- package/examples/simple-test.ts +7 -0
- package/examples/simple.agentic +20 -0
- package/examples/test2.agentic +4 -0
- package/examples/test2.ts +9 -0
- package/examples/test3.agentic +4 -0
- package/examples/test3.ts +9 -0
- package/package.json +70 -0
- package/playground/index.html +221 -0
- package/playground/playground.js +291 -0
- package/registry/package-registry.ts +319 -0
- package/scripts/build.js +50 -0
- package/scripts/validate-confidence-mutation.ts +112 -0
- package/stdlib/async/promise.agentic +216 -0
- package/stdlib/database/pool.agentic +235 -0
- package/stdlib/file/io.agentic +194 -0
- package/stdlib/http/client.agentic +168 -0
- package/video-scripts/001-agentic-in-100-seconds.md +175 -0
- package/vscode-extension/README.md +67 -0
- package/vscode-extension/language-configuration.json +31 -0
- package/vscode-extension/package.json +46 -0
- package/vscode-extension/syntaxes/agentic.tmLanguage.json +134 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Z3 SMT Solver Integration for Formal Verification
|
|
3
|
+
* Verifies contracts (@requires, @ensures) using Z3
|
|
4
|
+
*/
|
|
5
|
+
import * as AST from '../types';
|
|
6
|
+
export interface VerificationResult {
|
|
7
|
+
verified: boolean;
|
|
8
|
+
counterexample?: any;
|
|
9
|
+
properties: Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
proven: boolean;
|
|
12
|
+
time_ms: number;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export interface Contract {
|
|
16
|
+
requires?: string[];
|
|
17
|
+
ensures?: string[];
|
|
18
|
+
invariants?: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare class Z3VerificationEngine {
|
|
21
|
+
private z3Context;
|
|
22
|
+
private initialized;
|
|
23
|
+
initialize(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Verify a function's contract using Z3
|
|
26
|
+
*/
|
|
27
|
+
verifyFunction(func: AST.FunctionDeclaration, contract: Contract): Promise<VerificationResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Verify that preconditions imply postconditions
|
|
30
|
+
* ∀x. precondition(x) → postcondition(x)
|
|
31
|
+
*/
|
|
32
|
+
private verifyProperty;
|
|
33
|
+
/**
|
|
34
|
+
* Parse expression string into Z3 formula
|
|
35
|
+
* Simple parser for basic arithmetic and boolean expressions
|
|
36
|
+
*/
|
|
37
|
+
private parseExpression;
|
|
38
|
+
private parseOperand;
|
|
39
|
+
/**
|
|
40
|
+
* Check for common antipatterns
|
|
41
|
+
*/
|
|
42
|
+
checkAntipatterns(func: AST.FunctionDeclaration): Promise<string[]>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Statistical Confidence Validator
|
|
46
|
+
* Validates confidence claims using Wilson score intervals
|
|
47
|
+
*/
|
|
48
|
+
export declare class ConfidenceValidator {
|
|
49
|
+
private observations;
|
|
50
|
+
/**
|
|
51
|
+
* Record function execution result
|
|
52
|
+
*/
|
|
53
|
+
observe(functionName: string, success: boolean): void;
|
|
54
|
+
/**
|
|
55
|
+
* Calculate confidence interval using Wilson score
|
|
56
|
+
*/
|
|
57
|
+
calculateConfidenceInterval(functionName: string, confidenceLevel?: number): {
|
|
58
|
+
lower: number;
|
|
59
|
+
upper: number;
|
|
60
|
+
samples: number;
|
|
61
|
+
} | null;
|
|
62
|
+
/**
|
|
63
|
+
* Validate claimed confidence against observed data
|
|
64
|
+
*/
|
|
65
|
+
validateClaim(functionName: string, claimedConfidence: number): {
|
|
66
|
+
valid: boolean;
|
|
67
|
+
actual: {
|
|
68
|
+
lower: number;
|
|
69
|
+
upper: number;
|
|
70
|
+
} | null;
|
|
71
|
+
recommendation: string;
|
|
72
|
+
};
|
|
73
|
+
private getZScore;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=z3-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z3-engine.d.ts","sourceRoot":"","sources":["../../src/verification/z3-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,WAAW,CAAS;IAEtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;OAEG;IACG,cAAc,CAClB,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAC7B,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAsD9B;;;OAGG;YACW,cAAc;IA4B5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAiEvB,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAe1E;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAgC;IAEpD;;OAEG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOrD;;OAEG;IACH,2BAA2B,CACzB,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,MAAa,GAC7B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAyB3D;;OAEG;IACH,aAAa,CACX,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,GACxB;QACD,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QAChD,cAAc,EAAE,MAAM,CAAC;KACxB;IAyBD,OAAO,CAAC,SAAS;CAUlB"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Z3 SMT Solver Integration for Formal Verification
|
|
4
|
+
* Verifies contracts (@requires, @ensures) using Z3
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ConfidenceValidator = exports.Z3VerificationEngine = void 0;
|
|
8
|
+
const z3_solver_1 = require("z3-solver");
|
|
9
|
+
class Z3VerificationEngine {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.initialized = false;
|
|
12
|
+
}
|
|
13
|
+
async initialize() {
|
|
14
|
+
if (this.initialized)
|
|
15
|
+
return;
|
|
16
|
+
const { Context } = await (0, z3_solver_1.init)();
|
|
17
|
+
this.z3Context = Context('main');
|
|
18
|
+
this.initialized = true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Verify a function's contract using Z3
|
|
22
|
+
*/
|
|
23
|
+
async verifyFunction(func, contract) {
|
|
24
|
+
await this.initialize();
|
|
25
|
+
const solver = new this.z3Context.Solver();
|
|
26
|
+
const properties = [];
|
|
27
|
+
// Create Z3 variables from function parameters
|
|
28
|
+
const vars = {};
|
|
29
|
+
for (const param of func.params) {
|
|
30
|
+
const type = param.typeAnnotation?.value;
|
|
31
|
+
if (type === 'number') {
|
|
32
|
+
vars[param.name] = this.z3Context.Real.const(param.name);
|
|
33
|
+
}
|
|
34
|
+
else if (type === 'boolean') {
|
|
35
|
+
vars[param.name] = this.z3Context.Bool.const(param.name);
|
|
36
|
+
}
|
|
37
|
+
// Add more types as needed
|
|
38
|
+
}
|
|
39
|
+
// Verify each postcondition
|
|
40
|
+
if (contract.ensures) {
|
|
41
|
+
for (const postcondition of contract.ensures) {
|
|
42
|
+
const startTime = Date.now();
|
|
43
|
+
try {
|
|
44
|
+
const result = await this.verifyProperty(solver, vars, contract.requires || [], postcondition);
|
|
45
|
+
properties.push({
|
|
46
|
+
name: postcondition,
|
|
47
|
+
proven: result,
|
|
48
|
+
time_ms: Date.now() - startTime,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
properties.push({
|
|
53
|
+
name: postcondition,
|
|
54
|
+
proven: false,
|
|
55
|
+
time_ms: Date.now() - startTime,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const allVerified = properties.every(p => p.proven);
|
|
61
|
+
return {
|
|
62
|
+
verified: allVerified,
|
|
63
|
+
properties,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Verify that preconditions imply postconditions
|
|
68
|
+
* ∀x. precondition(x) → postcondition(x)
|
|
69
|
+
*/
|
|
70
|
+
async verifyProperty(solver, vars, preconditions, postcondition) {
|
|
71
|
+
// Build precondition formula
|
|
72
|
+
const preFormulas = preconditions.map(pre => this.parseExpression(pre, vars));
|
|
73
|
+
const preCombined = preFormulas.length > 0
|
|
74
|
+
? this.z3Context.And(...preFormulas)
|
|
75
|
+
: this.z3Context.Bool.val(true);
|
|
76
|
+
// Build postcondition formula
|
|
77
|
+
const postFormula = this.parseExpression(postcondition, vars);
|
|
78
|
+
// Check if ¬(precondition ∧ ¬postcondition) is UNSAT
|
|
79
|
+
// This proves: precondition → postcondition
|
|
80
|
+
solver.add(preCombined);
|
|
81
|
+
solver.add(this.z3Context.Not(postFormula));
|
|
82
|
+
const result = await solver.check();
|
|
83
|
+
return result === 'unsat'; // UNSAT means the property is proven
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parse expression string into Z3 formula
|
|
87
|
+
* Simple parser for basic arithmetic and boolean expressions
|
|
88
|
+
*/
|
|
89
|
+
parseExpression(expr, vars) {
|
|
90
|
+
// This is a simplified parser - in production, use a proper expression parser
|
|
91
|
+
// Handle comparison operators
|
|
92
|
+
if (expr.includes('>')) {
|
|
93
|
+
const [left, right] = expr.split('>').map(s => s.trim());
|
|
94
|
+
return this.z3Context.GT(this.parseOperand(left, vars), this.parseOperand(right, vars));
|
|
95
|
+
}
|
|
96
|
+
if (expr.includes('>=')) {
|
|
97
|
+
const [left, right] = expr.split('>=').map(s => s.trim());
|
|
98
|
+
return this.z3Context.GE(this.parseOperand(left, vars), this.parseOperand(right, vars));
|
|
99
|
+
}
|
|
100
|
+
if (expr.includes('<')) {
|
|
101
|
+
const [left, right] = expr.split('<').map(s => s.trim());
|
|
102
|
+
return this.z3Context.LT(this.parseOperand(left, vars), this.parseOperand(right, vars));
|
|
103
|
+
}
|
|
104
|
+
if (expr.includes('==')) {
|
|
105
|
+
const [left, right] = expr.split('==').map(s => s.trim());
|
|
106
|
+
return this.z3Context.Eq(this.parseOperand(left, vars), this.parseOperand(right, vars));
|
|
107
|
+
}
|
|
108
|
+
if (expr.includes('!=')) {
|
|
109
|
+
const [left, right] = expr.split('!=').map(s => s.trim());
|
|
110
|
+
return this.z3Context.Not(this.z3Context.Eq(this.parseOperand(left, vars), this.parseOperand(right, vars)));
|
|
111
|
+
}
|
|
112
|
+
// Handle boolean operators
|
|
113
|
+
if (expr.includes('&&')) {
|
|
114
|
+
const parts = expr.split('&&').map(s => s.trim());
|
|
115
|
+
return this.z3Context.And(...parts.map(p => this.parseExpression(p, vars)));
|
|
116
|
+
}
|
|
117
|
+
if (expr.includes('||')) {
|
|
118
|
+
const parts = expr.split('||').map(s => s.trim());
|
|
119
|
+
return this.z3Context.Or(...parts.map(p => this.parseExpression(p, vars)));
|
|
120
|
+
}
|
|
121
|
+
// Default: try to parse as variable or constant
|
|
122
|
+
return this.parseOperand(expr, vars);
|
|
123
|
+
}
|
|
124
|
+
parseOperand(operand, vars) {
|
|
125
|
+
operand = operand.trim();
|
|
126
|
+
// Check if it's a variable
|
|
127
|
+
if (vars[operand]) {
|
|
128
|
+
return vars[operand];
|
|
129
|
+
}
|
|
130
|
+
// Check if it's a number
|
|
131
|
+
const num = parseFloat(operand);
|
|
132
|
+
if (!isNaN(num)) {
|
|
133
|
+
return this.z3Context.Real.val(num);
|
|
134
|
+
}
|
|
135
|
+
// Check if it's boolean
|
|
136
|
+
if (operand === 'true')
|
|
137
|
+
return this.z3Context.Bool.val(true);
|
|
138
|
+
if (operand === 'false')
|
|
139
|
+
return this.z3Context.Bool.val(false);
|
|
140
|
+
throw new Error(`Cannot parse operand: ${operand}`);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check for common antipatterns
|
|
144
|
+
*/
|
|
145
|
+
async checkAntipatterns(func) {
|
|
146
|
+
const issues = [];
|
|
147
|
+
// Division by zero check
|
|
148
|
+
if (func.body.toString().includes('/')) {
|
|
149
|
+
issues.push('Potential division by zero - add precondition for divisor != 0');
|
|
150
|
+
}
|
|
151
|
+
// Array access without bounds check
|
|
152
|
+
if (func.body.toString().match(/\[\d+\]/)) {
|
|
153
|
+
issues.push('Array access without bounds check - verify index is valid');
|
|
154
|
+
}
|
|
155
|
+
return issues;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.Z3VerificationEngine = Z3VerificationEngine;
|
|
159
|
+
/**
|
|
160
|
+
* Statistical Confidence Validator
|
|
161
|
+
* Validates confidence claims using Wilson score intervals
|
|
162
|
+
*/
|
|
163
|
+
class ConfidenceValidator {
|
|
164
|
+
constructor() {
|
|
165
|
+
this.observations = new Map();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Record function execution result
|
|
169
|
+
*/
|
|
170
|
+
observe(functionName, success) {
|
|
171
|
+
if (!this.observations.has(functionName)) {
|
|
172
|
+
this.observations.set(functionName, []);
|
|
173
|
+
}
|
|
174
|
+
this.observations.get(functionName).push(success);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Calculate confidence interval using Wilson score
|
|
178
|
+
*/
|
|
179
|
+
calculateConfidenceInterval(functionName, confidenceLevel = 0.95) {
|
|
180
|
+
const obs = this.observations.get(functionName);
|
|
181
|
+
if (!obs || obs.length < 10) {
|
|
182
|
+
return null; // Need at least 10 samples
|
|
183
|
+
}
|
|
184
|
+
const n = obs.length;
|
|
185
|
+
const successes = obs.filter(x => x).length;
|
|
186
|
+
const p = successes / n;
|
|
187
|
+
// Z-score for confidence level (1.96 for 95%)
|
|
188
|
+
const z = this.getZScore(confidenceLevel);
|
|
189
|
+
// Wilson score interval
|
|
190
|
+
const center = p + (z * z) / (2 * n);
|
|
191
|
+
const margin = z * Math.sqrt((p * (1 - p) + (z * z) / (4 * n)) / n);
|
|
192
|
+
const denominator = 1 + (z * z) / n;
|
|
193
|
+
return {
|
|
194
|
+
lower: (center - margin) / denominator,
|
|
195
|
+
upper: (center + margin) / denominator,
|
|
196
|
+
samples: n,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Validate claimed confidence against observed data
|
|
201
|
+
*/
|
|
202
|
+
validateClaim(functionName, claimedConfidence) {
|
|
203
|
+
const actual = this.calculateConfidenceInterval(functionName);
|
|
204
|
+
if (!actual) {
|
|
205
|
+
return {
|
|
206
|
+
valid: false,
|
|
207
|
+
actual: null,
|
|
208
|
+
recommendation: 'Need at least 10 runtime observations to validate confidence',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
const valid = claimedConfidence >= actual.lower && claimedConfidence <= actual.upper;
|
|
212
|
+
let recommendation = '';
|
|
213
|
+
if (!valid) {
|
|
214
|
+
if (claimedConfidence > actual.upper) {
|
|
215
|
+
recommendation = `Claimed confidence (${claimedConfidence}) is too high. Based on ${actual.samples} observations, confidence should be ${actual.upper.toFixed(2)} or lower.`;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
recommendation = `Claimed confidence (${claimedConfidence}) is too low. Based on ${actual.samples} observations, you can increase it to ${actual.lower.toFixed(2)}.`;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return { valid, actual, recommendation };
|
|
222
|
+
}
|
|
223
|
+
getZScore(confidenceLevel) {
|
|
224
|
+
// Common z-scores
|
|
225
|
+
const zScores = {
|
|
226
|
+
0.90: 1.645,
|
|
227
|
+
0.95: 1.96,
|
|
228
|
+
0.99: 2.576,
|
|
229
|
+
};
|
|
230
|
+
return zScores[confidenceLevel] || 1.96;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.ConfidenceValidator = ConfidenceValidator;
|
|
234
|
+
//# sourceMappingURL=z3-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z3-engine.js","sourceRoot":"","sources":["../../src/verification/z3-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Advanced Agentic Language Features Demo
|
|
2
|
+
// This example showcases all the powerful features of Agentic
|
|
3
|
+
|
|
4
|
+
// Example 1: Match expressions with Result types
|
|
5
|
+
@confidence(0.95, "Well-tested pattern matching")
|
|
6
|
+
@complete
|
|
7
|
+
funcprocessResult(value: number) -> Result<string, string> {
|
|
8
|
+
validateInput(value) match {
|
|
9
|
+
Ok(v) -> return Ok("Success: " + v),
|
|
10
|
+
Err(e) -> return Err("Failed: " + e)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Example 2: Error recovery with context
|
|
15
|
+
@confidence(0.85, "Has fallback mechanism")
|
|
16
|
+
@partial
|
|
17
|
+
funcfetchDataWithRecovery(url: string) -> Result<string, string> {
|
|
18
|
+
httpGet(url) or error {
|
|
19
|
+
@context {
|
|
20
|
+
what_failed: "HTTP GET request",
|
|
21
|
+
likely_cause: "Network timeout or invalid URL",
|
|
22
|
+
recovery: "Trying cached data"
|
|
23
|
+
}
|
|
24
|
+
return getCachedData(url)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Example 3: Stub function (not implemented yet)
|
|
29
|
+
@stub
|
|
30
|
+
@needs(database, auth_token)
|
|
31
|
+
funccreateUserAccount(username: string, email: string) -> Result<User, Error> {
|
|
32
|
+
// This will throw "not yet implemented" error
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Example 4: Uncertain areas marked
|
|
36
|
+
@confidence(0.70, "Algorithm needs validation")
|
|
37
|
+
@uncertain("edge cases", "performance impact")
|
|
38
|
+
@partial
|
|
39
|
+
funccomplexCalculation(data: number[]) -> Result<number, string> {
|
|
40
|
+
if data.length == 0 {
|
|
41
|
+
return Err("Empty data")
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Complex logic here...
|
|
45
|
+
return Ok(42)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Example 5: Confidence-based fallback chain
|
|
49
|
+
@confidence(0.90, "Multiple fallbacks ensure success")
|
|
50
|
+
@complete
|
|
51
|
+
funcrobustOperation(input: string) -> Result<string, string> {
|
|
52
|
+
primaryMethod(input) match {
|
|
53
|
+
Ok(result) -> return Ok(result),
|
|
54
|
+
Err(e) -> {
|
|
55
|
+
secondaryMethod(input) match {
|
|
56
|
+
Ok(result) -> return Ok(result),
|
|
57
|
+
Err(e2) -> return fallbackMethod(input)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Example 6: Stage-aware development
|
|
64
|
+
@partial
|
|
65
|
+
@confidence(0.60, "Basic features only")
|
|
66
|
+
funcaiModelInference(prompt: string) -> Result<string, string> {
|
|
67
|
+
// TODO: Add temperature control
|
|
68
|
+
// TODO: Add token limits
|
|
69
|
+
// TODO: Add streaming support
|
|
70
|
+
return Ok("Basic response")
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Example 7: Context validation
|
|
74
|
+
@needs(api_key, model_name, temperature)
|
|
75
|
+
@confidence(0.95, "Production-ready")
|
|
76
|
+
@complete
|
|
77
|
+
funcconfigureModel(config: Config) -> Result<Model, string> {
|
|
78
|
+
if !config.api_key {
|
|
79
|
+
return Err("Missing API key")
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return Ok(createModel(config))
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Example 8: Nested match expressions
|
|
86
|
+
@confidence(0.88, "Handles most cases")
|
|
87
|
+
@complete
|
|
88
|
+
funcprocessNestedResults(x: Result<number, string>) -> string {
|
|
89
|
+
x match {
|
|
90
|
+
Ok(value) -> {
|
|
91
|
+
doubleValue(value) match {
|
|
92
|
+
Ok(doubled) -> return "Doubled: " + doubled,
|
|
93
|
+
Err(e) -> return "Failed to double: " + e
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
Err(e) -> return "Initial error: " + e
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Example: Annotation system demonstration
|
|
2
|
+
// Shows different annotation types and their purposes
|
|
3
|
+
|
|
4
|
+
@confidence(0.99, "Core functionality")
|
|
5
|
+
@complete
|
|
6
|
+
funcprocessData(data: string) -> Result<string, string> {
|
|
7
|
+
if !data {
|
|
8
|
+
return Err("Empty data")
|
|
9
|
+
}
|
|
10
|
+
return Ok(data)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@stub
|
|
14
|
+
@needs(database_connection, auth_token)
|
|
15
|
+
funcsaveToDatabase(data: string) -> Result<boolean, string> {
|
|
16
|
+
// Not yet implemented
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@partial
|
|
20
|
+
@confidence(0.60, "Basic features only")
|
|
21
|
+
@uncertain("error handling", "edge cases")
|
|
22
|
+
funcexperimentalFeature(input: number) -> Result<number, string> {
|
|
23
|
+
// Partially implemented
|
|
24
|
+
if input < 0 {
|
|
25
|
+
return Err("Negative input")
|
|
26
|
+
}
|
|
27
|
+
return Ok(input * 2)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@complete
|
|
31
|
+
@confidence(0.88, "Production tested")
|
|
32
|
+
funcrobustOperation(value: string) -> Result<string, string> {
|
|
33
|
+
processData(value) match {
|
|
34
|
+
Ok(result) -> return Ok(result),
|
|
35
|
+
Err(e) -> return Err("Failed: " + e)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Example: Authentication with confidence tracking
|
|
2
|
+
// This demonstrates Agentic language features
|
|
3
|
+
|
|
4
|
+
@confidence(0.90)
|
|
5
|
+
@needs(database: Database, jwt_secret: string)
|
|
6
|
+
func authenticate(token: string) -> Result<User, AuthError> {
|
|
7
|
+
// Validate input with high confidence
|
|
8
|
+
@confident(0.99)
|
|
9
|
+
if token.isEmpty() {
|
|
10
|
+
return Err(AuthError.MISSING_TOKEN)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Decode token with uncertainty
|
|
14
|
+
@uncertain("Edge case: malformed but decodable tokens?")
|
|
15
|
+
decoded = jwt.decode(token, jwt_secret) match {
|
|
16
|
+
Ok(payload) -> payload,
|
|
17
|
+
Err(e) -> {
|
|
18
|
+
@context {
|
|
19
|
+
what_failed: "JWT decode",
|
|
20
|
+
token_preview: token[0..20],
|
|
21
|
+
error: e.message,
|
|
22
|
+
suggestions: [
|
|
23
|
+
"Check if token is properly base64 encoded",
|
|
24
|
+
"Verify JWT_SECRET matches token issuer"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
return Err(AuthError.INVALID_TOKEN)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Check expiration
|
|
32
|
+
@reasoning {
|
|
33
|
+
"Expired tokens must be rejected even if signature is valid"
|
|
34
|
+
"This prevents replay attacks"
|
|
35
|
+
}
|
|
36
|
+
if decoded.exp < now() {
|
|
37
|
+
return Err(AuthError.EXPIRED)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Load user
|
|
41
|
+
user = database.users.find(decoded.user_id) or {
|
|
42
|
+
@anomaly("Token valid but user doesn't exist - possible account deletion")
|
|
43
|
+
return Err(AuthError.USER_NOT_FOUND)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return Ok(user)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Property-based tests auto-generated:
|
|
50
|
+
@property("rejects empty tokens")
|
|
51
|
+
@property("rejects expired tokens")
|
|
52
|
+
@property("accepts valid tokens")
|
|
53
|
+
@property("fails gracefully on invalid format")
|