@devoplus/one-sdk 0.0.0-stage → 0.2.0-next.112

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 (139) hide show
  1. package/CHANGELOG.md +268 -0
  2. package/README.md +894 -2
  3. package/bin/accessRequest.d.mts +96 -0
  4. package/bin/accessRequest.mjs +340 -0
  5. package/bin/appOps.d.mts +97 -0
  6. package/bin/appOps.mjs +336 -0
  7. package/bin/dataCommand.mjs +131 -0
  8. package/bin/devConfig.mjs +132 -0
  9. package/bin/one.mjs +341 -0
  10. package/bin/session.mjs +239 -0
  11. package/dist/agentInput.d.ts +9 -0
  12. package/dist/agentInput.d.ts.map +1 -0
  13. package/dist/agentInput.js +102 -0
  14. package/dist/agentInput.js.map +1 -0
  15. package/dist/agentTools.d.ts +83 -0
  16. package/dist/agentTools.d.ts.map +1 -0
  17. package/dist/agentTools.js +164 -0
  18. package/dist/agentTools.js.map +1 -0
  19. package/dist/ai.d.ts +67 -0
  20. package/dist/ai.d.ts.map +1 -0
  21. package/dist/ai.js +129 -0
  22. package/dist/ai.js.map +1 -0
  23. package/dist/audit.d.ts +21 -0
  24. package/dist/audit.d.ts.map +1 -0
  25. package/dist/audit.js +58 -0
  26. package/dist/audit.js.map +1 -0
  27. package/dist/backend.d.ts +27 -0
  28. package/dist/backend.d.ts.map +1 -0
  29. package/dist/backend.js +63 -0
  30. package/dist/backend.js.map +1 -0
  31. package/dist/cache.d.ts +20 -0
  32. package/dist/cache.d.ts.map +1 -0
  33. package/dist/cache.js +84 -0
  34. package/dist/cache.js.map +1 -0
  35. package/dist/client.d.ts +147 -0
  36. package/dist/client.d.ts.map +1 -0
  37. package/dist/client.js +469 -0
  38. package/dist/client.js.map +1 -0
  39. package/dist/components.d.ts +235 -0
  40. package/dist/components.d.ts.map +1 -0
  41. package/dist/components.js +1491 -0
  42. package/dist/components.js.map +1 -0
  43. package/dist/context.d.ts +110 -0
  44. package/dist/context.d.ts.map +1 -0
  45. package/dist/context.js +126 -0
  46. package/dist/context.js.map +1 -0
  47. package/dist/data/crud.d.ts +74 -0
  48. package/dist/data/crud.d.ts.map +1 -0
  49. package/dist/data/crud.js +614 -0
  50. package/dist/data/crud.js.map +1 -0
  51. package/dist/data/ddl.d.ts +76 -0
  52. package/dist/data/ddl.d.ts.map +1 -0
  53. package/dist/data/ddl.js +362 -0
  54. package/dist/data/ddl.js.map +1 -0
  55. package/dist/data/fold.d.ts +14 -0
  56. package/dist/data/fold.d.ts.map +1 -0
  57. package/dist/data/fold.js +76 -0
  58. package/dist/data/fold.js.map +1 -0
  59. package/dist/data/model.d.ts +113 -0
  60. package/dist/data/model.d.ts.map +1 -0
  61. package/dist/data/model.js +408 -0
  62. package/dist/data/model.js.map +1 -0
  63. package/dist/data/values.d.ts +29 -0
  64. package/dist/data/values.d.ts.map +1 -0
  65. package/dist/data/values.js +152 -0
  66. package/dist/data/values.js.map +1 -0
  67. package/dist/dexa.d.ts +44 -0
  68. package/dist/dexa.d.ts.map +1 -0
  69. package/dist/dexa.js +74 -0
  70. package/dist/dexa.js.map +1 -0
  71. package/dist/dexaCommand.d.ts +116 -0
  72. package/dist/dexaCommand.d.ts.map +1 -0
  73. package/dist/dexaCommand.js +226 -0
  74. package/dist/dexaCommand.js.map +1 -0
  75. package/dist/export/columns.d.ts +62 -0
  76. package/dist/export/columns.d.ts.map +1 -0
  77. package/dist/export/columns.js +127 -0
  78. package/dist/export/columns.js.map +1 -0
  79. package/dist/export/csv.d.ts +10 -0
  80. package/dist/export/csv.d.ts.map +1 -0
  81. package/dist/export/csv.js +30 -0
  82. package/dist/export/csv.js.map +1 -0
  83. package/dist/export/report.d.ts +19 -0
  84. package/dist/export/report.d.ts.map +1 -0
  85. package/dist/export/report.js +91 -0
  86. package/dist/export/report.js.map +1 -0
  87. package/dist/export/response.d.ts +14 -0
  88. package/dist/export/response.d.ts.map +1 -0
  89. package/dist/export/response.js +70 -0
  90. package/dist/export/response.js.map +1 -0
  91. package/dist/export/xlsx.d.ts +15 -0
  92. package/dist/export/xlsx.d.ts.map +1 -0
  93. package/dist/export/xlsx.js +167 -0
  94. package/dist/export/xlsx.js.map +1 -0
  95. package/dist/export/zip.d.ts +7 -0
  96. package/dist/export/zip.d.ts.map +1 -0
  97. package/dist/export/zip.js +83 -0
  98. package/dist/export/zip.js.map +1 -0
  99. package/dist/files.d.ts +52 -0
  100. package/dist/files.d.ts.map +1 -0
  101. package/dist/files.js +137 -0
  102. package/dist/files.js.map +1 -0
  103. package/dist/index.d.ts +31 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +35 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/jobs.d.ts +57 -0
  108. package/dist/jobs.d.ts.map +1 -0
  109. package/dist/jobs.js +157 -0
  110. package/dist/jobs.js.map +1 -0
  111. package/dist/log.d.ts +22 -0
  112. package/dist/log.d.ts.map +1 -0
  113. package/dist/log.js +107 -0
  114. package/dist/log.js.map +1 -0
  115. package/dist/notify.d.ts +41 -0
  116. package/dist/notify.d.ts.map +1 -0
  117. package/dist/notify.js +11 -0
  118. package/dist/notify.js.map +1 -0
  119. package/dist/org.d.ts +184 -0
  120. package/dist/org.d.ts.map +1 -0
  121. package/dist/org.js +114 -0
  122. package/dist/org.js.map +1 -0
  123. package/dist/people.d.ts +39 -0
  124. package/dist/people.d.ts.map +1 -0
  125. package/dist/people.js +88 -0
  126. package/dist/people.js.map +1 -0
  127. package/dist/problem.d.ts +12 -0
  128. package/dist/problem.d.ts.map +1 -0
  129. package/dist/problem.js +33 -0
  130. package/dist/problem.js.map +1 -0
  131. package/dist/runtime.d.ts +92 -0
  132. package/dist/runtime.d.ts.map +1 -0
  133. package/dist/runtime.js +8 -0
  134. package/dist/runtime.js.map +1 -0
  135. package/dist/scenarios.d.ts +125 -0
  136. package/dist/scenarios.d.ts.map +1 -0
  137. package/dist/scenarios.js +251 -0
  138. package/dist/scenarios.js.map +1 -0
  139. package/package.json +55 -3
@@ -0,0 +1,102 @@
1
+ // Devoplus yapay zekâsının gönderdiği araç girdisini, manifest'te beyan edilen şemaya göre ÇALIŞMA ANINDA doğrular (D-88 b).
2
+ // Şema bir JSON Schema ALT KÜMESİDİR: type · properties · required · enum · minimum · maximum · minLength · maxLength ·
3
+ // items · description. Şemanın kendisinin alt kümeye uyduğunu yayın kapısı (manifest doğrulaması) zaten denetler; burada
4
+ // yalnız GİRDİ denetlenir. Alt küme dışı bir anahtar yine de gelirse (elle kurulmuş manifest) SDK onu yok SAYMAZ, girdiyi
5
+ // reddeder — "denetlendi sanılan ama denetlenmeyen" bir kural bırakılmaz.
6
+ //
7
+ // ⚠️ Nesneler KAPALIDIR: şemada olmayan alan reddedilir (`additionalProperties: false` örtük). Model bir alan uydurursa
8
+ // işleyici onu hiç görmez; hata metni ajana hangi alanların geçerli olduğunu söyler.
9
+ //
10
+ // Anahtar listesi manifest paketindeki `AGENT_INPUT_KEYWORDS` ile birebirdir (SDK testi kilitler).
11
+ export const AGENT_INPUT_KEYWORDS = ['type', 'properties', 'required', 'enum', 'minimum', 'maximum', 'minLength', 'maxLength', 'items', 'description'];
12
+ /** Rapor tavanı: model bozuk bir girdi gönderdiğinde yanıt şişmesin. */
13
+ const MAX_ERRORS = 20;
14
+ const KEYWORDS = new Set(AGENT_INPUT_KEYWORDS);
15
+ function isPlainObject(value) {
16
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
17
+ }
18
+ function at(path, key) {
19
+ return path ? `${path}.${key}` : String(key);
20
+ }
21
+ function describe(value) {
22
+ if (value === null)
23
+ return 'null';
24
+ if (Array.isArray(value))
25
+ return 'dizi';
26
+ return typeof value;
27
+ }
28
+ /** Girdiyi şemaya göre denetler; boş dizi = geçerli. */
29
+ export function validateAgentInput(schema, input) {
30
+ const errors = [];
31
+ check(schema, input, '', errors);
32
+ return errors.slice(0, MAX_ERRORS);
33
+ }
34
+ function check(schema, value, path, out) {
35
+ if (out.length >= MAX_ERRORS)
36
+ return;
37
+ const where = path || '(kök)';
38
+ if (!isPlainObject(schema)) {
39
+ out.push({ path: where, message: 'araç şeması geçersiz' });
40
+ return;
41
+ }
42
+ for (const key of Object.keys(schema))
43
+ if (!KEYWORDS.has(key)) {
44
+ out.push({ path: where, message: `araç şeması desteklenmeyen "${key}" anahtarını taşıyor` });
45
+ return;
46
+ }
47
+ switch (schema.type) {
48
+ case 'string':
49
+ if (typeof value !== 'string')
50
+ return void out.push({ path: where, message: `metin bekleniyordu, ${describe(value)} geldi` });
51
+ if (typeof schema.minLength === 'number' && value.length < schema.minLength)
52
+ out.push({ path: where, message: `en az ${schema.minLength} karakter olmalı` });
53
+ if (typeof schema.maxLength === 'number' && value.length > schema.maxLength)
54
+ out.push({ path: where, message: `en çok ${schema.maxLength} karakter olabilir` });
55
+ break;
56
+ case 'number':
57
+ case 'integer':
58
+ if (typeof value !== 'number' || !Number.isFinite(value))
59
+ return void out.push({ path: where, message: `sayı bekleniyordu, ${describe(value)} geldi` });
60
+ if (schema.type === 'integer' && !Number.isSafeInteger(value))
61
+ out.push({ path: where, message: 'tam sayı olmalı' });
62
+ if (typeof schema.minimum === 'number' && value < schema.minimum)
63
+ out.push({ path: where, message: `en az ${schema.minimum} olmalı` });
64
+ if (typeof schema.maximum === 'number' && value > schema.maximum)
65
+ out.push({ path: where, message: `en çok ${schema.maximum} olabilir` });
66
+ break;
67
+ case 'boolean':
68
+ if (typeof value !== 'boolean')
69
+ return void out.push({ path: where, message: `true/false bekleniyordu, ${describe(value)} geldi` });
70
+ break;
71
+ case 'array': {
72
+ if (!Array.isArray(value))
73
+ return void out.push({ path: where, message: `dizi bekleniyordu, ${describe(value)} geldi` });
74
+ value.forEach((item, i) => check(schema.items, item, at(path, i), out));
75
+ break;
76
+ }
77
+ case 'object': {
78
+ if (!isPlainObject(value))
79
+ return void out.push({ path: where, message: `nesne bekleniyordu, ${describe(value)} geldi` });
80
+ const props = isPlainObject(schema.properties) ? schema.properties : {};
81
+ const required = Array.isArray(schema.required) ? schema.required.filter((r) => typeof r === 'string') : [];
82
+ for (const name of required)
83
+ if (!(name in value) || value[name] === undefined)
84
+ out.push({ path: at(path, name), message: 'zorunlu alan eksik' });
85
+ const known = Object.keys(props);
86
+ for (const [name, v] of Object.entries(value)) {
87
+ if (!Object.hasOwn(props, name)) {
88
+ out.push({ path: at(path, name), message: `bilinmeyen alan; geçerli alanlar: ${known.length ? known.join(', ') : '(yok)'}` });
89
+ continue;
90
+ }
91
+ check(props[name], v, at(path, name), out);
92
+ }
93
+ break;
94
+ }
95
+ default:
96
+ out.push({ path: where, message: 'araç şemasında "type" geçersiz' });
97
+ return;
98
+ }
99
+ if (Array.isArray(schema.enum) && !schema.enum.some((e) => e === value))
100
+ out.push({ path: where, message: `şu değerlerden biri olmalı: ${schema.enum.map((e) => JSON.stringify(e)).join(', ')}` });
101
+ }
102
+ //# sourceMappingURL=agentInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentInput.js","sourceRoot":"","sources":["../src/agentInput.ts"],"names":[],"mappings":"AAAA,6HAA6H;AAC7H,wHAAwH;AACxH,yHAAyH;AACzH,0HAA0H;AAC1H,0EAA0E;AAC1E,EAAE;AACF,wHAAwH;AACxH,qFAAqF;AACrF,EAAE;AACF,mGAAmG;AAEnG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,CAAU,CAAA;AAQ/J,wEAAwE;AACxE,MAAM,UAAU,GAAG,EAAE,CAAA;AACrB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAA;AAEtD,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,EAAE,CAAC,IAAY,EAAE,GAAoB;IAC5C,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC9C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAA;IACvC,OAAO,OAAO,KAAK,CAAA;AACrB,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,KAAc;IAChE,MAAM,MAAM,GAAsB,EAAE,CAAA;IACpC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,KAAK,CAAC,MAAe,EAAE,KAAc,EAAE,IAAY,EAAE,GAAsB;IAClF,IAAI,GAAG,CAAC,MAAM,IAAI,UAAU;QAAE,OAAM;IACpC,MAAM,KAAK,GAAG,IAAI,IAAI,OAAO,CAAA;IAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAA;QAC1D,OAAM;IACR,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,GAAG,sBAAsB,EAAE,CAAC,CAAA;YAC5F,OAAM;QACR,CAAC;IAEH,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC7H,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS;gBACzE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,MAAM,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAAA;YACjF,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS;gBACzE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAAA;YACpF,MAAK;QACP,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtD,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC/F,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACpH,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,MAAM,CAAC,OAAO,SAAS,EAAE,CAAC,CAAA;YACtI,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,OAAO,WAAW,EAAE,CAAC,CAAA;YACzI,MAAK;QACP,KAAK,SAAS;YACZ,IAAI,OAAO,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,4BAA4B,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;YACnI,MAAK;QACP,KAAK,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;YACxH,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YACvE,MAAK;QACP,CAAC;QACD,KAAK,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;YACzH,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;YACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YACxH,KAAK,MAAM,IAAI,IAAI,QAAQ;gBACzB,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;YACtH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;oBAChC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,qCAAqC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;oBAC7H,SAAQ;gBACV,CAAC;gBACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;YAC5C,CAAC;YACD,MAAK;QACP,CAAC;QACD;YACE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAA;YACpE,OAAM;IACV,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;QACrE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;AAC7H,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { type OneContext } from './context.ts';
2
+ /** Platformun uygulamaya ayırdığı yol öneki (yalnız imzalı ajan çağrısı ulaşır). */
3
+ export declare const AGENT_PATH_PREFIX = "/__one/agent/";
4
+ /** Platform kapısının imzalı ajan çağrısında yazdığı başlık ve değeri. */
5
+ export declare const AGENT_INVOKED_BY_HEADER = "x-one-invoked-by";
6
+ export declare const AGENT_INVOKED_BY = "devoplus-agent";
7
+ /** Uygulamanın ajan kataloğu (manifest `agent` bölümü + uygulama adı) ve ajan rehberi (`AGENT_GUIDE.md`). */
8
+ export declare const AGENT_CATALOG_PATH = "/.well-known/one-agent.json";
9
+ export declare const AGENT_GUIDE_PATH = "/.well-known/one-agent.md";
10
+ /** Araç çağrısı gövdesi tavanı (platform kapısıyla aynı). */
11
+ export declare const AGENT_BODY_MAX_BYTES: number;
12
+ /** Rehber tavanı (Devoplus'ın okuduğu en çok boyut). */
13
+ export declare const AGENT_GUIDE_MAX_BYTES: number;
14
+ /** Araç adı biçimi (manifest `AGENT_TOOL_NAME_RE` ile birebir; SDK testi kilitler). */
15
+ export declare const AGENT_TOOL_NAME_RE: RegExp;
16
+ interface Localized {
17
+ tr: string;
18
+ en?: string;
19
+ }
20
+ /** Manifest'in SDK'nın okuduğu kısmı (uygulama `one.manifest.json`'u doğrudan verir). */
21
+ export interface AgentManifest {
22
+ app: {
23
+ slug: string;
24
+ name: Localized;
25
+ };
26
+ agent?: {
27
+ summary: Localized;
28
+ tools?: ReadonlyArray<{
29
+ name: string;
30
+ title: Localized;
31
+ description: Localized;
32
+ readOnly: boolean;
33
+ permission?: string;
34
+ input: unknown;
35
+ }>;
36
+ };
37
+ }
38
+ export interface AgentToolCall<Env> {
39
+ /** Şemaya göre doğrulanmış girdi. */
40
+ input: Record<string, unknown>;
41
+ /**
42
+ * Kullanıcının kimlik bağlamı (araç kullanıcının adına çalışır; `ctx.user` her zaman doludur, `ctx.mode` `'agent'`).
43
+ * `ctx.admin`: çağıran kişi kurulumun portalının şirket yöneticisi (`hasPermission` her kodda `true`). `ctx.actor`:
44
+ * Vekalet / Yerine Görüntüle oturumunda işlemi yapan kişi (değişiklik yapan araç o oturumda zaten çağrılamaz).
45
+ * Devoplus servisleri (yapay zekâ, DEXA okuma, kişiler…) kişi adına çağrılabilir; süreli onay gerektirenler (e-posta,
46
+ * SMS, mobil bildirim, DEXA'ya yazma) ajan aracında KULLANILAMAZ.
47
+ */
48
+ ctx: OneContext;
49
+ env: Env;
50
+ }
51
+ export interface AgentToolDefinition<Env> {
52
+ /** JSON'a çevrilebilir bir değer döndürür; Devoplus ajanı bunu okur. Kişisel veriyi yalnız iş gerektiriyorsa döndürün. */
53
+ handler(call: AgentToolCall<Env>): unknown | Promise<unknown>;
54
+ }
55
+ export type AgentTools<Env> = Readonly<Record<string, AgentToolDefinition<Env>>>;
56
+ /** Araç işleyicilerini tanımlar; adlar manifest `agent.tools[].name` ile AYNI olmalıdır. Biçimsiz ad hemen fırlatır. */
57
+ export declare function defineAgentTools<Env>(tools: Record<string, AgentToolDefinition<Env>>): AgentTools<Env>;
58
+ /**
59
+ * Yol `/__one/agent/` ile başlamıyorsa `null` (uygulama kendi yönlendirmesine devam eder); başlıyorsa yanıt üretir.
60
+ */
61
+ export declare function handleAgentRequest<Env>(request: Request, env: Env, tools: AgentTools<Env>, manifest: AgentManifest): Promise<Response | null>;
62
+ /** `/.well-known/one-agent.json` gövdesi: uygulamanın kısa adı + adı + `agent` bölümü. Başka alan YOKTUR. */
63
+ export declare function agentCatalog(manifest: AgentManifest): {
64
+ app: {
65
+ slug: string;
66
+ name: Localized;
67
+ };
68
+ agent: {
69
+ summary: Localized;
70
+ tools: unknown[];
71
+ };
72
+ } | null;
73
+ /**
74
+ * `GET /.well-known/one-agent.json` (ajan kataloğu) ve `GET /.well-known/one-agent.md` (ajan rehberi `AGENT_GUIDE.md`)
75
+ * yanıtlarını üretir; başka yol ya da yöntem için `null`. Oturum İSTEMEZ (Devoplus kataloğu oturumsuz okur; içerik
76
+ * zaten manifest ve rehberdir — kullanıcı verisi taşımaz). Manifest `agent` bölümü yoksa ya da rehber boşsa 404.
77
+ *
78
+ * Rehber derlemede gömülür: `import guide from '../AGENT_GUIDE.md' with { type: 'text' }` (`one build` ve yayın aynı
79
+ * paketleyiciyi kullanır).
80
+ */
81
+ export declare function agentManifestResponse(request: Request, manifest: AgentManifest, guide: string): Response | null;
82
+ export {};
83
+ //# sourceMappingURL=agentTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentTools.d.ts","sourceRoot":"","sources":["../src/agentTools.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAqD,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAKjG,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,kBAAkB,CAAA;AAChD,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,qBAAqB,CAAA;AACzD,eAAO,MAAM,gBAAgB,mBAAmB,CAAA;AAChD,6GAA6G;AAC7G,eAAO,MAAM,kBAAkB,gCAAgC,CAAA;AAC/D,eAAO,MAAM,gBAAgB,8BAA8B,CAAA;AAC3D,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,QAAa,CAAA;AAC9C,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,QAAa,CAAA;AAC/C,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,QAA2B,CAAA;AAE1D,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAA;IACtC,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,SAAS,CAAA;QAClB,KAAK,CAAC,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE,MAAM,CAAA;YACZ,KAAK,EAAE,SAAS,CAAA;YAChB,WAAW,EAAE,SAAS,CAAA;YACtB,QAAQ,EAAE,OAAO,CAAA;YACjB,UAAU,CAAC,EAAE,MAAM,CAAA;YACnB,KAAK,EAAE,OAAO,CAAA;SACf,CAAC,CAAA;KACH,CAAA;CACF;AAED,MAAM,WAAW,aAAa,CAAC,GAAG;IAChC,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;;;;;OAMG;IACH,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,GAAG,CAAA;CACT;AAED,MAAM,WAAW,mBAAmB,CAAC,GAAG;IACtC,0HAA0H;IAC1H,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9D;AAED,MAAM,MAAM,UAAU,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAEhF,wHAAwH;AACxH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAOtG;AAaD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAC1C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA6C1B;AAED,6GAA6G;AAC7G,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG;IAAE,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE;QAAE,OAAO,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CAaxJ;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAoB/G"}
@@ -0,0 +1,164 @@
1
+ // Devoplus yapay zekâsı → uygulama (karar defteri D-88 b/c — ÖNERİ). Devoplus ajanı, kullanıcının kendi oturumuyla
2
+ // Devoplus'a gelir; Devoplus kurulumu, uygulama iznini ve aracın beyanını denetleyip isteği platform kapısına İMZALI
3
+ // iletir; kapı imzayı doğrular ve isteği uygulamaya `POST /__one/agent/<araç>` olarak, KULLANICININ kimliğiyle verir.
4
+ // Yani araç, kullanıcının uygulamanın ekranında yapabileceğinden fazlasını yapamaz.
5
+ //
6
+ // Uygulama tarafı:
7
+ // const tools = defineAgentTools<Env>({ 'list-notes': { handler: async ({ input, ctx, env }) => ({ notes: [] }) } })
8
+ // export default { async fetch(request, env) {
9
+ // const agent = (await handleAgentRequest(request, env, tools, manifest)) ?? agentManifestResponse(request, manifest, guide)
10
+ // if (agent) return agent
11
+ // …
12
+ // } }
13
+ //
14
+ // Araçların ADI, açıklaması, girdi şeması, `readOnly` ve izni manifest `agent.tools[]`'tadır (tek kaynak); burada yalnız
15
+ // işleyici yazılır. Manifest'te beyan edilmeyen araç çağrılamaz (404) — kodda tanımlı olsa bile.
16
+ //
17
+ // SDK'nın kapıları (sırayla): yol `/__one/agent/<ad>` · `X-One-Invoked-By: devoplus-agent` (yalnız platform kapısının
18
+ // imzalı yolu yazar; tarayıcıdan gelen aynı başlık kapıda silinir) · yalnız POST · araç manifest'te VE kodda · oturum ·
19
+ // `readOnly: false` araç Vekalet / Yerine Görüntüle oturumunda KAPALI · aracın izni · girdi şemaya uygun. Bu kapılar
20
+ // platformunkilerin YERİNE değil YANINDADIR (savunma derinliği).
21
+ import { OneError, hasPermission, readContext, requireUser } from './context.js';
22
+ import { validateAgentInput } from './agentInput.js';
23
+ import { readBoundedBody } from './files.js';
24
+ import { problemResponse } from './problem.js';
25
+ /** Platformun uygulamaya ayırdığı yol öneki (yalnız imzalı ajan çağrısı ulaşır). */
26
+ export const AGENT_PATH_PREFIX = '/__one/agent/';
27
+ /** Platform kapısının imzalı ajan çağrısında yazdığı başlık ve değeri. */
28
+ export const AGENT_INVOKED_BY_HEADER = 'x-one-invoked-by';
29
+ export const AGENT_INVOKED_BY = 'devoplus-agent';
30
+ /** Uygulamanın ajan kataloğu (manifest `agent` bölümü + uygulama adı) ve ajan rehberi (`AGENT_GUIDE.md`). */
31
+ export const AGENT_CATALOG_PATH = '/.well-known/one-agent.json';
32
+ export const AGENT_GUIDE_PATH = '/.well-known/one-agent.md';
33
+ /** Araç çağrısı gövdesi tavanı (platform kapısıyla aynı). */
34
+ export const AGENT_BODY_MAX_BYTES = 256 * 1024;
35
+ /** Rehber tavanı (Devoplus'ın okuduğu en çok boyut). */
36
+ export const AGENT_GUIDE_MAX_BYTES = 256 * 1024;
37
+ /** Araç adı biçimi (manifest `AGENT_TOOL_NAME_RE` ile birebir; SDK testi kilitler). */
38
+ export const AGENT_TOOL_NAME_RE = /^[a-z][a-z0-9-]{1,39}$/;
39
+ /** Araç işleyicilerini tanımlar; adlar manifest `agent.tools[].name` ile AYNI olmalıdır. Biçimsiz ad hemen fırlatır. */
40
+ export function defineAgentTools(tools) {
41
+ for (const [name, def] of Object.entries(tools)) {
42
+ if (!AGENT_TOOL_NAME_RE.test(name))
43
+ throw new OneError(500, 'ONE-SDK-E-090', `Araç adı geçersiz: "${name}" (küçük harfle başlar, küçük harf/rakam/"-", 2-40 karakter).`);
44
+ if (!def || typeof def.handler !== 'function')
45
+ throw new OneError(500, 'ONE-SDK-E-090', `"${name}" aracının işleyicisi (handler) yok.`);
46
+ }
47
+ return Object.freeze({ ...tools });
48
+ }
49
+ function agentNotFound() {
50
+ // Kapıların hepsi AYNI yanıtı verir: araç adı yoklanamaz, "var ama size kapalı" sızmaz.
51
+ return problemResponse(new OneError(404, 'ONE-SDK-E-091', 'Bulunamadı.'));
52
+ }
53
+ /** Girdi hatası: alan yollarıyla 400 (ajan düzeltip yeniden dener). */
54
+ function inputProblem(errors) {
55
+ const body = { type: 'about:blank', title: 'ONE-SDK-E-094', status: 400, detail: 'Araç girdisi geçersiz.', code: 'ONE-SDK-E-094', errors };
56
+ return new Response(JSON.stringify(body), { status: 400, headers: { 'content-type': 'application/problem+json; charset=utf-8' } });
57
+ }
58
+ /**
59
+ * Yol `/__one/agent/` ile başlamıyorsa `null` (uygulama kendi yönlendirmesine devam eder); başlıyorsa yanıt üretir.
60
+ */
61
+ export async function handleAgentRequest(request, env, tools, manifest) {
62
+ const pathname = new URL(request.url).pathname;
63
+ if (!pathname.startsWith(AGENT_PATH_PREFIX))
64
+ return null;
65
+ if (request.headers.get(AGENT_INVOKED_BY_HEADER) !== AGENT_INVOKED_BY)
66
+ return agentNotFound();
67
+ if (request.method !== 'POST')
68
+ return agentNotFound();
69
+ const name = pathname.slice(AGENT_PATH_PREFIX.length);
70
+ if (!AGENT_TOOL_NAME_RE.test(name))
71
+ return agentNotFound();
72
+ const declared = manifest.agent?.tools?.find((t) => t.name === name);
73
+ if (!declared)
74
+ return agentNotFound();
75
+ const tool = Object.hasOwn(tools, name) ? tools[name] : undefined;
76
+ let ctx;
77
+ try {
78
+ if (!tool)
79
+ throw new OneError(501, 'ONE-SDK-E-092', `"${name}" aracı manifest'te beyan edilmiş ama işleyicisi tanımlanmamış (defineAgentTools).`);
80
+ ctx = readContext(request.headers);
81
+ requireUser(ctx);
82
+ if (!declared.readOnly && ctx.actor)
83
+ throw new OneError(403, 'ONE-SDK-E-095', 'Bu araç değişiklik yapar; Vekalet ya da Yerine Görüntüle oturumunda kullanılamaz. Değişiklik için kendi hesabınıza dönün.');
84
+ if (declared.permission && !hasPermission(ctx, declared.permission))
85
+ throw new OneError(403, 'ONE-SDK-E-004', `Bu araç için "${declared.permission}" izni gerekir.`);
86
+ let raw;
87
+ try {
88
+ raw = await readBoundedBody(request, AGENT_BODY_MAX_BYTES);
89
+ }
90
+ catch {
91
+ throw new OneError(413, 'ONE-SDK-E-093', `Araç girdisi en çok ${AGENT_BODY_MAX_BYTES} bayt olabilir.`);
92
+ }
93
+ const text = new TextDecoder().decode(raw);
94
+ let input = {};
95
+ if (text.trim()) {
96
+ try {
97
+ input = JSON.parse(text);
98
+ }
99
+ catch {
100
+ throw new OneError(400, 'ONE-SDK-E-093', 'Araç girdisi geçerli JSON değil.');
101
+ }
102
+ }
103
+ const errors = validateAgentInput(declared.input, input);
104
+ if (errors.length > 0)
105
+ return inputProblem(errors);
106
+ const result = await tool.handler({ input: input, ctx, env });
107
+ return new Response(JSON.stringify(result ?? null), {
108
+ headers: { 'content-type': 'application/json; charset=utf-8', 'cache-control': 'no-store' },
109
+ });
110
+ }
111
+ catch (error) {
112
+ return problemResponse(error, ctx);
113
+ }
114
+ }
115
+ /** `/.well-known/one-agent.json` gövdesi: uygulamanın kısa adı + adı + `agent` bölümü. Başka alan YOKTUR. */
116
+ export function agentCatalog(manifest) {
117
+ if (!manifest.agent)
118
+ return null;
119
+ return {
120
+ app: { slug: manifest.app.slug, name: manifest.app.name },
121
+ agent: {
122
+ summary: manifest.agent.summary,
123
+ tools: (manifest.agent.tools ?? []).map((t) => {
124
+ const tool = { name: t.name, title: t.title, description: t.description, readOnly: t.readOnly, input: t.input };
125
+ if (t.permission)
126
+ tool.permission = t.permission;
127
+ return tool;
128
+ }),
129
+ },
130
+ };
131
+ }
132
+ /**
133
+ * `GET /.well-known/one-agent.json` (ajan kataloğu) ve `GET /.well-known/one-agent.md` (ajan rehberi `AGENT_GUIDE.md`)
134
+ * yanıtlarını üretir; başka yol ya da yöntem için `null`. Oturum İSTEMEZ (Devoplus kataloğu oturumsuz okur; içerik
135
+ * zaten manifest ve rehberdir — kullanıcı verisi taşımaz). Manifest `agent` bölümü yoksa ya da rehber boşsa 404.
136
+ *
137
+ * Rehber derlemede gömülür: `import guide from '../AGENT_GUIDE.md' with { type: 'text' }` (`one build` ve yayın aynı
138
+ * paketleyiciyi kullanır).
139
+ */
140
+ export function agentManifestResponse(request, manifest, guide) {
141
+ if (request.method !== 'GET' && request.method !== 'HEAD')
142
+ return null;
143
+ const pathname = new URL(request.url).pathname;
144
+ const headers = { 'cache-control': 'public, max-age=300', 'x-content-type-options': 'nosniff' };
145
+ if (pathname === AGENT_CATALOG_PATH) {
146
+ const catalog = agentCatalog(manifest);
147
+ if (!catalog)
148
+ return agentNotFound();
149
+ return new Response(request.method === 'HEAD' ? null : JSON.stringify(catalog), {
150
+ headers: { ...headers, 'content-type': 'application/json; charset=utf-8' },
151
+ });
152
+ }
153
+ if (pathname === AGENT_GUIDE_PATH) {
154
+ if (!manifest.agent || !guide.trim())
155
+ return agentNotFound();
156
+ if (new TextEncoder().encode(guide).byteLength > AGENT_GUIDE_MAX_BYTES)
157
+ return problemResponse(new OneError(500, 'ONE-SDK-E-096', `Ajan rehberi en çok ${AGENT_GUIDE_MAX_BYTES} bayt olabilir.`));
158
+ return new Response(request.method === 'HEAD' ? null : guide, {
159
+ headers: { ...headers, 'content-type': 'text/markdown; charset=utf-8' },
160
+ });
161
+ }
162
+ return null;
163
+ }
164
+ //# sourceMappingURL=agentTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentTools.js","sourceRoot":"","sources":["../src/agentTools.ts"],"names":[],"mappings":"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"}
package/dist/ai.d.ts ADDED
@@ -0,0 +1,67 @@
1
+ import type { BackendClient } from './backend.ts';
2
+ import { type OneContext } from './context.ts';
3
+ export declare const AI_SCOPE = "ai.use";
4
+ export declare const AI_TASKS: readonly ['summarize', 'classify', 'extract', 'generate', 'chat'];
5
+ export declare const AI_INPUT_MAX_LENGTH = 24000;
6
+ export declare const AI_INSTRUCTIONS_MAX_LENGTH = 4000;
7
+ export declare const AI_LABELS_MAX = 50;
8
+ /** Bir sınıf etiketinin en çok karakteri (ÖNERİ — sunucu sözleşmesinde tanımlı değil; dar taraf seçildi). */
9
+ export declare const AI_LABEL_MAX_LENGTH = 100;
10
+ export declare const AI_SCHEMA_MAX_BYTES: number;
11
+ export declare const AI_MESSAGES_MAX = 20;
12
+ export type OneAiTask = (typeof AI_TASKS)[number];
13
+ export interface OneAiMessage {
14
+ role: 'user' | 'assistant';
15
+ content: string;
16
+ }
17
+ export interface OneAiRequest {
18
+ /** İş: özet · sınıflandırma (`labels` ister) · alan çıkarma (`schema` ister) · metin üretme · sohbet (`messages`). */
19
+ task: OneAiTask;
20
+ /** İşlenecek metin (1-24.000 karakter). */
21
+ input: string;
22
+ /** Ek talimat (ör. "üç maddede, resmî dille"); ≤ 4.000 karakter. */
23
+ instructions?: string;
24
+ /** Yanıt dili; verilmezse sunucu karar verir. */
25
+ lang?: 'tr' | 'en';
26
+ /** Yalnız `classify`: seçilebilecek etiketler (2-50, tekil). */
27
+ labels?: readonly string[];
28
+ /** Yalnız `extract`: çıkarılacak alanların JSON şeması (nesne, ≤ 8 KiB). */
29
+ schema?: Record<string, unknown>;
30
+ /** Yalnız `chat`: önceki konuşma (en çok 20 ileti). */
31
+ messages?: readonly OneAiMessage[];
32
+ }
33
+ export interface OneAiResult {
34
+ /** Modelin metin çıktısı. */
35
+ output: string;
36
+ /** `extract` sonucunun ayrıştırılmış hâli (sunucu verdiyse). */
37
+ json?: unknown;
38
+ /** `classify` sonucunda seçilen etiket (sunucu verdiyse; her zaman `labels` içinden). */
39
+ label?: string;
40
+ /** Sunucunun seçtiği model. */
41
+ model: string;
42
+ usage: {
43
+ inputTokens: number;
44
+ outputTokens: number;
45
+ };
46
+ }
47
+ /** Sunucuya giden gövdeyi doğrular ve kurar; hatalı girdi fırlatır (istek hiç gitmez). */
48
+ export declare function buildAiRequest(request: OneAiRequest): Record<string, unknown>;
49
+ /**
50
+ * Yanıtı sözleşmeye indirger. `output` metin değilse ya da `model` yoksa yanıt TANINMAZ ve `ONE-SDK-E-086` fırlatılır —
51
+ * bilinmeyen bir yanıtı boş bir öneri gibi göstermek uygulamayı yanlış bir karara götürürdü.
52
+ */
53
+ export declare function normalizeAiResult(raw: unknown): OneAiResult;
54
+ /**
55
+ * Devoplus yapay zekâsına bir iş gönderir (`POST One/services/ai`, scope `ai.use`). Kullanıcı, portal ve uygulama
56
+ * istekle GÖNDERİLMEZ — backend bunları doğrulanmış platform bağlamından alır.
57
+ *
58
+ * ```ts
59
+ * const { output } = await completeAi(api, ctx, { task: 'summarize', input: metin, lang: 'tr' })
60
+ * ```
61
+ */
62
+ export declare function completeAi(api: Pick<BackendClient, 'request'>, ctx: OneContext, request: OneAiRequest): Promise<OneAiResult>;
63
+ /** `ai.complete(api, ctx, istek)` — `completeAi` ile aynı. */
64
+ export declare const ai: {
65
+ readonly complete: typeof completeAi;
66
+ };
67
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAE7E,eAAO,MAAM,QAAQ,WAAW,CAAA;AAChC,eAAO,MAAM,QAAQ,YAAI,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAU,CAAA;AACzF,eAAO,MAAM,mBAAmB,QAAS,CAAA;AACzC,eAAO,MAAM,0BAA0B,OAAQ,CAAA;AAC/C,eAAO,MAAM,aAAa,KAAK,CAAA;AAC/B,6GAA6G;AAC7G,eAAO,MAAM,mBAAmB,MAAM,CAAA;AACtC,eAAO,MAAM,mBAAmB,QAAW,CAAA;AAC3C,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,sHAAsH;IACtH,IAAI,EAAE,SAAS,CAAA;IACf,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iDAAiD;IACjD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IAClB,gEAAgE;IAChE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,gEAAgE;IAChE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CACrD;AAUD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8D7E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAc3D;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAMlI;AAED,8DAA8D;AAC9D,eAAO,MAAM,EAAE;aAAK,QAAQ;CAAuB,CAAA"}
package/dist/ai.js ADDED
@@ -0,0 +1,129 @@
1
+ import { OneError, requireServiceScope } from './context.js';
2
+ export const AI_SCOPE = 'ai.use';
3
+ export const AI_TASKS = ['summarize', 'classify', 'extract', 'generate', 'chat'];
4
+ export const AI_INPUT_MAX_LENGTH = 24_000;
5
+ export const AI_INSTRUCTIONS_MAX_LENGTH = 4_000;
6
+ export const AI_LABELS_MAX = 50;
7
+ /** Bir sınıf etiketinin en çok karakteri (ÖNERİ — sunucu sözleşmesinde tanımlı değil; dar taraf seçildi). */
8
+ export const AI_LABEL_MAX_LENGTH = 100;
9
+ export const AI_SCHEMA_MAX_BYTES = 8 * 1024;
10
+ export const AI_MESSAGES_MAX = 20;
11
+ function fail(code, detail, status = 400) {
12
+ throw new OneError(status, code, detail);
13
+ }
14
+ function utf8Bytes(text) {
15
+ return new TextEncoder().encode(text).byteLength;
16
+ }
17
+ /** Sunucuya giden gövdeyi doğrular ve kurar; hatalı girdi fırlatır (istek hiç gitmez). */
18
+ export function buildAiRequest(request) {
19
+ if (request === null || typeof request !== 'object')
20
+ fail('ONE-SDK-E-080', 'Yapay zekâ isteği bir nesne olmalıdır.');
21
+ const { task } = request;
22
+ if (!AI_TASKS.includes(task))
23
+ fail('ONE-SDK-E-080', `Yapay zekâ işi şunlardan biri olmalıdır: ${AI_TASKS.join(', ')}.`);
24
+ if (typeof request.input !== 'string' || request.input.trim().length === 0)
25
+ fail('ONE-SDK-E-081', 'Yapay zekâya gönderilecek metin (input) boş olamaz.');
26
+ if (request.input.length > AI_INPUT_MAX_LENGTH)
27
+ fail('ONE-SDK-E-081', `Yapay zekâya gönderilecek metin en çok ${AI_INPUT_MAX_LENGTH} karakter olabilir (${request.input.length}).`, 413);
28
+ const body = { task, input: request.input };
29
+ if (request.instructions !== undefined) {
30
+ if (typeof request.instructions !== 'string' || request.instructions.length > AI_INSTRUCTIONS_MAX_LENGTH)
31
+ fail('ONE-SDK-E-082', `Talimat (instructions) en çok ${AI_INSTRUCTIONS_MAX_LENGTH} karakterlik metin olabilir.`);
32
+ if (request.instructions.trim())
33
+ body.instructions = request.instructions;
34
+ }
35
+ if (request.lang !== undefined) {
36
+ if (request.lang !== 'tr' && request.lang !== 'en')
37
+ fail('ONE-SDK-E-082', 'Yanıt dili (lang) "tr" ya da "en" olmalıdır.');
38
+ body.lang = request.lang;
39
+ }
40
+ if (task === 'classify') {
41
+ const labels = request.labels;
42
+ if (!Array.isArray(labels) || labels.length < 2 || labels.length > AI_LABELS_MAX)
43
+ fail('ONE-SDK-E-083', `Sınıflandırma için 2-${AI_LABELS_MAX} etiket (labels) verilmelidir.`);
44
+ const seen = new Set();
45
+ for (const label of labels) {
46
+ if (typeof label !== 'string' || label.trim().length === 0 || label.length > AI_LABEL_MAX_LENGTH)
47
+ fail('ONE-SDK-E-083', `Her etiket 1-${AI_LABEL_MAX_LENGTH} karakterlik metin olmalıdır.`);
48
+ if (seen.has(label))
49
+ fail('ONE-SDK-E-083', `"${label}" etiketi birden çok kez yazılmış.`);
50
+ seen.add(label);
51
+ }
52
+ body.labels = [...labels];
53
+ }
54
+ else if (request.labels !== undefined)
55
+ fail('ONE-SDK-E-083', 'Etiketler (labels) yalnız "classify" işinde verilir.');
56
+ if (task === 'extract') {
57
+ const schema = request.schema;
58
+ if (schema === null || typeof schema !== 'object' || Array.isArray(schema))
59
+ fail('ONE-SDK-E-084', 'Alan çıkarma için çıkarılacak alanların şeması (schema) bir JSON nesnesi olarak verilmelidir.');
60
+ let serialized;
61
+ try {
62
+ serialized = JSON.stringify(schema);
63
+ }
64
+ catch {
65
+ fail('ONE-SDK-E-084', 'Şema (schema) JSON\'a çevrilemiyor.');
66
+ }
67
+ const bytes = utf8Bytes(serialized);
68
+ if (bytes > AI_SCHEMA_MAX_BYTES)
69
+ fail('ONE-SDK-E-084', `Şema (schema) en çok ${AI_SCHEMA_MAX_BYTES} bayt olabilir (${bytes}).`, 413);
70
+ body.schema = schema;
71
+ }
72
+ else if (request.schema !== undefined)
73
+ fail('ONE-SDK-E-084', 'Şema (schema) yalnız "extract" işinde verilir.');
74
+ if (task === 'chat') {
75
+ const messages = request.messages ?? [];
76
+ if (!Array.isArray(messages) || messages.length > AI_MESSAGES_MAX)
77
+ fail('ONE-SDK-E-085', `Sohbet geçmişi (messages) en çok ${AI_MESSAGES_MAX} ileti olabilir.`);
78
+ for (const m of messages) {
79
+ if (m === null || typeof m !== 'object' || (m.role !== 'user' && m.role !== 'assistant') || typeof m.content !== 'string' || !m.content.trim())
80
+ fail('ONE-SDK-E-085', 'Her sohbet iletisi { role: "user" | "assistant", content: dolu metin } olmalıdır.');
81
+ }
82
+ if (messages.length > 0)
83
+ body.messages = messages.map((m) => ({ role: m.role, content: m.content }));
84
+ }
85
+ else if (request.messages !== undefined)
86
+ fail('ONE-SDK-E-085', 'Sohbet geçmişi (messages) yalnız "chat" işinde verilir.');
87
+ return body;
88
+ }
89
+ /**
90
+ * Yanıtı sözleşmeye indirger. `output` metin değilse ya da `model` yoksa yanıt TANINMAZ ve `ONE-SDK-E-086` fırlatılır —
91
+ * bilinmeyen bir yanıtı boş bir öneri gibi göstermek uygulamayı yanlış bir karara götürürdü.
92
+ */
93
+ export function normalizeAiResult(raw) {
94
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
95
+ fail('ONE-SDK-E-086', 'Yapay zekâ yanıtı tanınmadı.', 502);
96
+ const r = raw;
97
+ if (typeof r.output !== 'string' || typeof r.model !== 'string')
98
+ fail('ONE-SDK-E-086', 'Yapay zekâ yanıtı tanınmadı.', 502);
99
+ const usage = (r.usage ?? {});
100
+ const count = (v) => (typeof v === 'number' && Number.isFinite(v) && v >= 0 ? v : 0);
101
+ const result = {
102
+ output: r.output,
103
+ model: r.model,
104
+ usage: { inputTokens: count(usage.inputTokens), outputTokens: count(usage.outputTokens) },
105
+ };
106
+ if ('json' in r && r.json !== undefined)
107
+ result.json = r.json;
108
+ if (typeof r.label === 'string')
109
+ result.label = r.label;
110
+ return result;
111
+ }
112
+ /**
113
+ * Devoplus yapay zekâsına bir iş gönderir (`POST One/services/ai`, scope `ai.use`). Kullanıcı, portal ve uygulama
114
+ * istekle GÖNDERİLMEZ — backend bunları doğrulanmış platform bağlamından alır.
115
+ *
116
+ * ```ts
117
+ * const { output } = await completeAi(api, ctx, { task: 'summarize', input: metin, lang: 'tr' })
118
+ * ```
119
+ */
120
+ export async function completeAi(api, ctx, request) {
121
+ // Kullanıcı isteği, ajan aracı (kişi adına) ve arka plan işi (uygulama kimliğiyle; `jobs.services` + kurulum onayı).
122
+ requireServiceScope(ctx, AI_SCOPE);
123
+ const body = buildAiRequest(request);
124
+ const raw = await api.request('One/services/ai', { method: 'POST', body: JSON.stringify(body) });
125
+ return normalizeAiResult(raw);
126
+ }
127
+ /** `ai.complete(api, ctx, istek)` — `completeAi` ile aynı. */
128
+ export const ai = { complete: completeAi };
129
+ //# sourceMappingURL=ai.js.map
package/dist/ai.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { BackendClient } from './backend.ts';
2
+ import { type OneContext } from './context.ts';
3
+ export declare const AUDIT_ACTION_MAX_LENGTH = 64;
4
+ export declare const AUDIT_TARGET_MAX_LENGTH = 200;
5
+ export declare const AUDIT_DATA_MAX_BYTES = 4096;
6
+ export interface AuditResult {
7
+ /** Kayıt backend denetim yazıcısına TESLİM edildi mi (yazıcı best-effort — "diske yazıldı" değil "kabul edildi"). */
8
+ recorded: boolean;
9
+ }
10
+ /** Sunucuya giden gövdeyi doğrular ve kurar; hatalı girdi fırlatır (uzak yazmadan ÖNCE, istek hiç gitmez). */
11
+ export declare function buildAuditRequest(action: string, target?: string, data?: Record<string, unknown>): {
12
+ action: string;
13
+ target?: string;
14
+ data?: Record<string, unknown>;
15
+ };
16
+ /**
17
+ * Kritik kullanıcı işlemini Devoplus denetim günlüğüne yazar (console izi + backend). Aktör, portal ve uygulama
18
+ * istekle GÖNDERİLMEZ — backend bunları doğrulanmış platform bağlamından alır.
19
+ */
20
+ export declare function recordAudit(api: Pick<BackendClient, 'request'>, ctx: OneContext, action: string, target?: string, data?: Record<string, unknown>): Promise<AuditResult>;
21
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAGxD,eAAO,MAAM,uBAAuB,KAAK,CAAA;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAC1C,eAAO,MAAM,oBAAoB,OAAO,CAAA;AAIxC,MAAM,WAAW,WAAW;IAC1B,qHAAqH;IACrH,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,8GAA8G;AAC9G,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CA0BtK;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EACnC,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,WAAW,CAAC,CActB"}