Compare commits

..
Author SHA1 Message Date
Alan Guo Xiang Tan 9d8895dad1 Revert "DEV: Replace narrowDesktopView logic with viewport API (#1372)"
This reverts commit 59d6e2b467.
2025-05-30 09:51:46 +08:00
433 changed files with 843277 additions and 3150061 deletions
-2
View File
@@ -1,5 +1,3 @@
< 3.5.0.beta7-dev: cd14b0c0bee0cf63c59b64b6f7213e31a37f11a7
< 3.5.0.beta6-dev: 3e74eea1e5e3143888d67a8d8a11206df214dc24
< 3.5.0.beta3-dev: 09a68414804a1447f52e5d60691ba59742cda9ec
< 3.5.0.beta2-dev: de8624416a15b3d8e7ad350b083cc1420451ccec
< 3.5.0.beta1-dev: bdef136080074a993e7c4f5ca562edc31a8ba756
+20 -22
View File
@@ -14,31 +14,30 @@ GEM
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
uri (>= 0.13.1)
ast (2.4.3)
base64 (0.3.0)
benchmark (0.4.1)
bigdecimal (3.2.2)
ast (2.4.2)
base64 (0.2.0)
benchmark (0.4.0)
bigdecimal (3.1.9)
concurrent-ruby (1.3.5)
connection_pool (2.5.3)
drb (2.2.3)
connection_pool (2.5.0)
drb (2.2.1)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
json (2.12.2)
language_server-protocol (3.17.0.5)
json (2.10.2)
language_server-protocol (3.17.0.4)
lint_roller (1.1.0)
logger (1.7.0)
logger (1.6.6)
minitest (5.25.5)
parallel (1.27.0)
parser (3.3.8.0)
parallel (1.26.3)
parser (3.3.7.1)
ast (~> 2.4.1)
racc
prettier_print (1.2.1)
prism (1.4.0)
racc (1.8.1)
rack (3.1.16)
rack (3.1.14)
rainbow (3.1.1)
regexp_parser (2.10.0)
rubocop (1.77.0)
rubocop (1.74.0)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@@ -46,12 +45,11 @@ GEM
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.45.1, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.45.1)
parser (>= 3.3.7.2)
prism (~> 1.4)
rubocop-ast (1.38.1)
parser (>= 3.3.1.0)
rubocop-capybara (2.22.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
@@ -67,13 +65,13 @@ GEM
rubocop-factory_bot (2.27.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rails (2.32.0)
rubocop-rails (2.30.3)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop-ast (>= 1.44.0, < 2.0)
rubocop-rspec (3.6.0)
rubocop (>= 1.72.1, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
rubocop-rspec (3.5.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rspec_rails (2.31.0)
@@ -12,7 +12,7 @@ export default class AdminPluginsShowDiscourseAiFeaturesEdit extends DiscourseRo
const { site_settings } = await ajax("/admin/config/site_settings.json", {
data: {
filter_area: `ai-features/${currentFeature.module_name}`,
filter_area: `ai-features/${currentFeature.ref}`,
plugin: "discourse-ai",
category: "discourse_ai",
},
@@ -1,11 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiEmbeddingsListEditor from "../../../../../discourse/components/ai-embeddings-list-editor";
export default RouteTemplate(
<template>
<AiEmbeddingsListEditor
@embeddings={{@controller.allEmbeddings}}
@currentEmbedding={{@controller.model}}
/>
</template>
);
@@ -0,0 +1,4 @@
<AiEmbeddingsListEditor
@embeddings={{this.allEmbeddings}}
@currentEmbedding={{this.model}}
/>
@@ -1,8 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiEmbeddingsListEditor from "../../../../../discourse/components/ai-embeddings-list-editor";
export default RouteTemplate(
<template>
<AiEmbeddingsListEditor @embeddings={{@controller.model}} />
</template>
);
@@ -0,0 +1 @@
<AiEmbeddingsListEditor @embeddings={{this.model}} />
@@ -1,11 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiEmbeddingsListEditor from "../../../../../discourse/components/ai-embeddings-list-editor";
export default RouteTemplate(
<template>
<AiEmbeddingsListEditor
@embeddings={{@controller.allEmbeddings}}
@currentEmbedding={{@controller.model}}
/>
</template>
);
@@ -0,0 +1,4 @@
<AiEmbeddingsListEditor
@embeddings={{this.allEmbeddings}}
@currentEmbedding={{this.model}}
/>
@@ -1,6 +1,156 @@
import Component from "@glimmer/component";
import { service } from "@ember/service";
import RouteTemplate from "ember-route-template";
import AiFeatures from "../../../../../discourse/components/ai-features";
import { gt } from "truth-helpers";
import DBreadcrumbsItem from "discourse/components/d-breadcrumbs-item";
import DButton from "discourse/components/d-button";
import DPageSubheader from "discourse/components/d-page-subheader";
import { i18n } from "discourse-i18n";
export default RouteTemplate(
<template><AiFeatures @features={{@controller.model}} /></template>
class extends Component {
@service adminPluginNavManager;
get tableHeaders() {
const prefix = "discourse_ai.features.list.header";
return [
i18n(`${prefix}.name`),
i18n(`${prefix}.persona`),
i18n(`${prefix}.groups`),
"",
];
}
get configuredFeatures() {
return this.args.model.filter(
(feature) => feature.enable_setting.value === true
);
}
get unconfiguredFeatures() {
return this.args.model.filter(
(feature) => feature.enable_setting.value === false
);
}
<template>
<DBreadcrumbsItem
@path="/admin/plugins/{{this.adminPluginNavManager.currentPlugin.name}}/ai-features"
@label={{i18n "discourse_ai.features.short_title"}}
/>
<section class="ai-feature-list admin-detail">
<DPageSubheader
@titleLabel={{i18n "discourse_ai.features.short_title"}}
@descriptionLabel={{i18n "discourse_ai.features.description"}}
@learnMoreUrl="todo"
/>
{{#if (gt this.configuredFeatures.length 0)}}
<div class="ai-feature-list__configured-features">
<h3>{{i18n "discourse_ai.features.list.configured_features"}}</h3>
<table class="d-admin-table">
<thead>
<tr>
{{#each this.tableHeaders as |header|}}
<th>{{header}}</th>
{{/each}}
</tr>
</thead>
<tbody>
{{#each this.configuredFeatures as |feature|}}
<tr
class="ai-feature-list__row d-admin-row__content"
data-feature-name={{feature.name}}
>
<td class="d-admin-row__overview ai-feature-list__row-item">
<span class="ai-feature-list__row-item-name">
<strong>
{{feature.name}}
</strong>
</span>
<span class="ai-feature-list__row-item-description">
{{feature.description}}
</span>
</td>
<td
class="d-admin-row__detail ai-feature-list__row-item ai-feature-list__persona"
>
<DButton
class="btn-flat btn-small ai-feature-list__row-item-persona"
@translatedLabel={{feature.persona.name}}
@route="adminPlugins.show.discourse-ai-personas.edit"
@routeModels={{feature.persona.id}}
/>
</td>
<td
class="d-admin-row__detail ai-feature-list__row-item ai-feature-list__groups"
>
{{#if (gt feature.persona.allowed_groups.length 0)}}
<ul class="ai-feature-list__row-item-groups">
{{#each feature.persona.allowed_groups as |group|}}
<li>{{group.name}}</li>
{{/each}}
</ul>
{{/if}}
</td>
<td class="d-admin-row_controls">
<DButton
class="btn-small edit"
@label="discourse_ai.features.list.edit"
@route="adminPlugins.show.discourse-ai-features.edit"
@routeModels={{feature.id}}
/>
</td>
</tr>
{{/each}}
</tbody>
</table>
</div>
{{/if}}
{{#if (gt this.unconfiguredFeatures.length 0)}}
<div class="ai-feature-list__unconfigured-features">
<h3>{{i18n "discourse_ai.features.list.unconfigured_features"}}</h3>
<table class="d-admin-table">
<thead>
<tr>
<th>{{i18n "discourse_ai.features.list.header.name"}}</th>
<th></th>
</tr>
</thead>
<tbody>
{{#each this.unconfiguredFeatures as |feature|}}
<tr class="ai-feature-list__row d-admin-row__content">
<td class="d-admin-row__overview ai-feature-list__row-item">
<span class="ai-feature-list__row-item-name">
<strong>
{{feature.name}}
</strong>
</span>
<span class="ai-feature-list__row-item-description">
{{feature.description}}
</span>
</td>
<td class="d-admin-row_controls">
<DButton
class="btn-small"
@label="discourse_ai.features.list.set_up"
@route="adminPlugins.show.discourse-ai-features.edit"
@routeModels={{feature.id}}
/>
</td>
</tr>
{{/each}}
</tbody>
</table>
</div>
{{/if}}
</section>
</template>
}
);
@@ -1,11 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiLlmsListEditor from "../../../../../discourse/components/ai-llms-list-editor";
export default RouteTemplate(
<template>
<AiLlmsListEditor
@llms={{@controller.allLlms}}
@currentLlm={{@controller.model}}
/>
</template>
);
@@ -0,0 +1 @@
<AiLlmsListEditor @llms={{this.allLlms}} @currentLlm={{this.model}} />
@@ -1,6 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiLlmsListEditor from "../../../../../discourse/components/ai-llms-list-editor";
export default RouteTemplate(
<template><AiLlmsListEditor @llms={{@controller.model}} /></template>
);
@@ -0,0 +1 @@
<AiLlmsListEditor @llms={{this.model}} />
@@ -1,12 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiLlmsListEditor from "../../../../../discourse/components/ai-llms-list-editor";
export default RouteTemplate(
<template>
<AiLlmsListEditor
@llms={{@controller.allLlms}}
@currentLlm={{@controller.model}}
@llmTemplate={{@controller.llmTemplate}}
/>
</template>
);
@@ -0,0 +1,5 @@
<AiLlmsListEditor
@llms={{this.allLlms}}
@currentLlm={{this.model}}
@llmTemplate={{this.llmTemplate}}
/>
@@ -1,11 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiPersonaListEditor from "../../../../../discourse/components/ai-persona-list-editor";
export default RouteTemplate(
<template>
<AiPersonaListEditor
@personas={{@controller.allPersonas}}
@currentPersona={{@controller.model}}
/>
</template>
);
@@ -0,0 +1,4 @@
<AiPersonaListEditor
@personas={{this.allPersonas}}
@currentPersona={{this.model}}
/>
@@ -1,6 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiPersonaListEditor from "../../../../../discourse/components/ai-persona-list-editor";
export default RouteTemplate(
<template><AiPersonaListEditor @personas={{@controller.model}} /></template>
);
@@ -0,0 +1 @@
<AiPersonaListEditor @personas={{this.model}} />
@@ -1,11 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiPersonaListEditor from "../../../../../discourse/components/ai-persona-list-editor";
export default RouteTemplate(
<template>
<AiPersonaListEditor
@personas={{@controller.allPersonas}}
@currentPersona={{@controller.model}}
/>
</template>
);
@@ -0,0 +1,4 @@
<AiPersonaListEditor
@personas={{this.allPersonas}}
@currentPersona={{this.model}}
/>
@@ -1,6 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiSpam from "../../../../discourse/components/ai-spam";
export default RouteTemplate(
<template><AiSpam @model={{@controller.model}} /></template>
);
@@ -0,0 +1 @@
<AiSpam @model={{this.model}} />
@@ -1,16 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiToolEditor from "../../../../../discourse/components/ai-tool-editor";
export default RouteTemplate(
<template>
<section class="ai-persona-tool-editor__current admin-detail pull-left">
<AiToolEditor
@tools={{@controller.allTools}}
@model={{@controller.model}}
@presets={{@controller.presets}}
@llms={{@controller.llms}}
@settings={{@controller.settings}}
/>
</section>
</template>
);
@@ -0,0 +1,9 @@
<section class="ai-persona-tool-editor__current admin-detail pull-left">
<AiToolEditor
@tools={{this.allTools}}
@model={{this.model}}
@presets={{this.presets}}
@llms={{this.llms}}
@settings={{this.settings}}
/>
</section>
@@ -1,6 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiToolListEditor from "../../../../../discourse/components/ai-tool-list-editor";
export default RouteTemplate(
<template><AiToolListEditor @tools={{@controller.model}} /></template>
);
@@ -0,0 +1 @@
<AiToolListEditor @tools={{this.model}} />
@@ -1,17 +0,0 @@
import RouteTemplate from "ember-route-template";
import AiToolEditor from "../../../../../discourse/components/ai-tool-editor";
export default RouteTemplate(
<template>
<section class="ai-persona-tool-editor__current admin-detail pull-left">
<AiToolEditor
@tools={{@controller.allTools}}
@model={{@controller.model}}
@presets={{@controller.presets}}
@llms={{@controller.llms}}
@settings={{@controller.settings}}
@selectedPreset={{@controller.selectedPreset}}
/>
</section>
</template>
);
@@ -0,0 +1,10 @@
<section class="ai-persona-tool-editor__current admin-detail pull-left">
<AiToolEditor
@tools={{this.allTools}}
@model={{this.model}}
@presets={{this.presets}}
@llms={{this.llms}}
@settings={{this.settings}}
@selectedPreset={{this.selectedPreset}}
/>
</section>

Some files were not shown because too many files have changed in this diff Show More