@onetype/framework 2.0.41 → 2.0.42

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 (119) hide show
  1. package/addons/ai/agents/addon.js +23 -0
  2. package/addons/ai/agents/functions/parse.js +129 -0
  3. package/addons/ai/agents/item/functions/run.js +218 -0
  4. package/addons/ai/agents/load.js +8 -0
  5. package/addons/ai/orchestrator/addon.js +25 -0
  6. package/addons/ai/orchestrator/item/functions/run.js +277 -0
  7. package/addons/ai/orchestrator/item/functions/state/agent.js +41 -0
  8. package/addons/ai/orchestrator/item/functions/state/conclusion.js +27 -0
  9. package/addons/ai/orchestrator/item/functions/state/done.js +40 -0
  10. package/addons/ai/orchestrator/item/functions/state/execute.js +16 -0
  11. package/addons/ai/orchestrator/item/functions/state/goal.js +34 -0
  12. package/addons/ai/orchestrator/item/functions/state/input.js +55 -0
  13. package/addons/ai/orchestrator/item/functions/state/summary.js +26 -0
  14. package/addons/ai/orchestrator/items/agents/achievable.js +37 -0
  15. package/addons/ai/orchestrator/items/agents/agent.js +46 -0
  16. package/addons/ai/orchestrator/items/agents/conclusion.js +41 -0
  17. package/addons/ai/orchestrator/items/agents/done.js +40 -0
  18. package/addons/ai/orchestrator/items/agents/goal.js +58 -0
  19. package/addons/ai/orchestrator/items/agents/input.js +34 -0
  20. package/addons/ai/orchestrator/items/agents/planner.js +30 -0
  21. package/addons/ai/orchestrator/items/agents/summary.js +29 -0
  22. package/addons/ai/orchestrator/items/chat.js +10 -0
  23. package/addons/ai/orchestrator/load.js +25 -0
  24. package/addons/ai/providers/addon.js +16 -0
  25. package/addons/ai/providers/functions/default.js +14 -0
  26. package/addons/ai/providers/item/functions/request.js +62 -0
  27. package/addons/ai/providers/items/nue.js +98 -0
  28. package/addons/ai/providers/load.js +10 -0
  29. package/addons/render/elements/front/functions/runtime.js +25 -0
  30. package/lib/browser.js +1 -24
  31. package/lib/items/directives/160-slot.js +1 -1
  32. package/lib/items/directives/500-click-outside.js +43 -43
  33. package/lib/items/elements/ai/chat/chat.css +710 -0
  34. package/lib/items/elements/ai/chat/chat.js +429 -0
  35. package/lib/items/elements/cards/pricing/pricing.css +174 -0
  36. package/lib/items/elements/{sections → cards}/pricing/pricing.js +30 -11
  37. package/lib/items/elements/form/button/button.css +250 -0
  38. package/lib/items/elements/form/button/button.js +15 -20
  39. package/lib/items/elements/form/checkbox/checkbox.css +109 -0
  40. package/lib/items/elements/form/checkbox/checkbox.js +58 -54
  41. package/lib/items/elements/form/color/color.css +128 -0
  42. package/lib/items/elements/form/color/color.js +100 -0
  43. package/lib/items/elements/form/date/date.css +84 -0
  44. package/lib/items/elements/form/date/date.js +69 -0
  45. package/lib/items/elements/form/field/field.css +33 -57
  46. package/lib/items/elements/form/field/field.js +4 -4
  47. package/lib/items/elements/form/input/input.css +59 -84
  48. package/lib/items/elements/form/input/input.js +84 -75
  49. package/lib/items/elements/form/radio/radio.css +118 -0
  50. package/lib/items/elements/form/radio/radio.js +58 -54
  51. package/lib/items/elements/form/rating/rating.css +28 -66
  52. package/lib/items/elements/form/rating/rating.js +17 -21
  53. package/lib/items/elements/form/section/section.css +30 -73
  54. package/lib/items/elements/form/section/section.js +5 -5
  55. package/lib/items/elements/form/select/select.css +186 -0
  56. package/lib/items/elements/form/select/select.js +165 -0
  57. package/lib/items/elements/form/slider/slider.css +55 -176
  58. package/lib/items/elements/form/slider/slider.js +14 -10
  59. package/lib/items/elements/form/tags/tags.css +152 -0
  60. package/lib/items/elements/form/tags/tags.js +166 -0
  61. package/lib/items/elements/form/textarea/textarea.css +55 -92
  62. package/lib/items/elements/form/textarea/textarea.js +74 -66
  63. package/lib/items/elements/form/toggle/toggle.css +101 -0
  64. package/lib/items/elements/form/toggle/toggle.js +67 -0
  65. package/lib/items/elements/global/code/code.css +39 -8
  66. package/lib/items/elements/global/code/code.js +7 -2
  67. package/lib/items/elements/global/faq/faq.css +38 -16
  68. package/lib/items/elements/global/faq/faq.js +14 -2
  69. package/lib/items/elements/global/heading/heading.css +37 -14
  70. package/lib/items/elements/global/heading/heading.js +9 -4
  71. package/lib/items/elements/global/markdown/markdown.css +22 -15
  72. package/lib/items/elements/global/markdown/markdown.js +4 -4
  73. package/lib/items/elements/global/menu/menu.css +173 -0
  74. package/lib/items/elements/global/menu/menu.js +103 -0
  75. package/lib/items/elements/global/notice/notice.css +27 -61
  76. package/lib/items/elements/global/notice/notice.js +4 -4
  77. package/lib/items/elements/global/parameters/parameters.css +33 -14
  78. package/lib/items/elements/global/parameters/parameters.js +15 -6
  79. package/lib/items/elements/global/tags/tags.css +18 -5
  80. package/lib/items/elements/global/tags/tags.js +10 -2
  81. package/lib/items/elements/navigation/navbar/navbar.css +39 -17
  82. package/lib/items/elements/navigation/navbar/navbar.js +19 -9
  83. package/lib/items/elements/navigation/sidebar/sidebar.css +25 -39
  84. package/lib/items/elements/navigation/sidebar/sidebar.js +28 -6
  85. package/lib/items/elements/navigation/tabs/tabs.css +35 -16
  86. package/lib/items/elements/navigation/tabs/tabs.js +16 -2
  87. package/lib/items/elements/status/code/code.css +21 -12
  88. package/lib/items/elements/status/empty/empty.css +22 -17
  89. package/lib/items/elements/status/empty/empty.js +1 -1
  90. package/lib/items/elements/status/error/error.css +22 -12
  91. package/lib/items/elements/status/error/error.js +1 -1
  92. package/lib/items/elements/status/loading/loading.css +24 -14
  93. package/lib/items/elements/status/loading/loading.js +4 -4
  94. package/lib/load.js +14 -6
  95. package/lib/styles/reset.css +1 -1
  96. package/lists.md +586 -0
  97. package/orchestrator.md +288 -0
  98. package/package.json +9 -3
  99. package/lib/items/elements/form/button/styles/base.css +0 -176
  100. package/lib/items/elements/form/button/styles/sizes.css +0 -78
  101. package/lib/items/elements/form/button/styles/variants.css +0 -421
  102. package/lib/items/elements/form/checkbox/styles/base.css +0 -52
  103. package/lib/items/elements/form/checkbox/styles/sizes.css +0 -39
  104. package/lib/items/elements/form/checkbox/styles/variants.css +0 -121
  105. package/lib/items/elements/form/input/styles/base.css +0 -26
  106. package/lib/items/elements/form/input/styles/sizes.css +0 -15
  107. package/lib/items/elements/form/input/styles/variants.css +0 -98
  108. package/lib/items/elements/form/radio/styles/base.css +0 -48
  109. package/lib/items/elements/form/radio/styles/sizes.css +0 -36
  110. package/lib/items/elements/form/radio/styles/variants.css +0 -121
  111. package/lib/items/elements/global/card/card.css +0 -57
  112. package/lib/items/elements/global/card/card.js +0 -48
  113. package/lib/items/elements/sections/footer/footer.css +0 -205
  114. package/lib/items/elements/sections/footer/footer.js +0 -109
  115. package/lib/items/elements/sections/hero/hero.css +0 -100
  116. package/lib/items/elements/sections/hero/hero.js +0 -54
  117. package/lib/items/elements/sections/pricing/pricing.css +0 -148
  118. package/lib/items/elements/sections/stats/stats.css +0 -34
  119. package/lib/items/elements/sections/stats/stats.js +0 -74
@@ -0,0 +1,62 @@
1
+ import providers from '#providers/addon.js';
2
+
3
+ providers.Fn('item.request', async function(provider, payload)
4
+ {
5
+ const key = (typeof process !== 'undefined' && process.env ? process.env[provider.Get('key')] : '') || '';
6
+ const model = payload.model || provider.Get('model');
7
+ const config = provider.Get('models')[model] || {};
8
+
9
+ const before = provider.Get('onBeforeRequest')({ payload: { ...payload, model }, key, config });
10
+
11
+ const attempt = async (retry) =>
12
+ {
13
+ try
14
+ {
15
+ const start = Date.now();
16
+
17
+ const timeout = provider.Get('timeout') || 120000;
18
+ const controller = new AbortController();
19
+ const timer = setTimeout(() => controller.abort(), timeout);
20
+
21
+ const response = await fetch(provider.Get('endpoint'),
22
+ {
23
+ method: 'POST',
24
+ headers: before.headers,
25
+ body: JSON.stringify(before.body),
26
+ signal: controller.signal
27
+ });
28
+
29
+ clearTimeout(timer);
30
+
31
+ if (!response.ok)
32
+ {
33
+ throw new Error(`API error: ${response.status}`);
34
+ }
35
+
36
+ const raw = await response.json();
37
+ const time = Date.now() - start;
38
+
39
+ const after = provider.Get('onAfterRequest')({ response: raw, model, config });
40
+ const tps = time > 0 ? parseFloat((after.tokens.output / (time / 1000)).toFixed(2)) : 0;
41
+
42
+ return {
43
+ content: after.content,
44
+ reasoning: after.reasoning,
45
+ tokens: after.tokens,
46
+ time,
47
+ tps
48
+ };
49
+ }
50
+ catch (error)
51
+ {
52
+ if (retry)
53
+ {
54
+ return await attempt(false);
55
+ }
56
+
57
+ throw error;
58
+ }
59
+ };
60
+
61
+ return await attempt(true);
62
+ });
@@ -0,0 +1,98 @@
1
+ onetype.AddonReady('providers', (providers) =>
2
+ {
3
+ providers.Item({
4
+ id: 'nue',
5
+ name: 'Nue Tools',
6
+ default: true,
7
+ endpoint: 'https://nue.tools.divhunt.com/api/run/ai-chat',
8
+ key: 'NUE_API_KEY',
9
+ model: 'qwen3-next-80b-a3b-thinking',
10
+ models: {
11
+ 'qwen3-next-80b-a3b-thinking': {
12
+ tokens: 32768,
13
+ thinking: true,
14
+ price: { input: 0, output: 0 }
15
+ }
16
+ },
17
+ onBeforeRequest: ({ payload, key }) =>
18
+ ({
19
+ headers: {
20
+ 'Content-Type': 'application/json',
21
+ ...(key && { 'Authorization': `Bearer ${key}` })
22
+ },
23
+ body: payload
24
+ }),
25
+ onAfterRequest: ({ response }) =>
26
+ {
27
+ const data = response.data || {};
28
+ let text = (data.response || '').trim();
29
+
30
+ let reasoning = (data.reasoning || '').trim() || null;
31
+
32
+ if (!reasoning)
33
+ {
34
+ const match = text.match(/<think>([\s\S]*?)<\/think>/i);
35
+
36
+ if (match)
37
+ {
38
+ reasoning = match[1].trim();
39
+ text = text.replace(/<think>[\s\S]*?<\/think>/gi, '').trim();
40
+ }
41
+ else if (text.includes('<think>'))
42
+ {
43
+ /* Handle unclosed think tag */
44
+ const idx = text.indexOf('<think>');
45
+ reasoning = text.slice(idx + 7).trim();
46
+ text = text.slice(0, idx).trim();
47
+ }
48
+ }
49
+
50
+ const usage = data.usage || {};
51
+
52
+ return {
53
+ content: text,
54
+ reasoning,
55
+ tokens: {
56
+ input: usage.prompt_tokens || 0,
57
+ output: usage.completion_tokens || 0
58
+ }
59
+ };
60
+ }
61
+ });
62
+
63
+ providers.Item({
64
+ id: 'ollama',
65
+ name: 'Ollama',
66
+ default: false,
67
+ endpoint: 'http://localhost:11434/v1/chat/completions',
68
+ model: 'qwen3-coder-next:cloud',
69
+ models: {
70
+ 'qwen3-coder-next:cloud': {
71
+ tokens: 32768,
72
+ price: { input: 0, output: 0 }
73
+ }
74
+ },
75
+ onBeforeRequest: ({ payload }) =>
76
+ ({
77
+ headers: {
78
+ 'Content-Type': 'application/json'
79
+ },
80
+ body: payload
81
+ }),
82
+ onAfterRequest: ({ response }) =>
83
+ {
84
+ const choice = response.choices?.[0] || {};
85
+ const text = (choice.message?.content || '').trim();
86
+ const usage = response.usage || {};
87
+
88
+ return {
89
+ content: text,
90
+ reasoning: null,
91
+ tokens: {
92
+ input: usage.prompt_tokens || 0,
93
+ output: usage.completion_tokens || 0
94
+ }
95
+ };
96
+ }
97
+ });
98
+ });
@@ -0,0 +1,10 @@
1
+ import providers from '#providers/addon.js';
2
+
3
+ /* Items */
4
+ import '#providers/items/nue.js';
5
+
6
+ /* Functions */
7
+ import '#providers/functions/default.js';
8
+ import '#providers/item/functions/request.js';
9
+
10
+ export default providers;
@@ -0,0 +1,25 @@
1
+ elements.Fn('runtime', function()
2
+ {
3
+ this.methods.render = () =>
4
+ {
5
+ elements.Render('body', () =>
6
+ {
7
+ return document.body.outerHTML;
8
+ });
9
+
10
+ const render = elements.Render('body', window);
11
+ document.body.replaceChildren(...render.Element.children);
12
+ };
13
+
14
+ if(document.readyState === 'loading')
15
+ {
16
+ document.addEventListener('DOMContentLoaded', () =>
17
+ {
18
+ this.methods.render();
19
+ });
20
+ }
21
+ else
22
+ {
23
+ this.methods.render();
24
+ }
25
+ });
package/lib/browser.js CHANGED
@@ -1,25 +1,2 @@
1
1
  window.onetype = new OneType();
2
- window.$ot = onetype.$ot;
3
-
4
- if (document.readyState === 'loading')
5
- {
6
- document.addEventListener('DOMContentLoaded', initBrowser);
7
- }
8
- else
9
- {
10
- initBrowser();
11
- }
12
-
13
- function initBrowser()
14
- {
15
- onetype.Addon('browser', function(addon)
16
- {
17
- addon.Render('body', () =>
18
- {
19
- return document.body.outerHTML;
20
- });
21
-
22
- const render = addon.Render('body', window);
23
- document.body.replaceChildren(...render.Element.children);
24
- });
25
- }
2
+ window.$ot = onetype.$ot;
@@ -22,7 +22,7 @@ directives.ItemAdd({
22
22
  else if (slot && slot.html && slot.data)
23
23
  {
24
24
  const compiled = item.Compile(slot.html, slot.data);
25
- node.replaceWith(compiled.element);
25
+ node.replaceWith(...compiled.element.childNodes);
26
26
  }
27
27
  else
28
28
  {
@@ -1,50 +1,50 @@
1
- directives.ItemAdd({
2
- id: 'ot-click-outside',
3
- icon: 'close_fullscreen',
4
- name: 'Click Outside',
5
- description: 'Detect clicks outside the element. Perfect for closing dropdowns and modals.',
6
- category: 'events',
7
- trigger: 'node',
8
- order: 500,
9
- attributes: {
10
- 'ot-click-outside': ['string']
11
- },
12
- code: function(data, item, compile, node, identifier)
13
- {
14
- const attribute = data['ot-click-outside'].value;
1
+ onetype.AddonReady('directives', function()
2
+ {
3
+ const handlers = new Set();
15
4
 
16
- const handler = (event) =>
17
- {
18
- const results = onetype.Function(attribute, compile.data, false);
5
+ document.addEventListener('click', function(event)
6
+ {
7
+ handlers.forEach((entry) =>
8
+ {
9
+ if(!document.contains(entry.element))
10
+ {
11
+ handlers.delete(entry);
12
+ return;
13
+ }
19
14
 
20
- if(typeof results === 'function')
21
- {
22
- results(event, {item, compile, node, identifier});
23
- }
24
- };
15
+ if(!entry.element.contains(event.target) && entry.element !== event.target)
16
+ {
17
+ entry.handler(event);
18
+ }
19
+ });
20
+ });
25
21
 
26
- handlers.add({element: node, handler});
27
- }
28
- });
22
+ directives.ItemAdd({
23
+ id: 'ot-click-outside',
24
+ icon: 'close_fullscreen',
25
+ name: 'Click Outside',
26
+ description: 'Detect clicks outside the element.',
27
+ category: 'events',
28
+ trigger: 'node',
29
+ order: 500,
30
+ attributes: {
31
+ 'ot-click-outside': ['string']
32
+ },
33
+ code: function(data, item, compile, node, identifier)
34
+ {
35
+ const attribute = data['ot-click-outside'].value;
29
36
 
30
- onetype.AddonReady('directives', function()
31
- {
32
- const handlers = new Set();
37
+ const handler = (event) =>
38
+ {
39
+ const results = onetype.Function(attribute, compile.data, false);
33
40
 
34
- document.addEventListener('click', function(event)
35
- {
36
- handlers.forEach(({element, handler}) =>
37
- {
38
- if(!document.contains(element))
39
- {
40
- handlers.delete({element, handler});
41
- return;
42
- }
41
+ if(typeof results === 'function')
42
+ {
43
+ results(event, {item, compile, node, identifier});
44
+ }
45
+ };
43
46
 
44
- if(!element.contains(event.target) && element !== event.target)
45
- {
46
- handler(event);
47
- }
48
- });
49
- });
47
+ handlers.add({element: node, handler});
48
+ }
49
+ });
50
50
  });