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.
Files changed (146) hide show
  1. package/COMMUNITY.md +220 -0
  2. package/CONTRIBUTING.md +194 -0
  3. package/FINAL_REPORT.md +398 -0
  4. package/FOR_OTHER_LLMS.md +286 -0
  5. package/IMPROVEMENTS.md +319 -0
  6. package/LAUNCH_GUIDE.md +388 -0
  7. package/LICENSE +21 -0
  8. package/NPM_PUBLISH.md +257 -0
  9. package/PROJECT_COMPLETE.md +414 -0
  10. package/PROJECT_OVERVIEW.md +265 -0
  11. package/PROJECT_TREE.txt +228 -0
  12. package/PUBLISHING_GUIDE.md +426 -0
  13. package/PUBLISH_NOW.md +337 -0
  14. package/QUICKSTART.md +207 -0
  15. package/README.md +195 -0
  16. package/README_ENHANCED.md +329 -0
  17. package/READY_TO_LAUNCH.txt +56 -0
  18. package/REFACTOR_PLAN.md +179 -0
  19. package/ROADMAP.md +201 -0
  20. package/SUMMARY.md +315 -0
  21. package/bin/agentic.js +3 -0
  22. package/blog/001-introducing-agentic.md +382 -0
  23. package/blog/002-confidence-driven-development.md +490 -0
  24. package/blog/003-formal-verification.md +427 -0
  25. package/blog/004-multi-agent-production.md +436 -0
  26. package/dist/cli.d.ts +7 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +151 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/diagnostics/diagnostic.d.ts +115 -0
  31. package/dist/diagnostics/diagnostic.d.ts.map +1 -0
  32. package/dist/diagnostics/diagnostic.js +101 -0
  33. package/dist/diagnostics/diagnostic.js.map +1 -0
  34. package/dist/diagnostics/formatter.d.ts +36 -0
  35. package/dist/diagnostics/formatter.d.ts.map +1 -0
  36. package/dist/diagnostics/formatter.js +263 -0
  37. package/dist/diagnostics/formatter.js.map +1 -0
  38. package/dist/effects/effect-system.d.ts +64 -0
  39. package/dist/effects/effect-system.d.ts.map +1 -0
  40. package/dist/effects/effect-system.js +197 -0
  41. package/dist/effects/effect-system.js.map +1 -0
  42. package/dist/generator/typescript-generator.d.ts +31 -0
  43. package/dist/generator/typescript-generator.d.ts.map +1 -0
  44. package/dist/generator/typescript-generator.js +308 -0
  45. package/dist/generator/typescript-generator.js.map +1 -0
  46. package/dist/index.d.ts +19 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +60 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/lean4/exporter.d.ts +24 -0
  51. package/dist/lean4/exporter.d.ts.map +1 -0
  52. package/dist/lean4/exporter.js +142 -0
  53. package/dist/lean4/exporter.js.map +1 -0
  54. package/dist/lsp/server.d.ts +6 -0
  55. package/dist/lsp/server.d.ts.map +1 -0
  56. package/dist/lsp/server.js +131 -0
  57. package/dist/lsp/server.js.map +1 -0
  58. package/dist/parser/lexer.d.ts +79 -0
  59. package/dist/parser/lexer.d.ts.map +1 -0
  60. package/dist/parser/lexer.js +296 -0
  61. package/dist/parser/lexer.js.map +1 -0
  62. package/dist/parser/parser-enhanced.d.ts +12 -0
  63. package/dist/parser/parser-enhanced.d.ts.map +1 -0
  64. package/dist/parser/parser-enhanced.js +206 -0
  65. package/dist/parser/parser-enhanced.js.map +1 -0
  66. package/dist/parser/parser.d.ts +34 -0
  67. package/dist/parser/parser.d.ts.map +1 -0
  68. package/dist/parser/parser.js +507 -0
  69. package/dist/parser/parser.js.map +1 -0
  70. package/dist/property-tests/generator-enhanced.d.ts +27 -0
  71. package/dist/property-tests/generator-enhanced.d.ts.map +1 -0
  72. package/dist/property-tests/generator-enhanced.js +209 -0
  73. package/dist/property-tests/generator-enhanced.js.map +1 -0
  74. package/dist/property-tests/generator-fixed.d.ts +2 -0
  75. package/dist/property-tests/generator-fixed.d.ts.map +1 -0
  76. package/dist/property-tests/generator-fixed.js +7 -0
  77. package/dist/property-tests/generator-fixed.js.map +1 -0
  78. package/dist/property-tests/generator.d.ts +28 -0
  79. package/dist/property-tests/generator.d.ts.map +1 -0
  80. package/dist/property-tests/generator.js +284 -0
  81. package/dist/property-tests/generator.js.map +1 -0
  82. package/dist/refinements/refinement-types.d.ts +96 -0
  83. package/dist/refinements/refinement-types.d.ts.map +1 -0
  84. package/dist/refinements/refinement-types.js +234 -0
  85. package/dist/refinements/refinement-types.js.map +1 -0
  86. package/dist/repl.d.ts +21 -0
  87. package/dist/repl.d.ts.map +1 -0
  88. package/dist/repl.js +317 -0
  89. package/dist/repl.js.map +1 -0
  90. package/dist/runtime/agents.d.ts +97 -0
  91. package/dist/runtime/agents.d.ts.map +1 -0
  92. package/dist/runtime/agents.js +258 -0
  93. package/dist/runtime/agents.js.map +1 -0
  94. package/dist/runtime/index.d.ts +98 -0
  95. package/dist/runtime/index.d.ts.map +1 -0
  96. package/dist/runtime/index.js +253 -0
  97. package/dist/runtime/index.js.map +1 -0
  98. package/dist/types-extended.d.ts +197 -0
  99. package/dist/types-extended.d.ts.map +1 -0
  100. package/dist/types-extended.js +7 -0
  101. package/dist/types-extended.js.map +1 -0
  102. package/dist/types.d.ts +129 -0
  103. package/dist/types.d.ts.map +1 -0
  104. package/dist/types.js +6 -0
  105. package/dist/types.js.map +1 -0
  106. package/dist/verification/z3-engine.d.ts +75 -0
  107. package/dist/verification/z3-engine.d.ts.map +1 -0
  108. package/dist/verification/z3-engine.js +234 -0
  109. package/dist/verification/z3-engine.js.map +1 -0
  110. package/examples/advanced-features.agentic +98 -0
  111. package/examples/annotations.agentic +37 -0
  112. package/examples/auth.agentic +53 -0
  113. package/examples/enterprise-example.agentic +360 -0
  114. package/examples/minimal.agentic +3 -0
  115. package/examples/minimal.ts +7 -0
  116. package/examples/ml-pipeline.agentic +350 -0
  117. package/examples/multi-agent-example.agentic +212 -0
  118. package/examples/onboarding-tutorial.agentic +263 -0
  119. package/examples/production-api.agentic +304 -0
  120. package/examples/real-world-chatbot.agentic +351 -0
  121. package/examples/result-handling.agentic +34 -0
  122. package/examples/runtime.ts +24 -0
  123. package/examples/showcase.agentic +22 -0
  124. package/examples/showcase.ts +28 -0
  125. package/examples/simple-test.agentic +4 -0
  126. package/examples/simple-test.ts +7 -0
  127. package/examples/simple.agentic +20 -0
  128. package/examples/test2.agentic +4 -0
  129. package/examples/test2.ts +9 -0
  130. package/examples/test3.agentic +4 -0
  131. package/examples/test3.ts +9 -0
  132. package/package.json +70 -0
  133. package/playground/index.html +221 -0
  134. package/playground/playground.js +291 -0
  135. package/registry/package-registry.ts +319 -0
  136. package/scripts/build.js +50 -0
  137. package/scripts/validate-confidence-mutation.ts +112 -0
  138. package/stdlib/async/promise.agentic +216 -0
  139. package/stdlib/database/pool.agentic +235 -0
  140. package/stdlib/file/io.agentic +194 -0
  141. package/stdlib/http/client.agentic +168 -0
  142. package/video-scripts/001-agentic-in-100-seconds.md +175 -0
  143. package/vscode-extension/README.md +67 -0
  144. package/vscode-extension/language-configuration.json +31 -0
  145. package/vscode-extension/package.json +46 -0
  146. 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")