arcane-os 0.1.0-dev.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +154 -0
- package/COMMERCIAL-LICENSE.md +13 -0
- package/LICENSE +661 -0
- package/NOTICE +70 -0
- package/README.md +448 -0
- package/bin/arcane-test.mjs +741 -0
- package/bin/arcane.mjs +5 -0
- package/docs/architecture.md +234 -0
- package/docs/compatibility.md +36 -0
- package/docs/event-manager.md +166 -0
- package/docs/platform-targets.md +108 -0
- package/docs/publishing.md +203 -0
- package/docs/reference/README.md +117 -0
- package/docs/reference/arcane-ollama.md +288 -0
- package/docs/reference/availability-and-normalization.md +123 -0
- package/docs/reference/behavioral-testing.md +86 -0
- package/docs/reference/cli.md +569 -0
- package/docs/reference/core/README.md +62 -0
- package/docs/reference/core/arcane-ai-contracts.md +873 -0
- package/docs/reference/core/arcane-api.md +601 -0
- package/docs/reference/core/arcane-entities.md +65 -0
- package/docs/reference/core/arcane-events.md +134 -0
- package/docs/reference/core/ollama-module.md +181 -0
- package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +1909 -0
- package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +1057 -0
- package/docs/reference/core/reference/arcane-api/core-and-events.md +320 -0
- package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +610 -0
- package/docs/reference/core/reference/arcane-api/namespaces.md +1157 -0
- package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +1423 -0
- package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +315 -0
- package/docs/reference/event-manager.md +957 -0
- package/docs/reference/inventory/package-api.json +2632 -0
- package/docs/reference/inventory/runtime-components.json +934 -0
- package/docs/reference/inventory/runtime-entities.json +26 -0
- package/docs/reference/inventory/runtime-modules.json +1249 -0
- package/docs/reference/protocols.md +242 -0
- package/docs/reference/runtime-components.md +1098 -0
- package/docs/reference/runtime-entities.md +303 -0
- package/docs/reference/runtime-modules.md +2010 -0
- package/docs/reference/sdk-api.md +4901 -0
- package/docs/roadmap.md +79 -0
- package/docs/work-amplification.md +124 -0
- package/node_modules/event-pubsub/CHANGELOG.md +55 -0
- package/node_modules/event-pubsub/MIGRATION.md +70 -0
- package/node_modules/event-pubsub/README.md +363 -0
- package/node_modules/event-pubsub/SECURITY.md +37 -0
- package/node_modules/event-pubsub/index.js +141 -0
- package/node_modules/event-pubsub/licence +21 -0
- package/node_modules/event-pubsub/package.json +59 -0
- package/node_modules/strong-type/README.md +408 -0
- package/node_modules/strong-type/assets/strong-type-header.png +0 -0
- package/node_modules/strong-type/index.js +1151 -0
- package/node_modules/strong-type/licence +21 -0
- package/node_modules/strong-type/node.js +125 -0
- package/node_modules/strong-type/package.json +61 -0
- package/package.json +95 -0
- package/runtime/ARCANE_RUNTIME_RELEASE.json +791 -0
- package/runtime/arcane/components/app-bar.html +468 -0
- package/runtime/arcane/components/assistant-panel.html +715 -0
- package/runtime/arcane/components/calculator.html +8 -0
- package/runtime/arcane/components/chart.html +655 -0
- package/runtime/arcane/components/chat.html +1225 -0
- package/runtime/arcane/components/conversation-view.html +13 -0
- package/runtime/arcane/components/dashboard-config.html +341 -0
- package/runtime/arcane/components/data-maintenance.html +112 -0
- package/runtime/arcane/components/data-view.html +92 -0
- package/runtime/arcane/components/directory-picker.html +197 -0
- package/runtime/arcane/components/document-inspector.html +252 -0
- package/runtime/arcane/components/file-drop.html +264 -0
- package/runtime/arcane/components/file-inspector.html +293 -0
- package/runtime/arcane/components/file-manager.html +1715 -0
- package/runtime/arcane/components/header.html +142 -0
- package/runtime/arcane/components/integration-settings.html +14 -0
- package/runtime/arcane/components/local-ai-status.html +360 -0
- package/runtime/arcane/components/markdown-document.html +1048 -0
- package/runtime/arcane/components/markdown-editor.html +360 -0
- package/runtime/arcane/components/media-embed.html +8 -0
- package/runtime/arcane/components/modal.html +402 -0
- package/runtime/arcane/components/output-panel.html +259 -0
- package/runtime/arcane/components/preferences-form.html +135 -0
- package/runtime/arcane/components/record-timeline.html +105 -0
- package/runtime/arcane/components/relationship-board.html +116 -0
- package/runtime/arcane/components/screen-capture.html +8 -0
- package/runtime/arcane/components/source-code-viewer.html +441 -0
- package/runtime/arcane/components/source-explanation.html +124 -0
- package/runtime/arcane/components/speech.html +365 -0
- package/runtime/arcane/components/summary-strip.html +177 -0
- package/runtime/arcane/components/table.html +77 -0
- package/runtime/arcane/components/task-progress.html +282 -0
- package/runtime/arcane/components/terminal-workspace.html +65 -0
- package/runtime/arcane/components/theme-editor.html +41 -0
- package/runtime/arcane/components/theme-switcher.html +46 -0
- package/runtime/arcane/components/unified-inbox.html +20 -0
- package/runtime/arcane/components/voice-transcription.html +476 -0
- package/runtime/arcane/components/weather-widget.html +8 -0
- package/runtime/arcane/components/web-navigator.html +239 -0
- package/runtime/arcane/css/communications.css +1 -0
- package/runtime/arcane/css/dashboard-config.css +45 -0
- package/runtime/arcane/css/document-site.css +981 -0
- package/runtime/arcane/css/layout.css +438 -0
- package/runtime/arcane/css/primitives.css +321 -0
- package/runtime/arcane/css/theme.css +112 -0
- package/runtime/arcane/css/utility-workspace.css +1 -0
- package/runtime/arcane/entities/ApiModelRecord.js +20 -0
- package/runtime/arcane/entities/Calculation.js +13 -0
- package/runtime/arcane/entities/Chat.js +581 -0
- package/runtime/arcane/entities/CommunicationMessage.js +29 -0
- package/runtime/arcane/entities/CommunicationThread.js +21 -0
- package/runtime/arcane/entities/Document.js +10 -0
- package/runtime/arcane/entities/File.js +143 -0
- package/runtime/arcane/entities/Image.js +135 -0
- package/runtime/arcane/entities/IntentEnvelope.js +834 -0
- package/runtime/arcane/entities/Preference.js +83 -0
- package/runtime/arcane/entities/TWiNPolicyDecision.js +1092 -0
- package/runtime/arcane/entities/TerminalSession.js +46 -0
- package/runtime/arcane/entities/Theme.js +107 -0
- package/runtime/arcane/entities/User.js +1046 -0
- package/runtime/arcane/entities/Weather.js +23 -0
- package/runtime/arcane/img/arcane-os-everywhere.png +0 -0
- package/runtime/arcane/img/arrow-left.png +0 -0
- package/runtime/arcane/img/arrow-right.png +0 -0
- package/runtime/arcane/img/doc.svg +5 -0
- package/runtime/arcane/img/folder.svg +4 -0
- package/runtime/arcane/img/image.svg +5 -0
- package/runtime/arcane/img/refresh.png +0 -0
- package/runtime/arcane/img/send.svg +9 -0
- package/runtime/arcane/img/trash.svg +5 -0
- package/runtime/arcane/img/upload.svg +5 -0
- package/runtime/arcane/modules/AI.js +2048 -0
- package/runtime/arcane/modules/AIPreferenceRuntime.js +32 -0
- package/runtime/arcane/modules/AIPreferenceTuple.js +92 -0
- package/runtime/arcane/modules/AIResponseLength.js +42 -0
- package/runtime/arcane/modules/AIResponseURLPolicy.js +626 -0
- package/runtime/arcane/modules/AnsiText.js +53 -0
- package/runtime/arcane/modules/ApiModelDatabase.js +25 -0
- package/runtime/arcane/modules/AppDataScope.js +245 -0
- package/runtime/arcane/modules/AppearancePreferences.js +28 -0
- package/runtime/arcane/modules/ArcaneCommunicationBridge.js +22 -0
- package/runtime/arcane/modules/ArcaneNavigationPolicy.js +135 -0
- package/runtime/arcane/modules/ArcaneNetworkPolicy.js +255 -0
- package/runtime/arcane/modules/AsyncBoundary.js +161 -0
- package/runtime/arcane/modules/BrowserTestSuite.js +326 -0
- package/runtime/arcane/modules/CalculatorEngine.js +20 -0
- package/runtime/arcane/modules/CaseEvidenceIndexer.js +134 -0
- package/runtime/arcane/modules/ChartLibrary.js +35 -0
- package/runtime/arcane/modules/ChatRecords.js +13 -0
- package/runtime/arcane/modules/CommunicationAppController.js +43 -0
- package/runtime/arcane/modules/CommunicationHub.js +16 -0
- package/runtime/arcane/modules/CommunicationPreferences.js +13 -0
- package/runtime/arcane/modules/CommunicationProviderRegistry.js +16 -0
- package/runtime/arcane/modules/ComponentContracts.js +586 -0
- package/runtime/arcane/modules/ConfiguredAIChatSession.js +288 -0
- package/runtime/arcane/modules/ConversationActionItems.js +488 -0
- package/runtime/arcane/modules/ConversationClosingReport.js +274 -0
- package/runtime/arcane/modules/ConversationTimebox.js +527 -0
- package/runtime/arcane/modules/CoreLocalModelCatalog.js +255 -0
- package/runtime/arcane/modules/DBLS.js +171 -0
- package/runtime/arcane/modules/DBOPFS.js +1154 -0
- package/runtime/arcane/modules/DBOPFSWorker.js +116 -0
- package/runtime/arcane/modules/DataMaintenance.js +91 -0
- package/runtime/arcane/modules/DevelopmentWorkspace.js +74 -0
- package/runtime/arcane/modules/DirectoryPicker.js +109 -0
- package/runtime/arcane/modules/DocumentNavigation.js +223 -0
- package/runtime/arcane/modules/Errors.js +1025 -0
- package/runtime/arcane/modules/GifEncoder.js +29 -0
- package/runtime/arcane/modules/HTMLImport.js +114 -0
- package/runtime/arcane/modules/InMemoryCommunicationProvider.js +14 -0
- package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +275 -0
- package/runtime/arcane/modules/LocalAIReadiness.js +870 -0
- package/runtime/arcane/modules/LocalAIReadinessController.js +156 -0
- package/runtime/arcane/modules/MD.js +111 -0
- package/runtime/arcane/modules/Mail.js +352 -0
- package/runtime/arcane/modules/MailTransport.mjs +180 -0
- package/runtime/arcane/modules/Marked.min.js +71 -0
- package/runtime/arcane/modules/MemoryRecords.js +44 -0
- package/runtime/arcane/modules/MessageAdvisory.js +38 -0
- package/runtime/arcane/modules/ModelDefinition.js +189 -0
- package/runtime/arcane/modules/Ollama.js +74 -0
- package/runtime/arcane/modules/OllamaModelIdentifier.js +21 -0
- package/runtime/arcane/modules/OllamaSettings.js +24 -0
- package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +14 -0
- package/runtime/arcane/modules/PreferenceStore.js +109 -0
- package/runtime/arcane/modules/QRCode.min.js +1 -0
- package/runtime/arcane/modules/Questionnaire.js +61 -0
- package/runtime/arcane/modules/RecordLinkIndex.js +24 -0
- package/runtime/arcane/modules/RecordPassageIndex.js +222 -0
- package/runtime/arcane/modules/RecordReviewStore.js +94 -0
- package/runtime/arcane/modules/RevocableProjectionLedger.js +1623 -0
- package/runtime/arcane/modules/RiskSignalAnalyzer.js +37 -0
- package/runtime/arcane/modules/ScamRiskPolicy.js +62 -0
- package/runtime/arcane/modules/ScopedOPFSCache.js +183 -0
- package/runtime/arcane/modules/ScreenCapture.js +20 -0
- package/runtime/arcane/modules/SpeechPlayback.js +581 -0
- package/runtime/arcane/modules/StaticDocumentCatalog.js +1248 -0
- package/runtime/arcane/modules/SystemAppearance.js +20 -0
- package/runtime/arcane/modules/SystemPlatformPresentation.js +51 -0
- package/runtime/arcane/modules/SystemToolRegistry.js +28 -0
- package/runtime/arcane/modules/TerminalClient.js +52 -0
- package/runtime/arcane/modules/TerminalCommandRegistry.js +50 -0
- package/runtime/arcane/modules/ThemeBootstrap.js +26 -0
- package/runtime/arcane/modules/ThemeManager.js +131 -0
- package/runtime/arcane/modules/TimeGuard.js +149 -0
- package/runtime/arcane/modules/ToolCallRouter.js +83 -0
- package/runtime/arcane/modules/WaitForComponent.js +102 -0
- package/runtime/arcane/modules/YouTubeMedia.js +16 -0
- package/runtime/arcane/modules/uPlot.LICENSE.txt +21 -0
- package/runtime/arcane/modules/uPlot.iife.min.js +2 -0
- package/runtime/arcane/modules/uPlot.min.css +1 -0
- package/runtime/arcane/security/arcane-network-policy.json +6 -0
- package/runtime/strong-type/index.js +352 -0
- package/runtime/strong-type/licence +21 -0
- package/runtime/strong-type/package.json +45 -0
- package/schemas/arcane-app-bundle.schema.json +125 -0
- package/schemas/arcane-app.schema.json +329 -0
- package/schemas/arcane-lock.schema.json +86 -0
- package/schemas/arcane-package.schema.json +224 -0
- package/schemas/cli-event.schema.json +122 -0
- package/schemas/event-stack.schema.json +152 -0
- package/schemas/native-build-plan.schema.json +176 -0
- package/schemas/target-adapter.schema.json +117 -0
- package/src/app-descriptor.mjs +500 -0
- package/src/cli/main.mjs +561 -0
- package/src/constants.mjs +31 -0
- package/src/dev-server.mjs +718 -0
- package/src/doctor.mjs +315 -0
- package/src/dom-event-instrumentation.mjs +594 -0
- package/src/errors.mjs +75 -0
- package/src/event-manager.mjs +1342 -0
- package/src/event-queue.mjs +138 -0
- package/src/events.mjs +219 -0
- package/src/index.mjs +177 -0
- package/src/integrated-provider-loader.mjs +432 -0
- package/src/native-plan.mjs +698 -0
- package/src/native-provider-loader.mjs +1126 -0
- package/src/packager/core.mjs +2691 -0
- package/src/process.mjs +353 -0
- package/src/release-bundle.mjs +2523 -0
- package/src/repository.mjs +90 -0
- package/src/runtime.mjs +452 -0
- package/src/scaffold.mjs +380 -0
- package/src/targets/index.mjs +436 -0
- package/src/templates/assets/app-icon.png +0 -0
- package/src/templates/workspace-template.mjs +388 -0
- package/src/testing-loader.mjs +9 -0
- package/src/testing.mjs +427 -0
- package/src/toolchain.mjs +1335 -0
- package/src/update-check.mjs +307 -0
- package/src/workspace.mjs +449 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const runtimeOverrides=new WeakMap();
|
|
2
|
+
|
|
3
|
+
function requireUser(user){
|
|
4
|
+
if(!user||typeof user!=='object'){
|
|
5
|
+
throw new TypeError('An AI preference owner is required.');
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Sets an in-memory preference tuple for the current page without writing it
|
|
11
|
+
* back to the user entity. Passing null removes the page-only override.
|
|
12
|
+
*/
|
|
13
|
+
export function setAIPreferenceRuntimeOverride(user,preferences){
|
|
14
|
+
requireUser(user);
|
|
15
|
+
|
|
16
|
+
if(preferences===null){
|
|
17
|
+
runtimeOverrides.delete(user);
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
if(!Array.isArray(preferences)||preferences.length!==6){
|
|
21
|
+
throw new TypeError('An AI runtime preference tuple must contain six entries.');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const snapshot=Object.freeze([...preferences]);
|
|
25
|
+
runtimeOverrides.set(user,snapshot);
|
|
26
|
+
return snapshot;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function getAIPreferencesForRuntime(user){
|
|
30
|
+
requireUser(user);
|
|
31
|
+
return runtimeOverrides.get(user)||user.preferredModels;
|
|
32
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export const AI_PREFERENCE_SLOT_KEYS=Object.freeze([
|
|
2
|
+
'llmProvider',
|
|
3
|
+
'sttProvider',
|
|
4
|
+
'ttsProvider',
|
|
5
|
+
'llmModel',
|
|
6
|
+
'ttsModel',
|
|
7
|
+
'sttModel'
|
|
8
|
+
]);
|
|
9
|
+
|
|
10
|
+
function preferenceToken(value){
|
|
11
|
+
return typeof value==='string'
|
|
12
|
+
?value.trim()
|
|
13
|
+
:'';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function allowedTokensForSlot(allowedValues,index){
|
|
17
|
+
const supplied=allowedValues[index];
|
|
18
|
+
|
|
19
|
+
if(supplied===undefined||supplied===null){
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if(!Array.isArray(supplied)&&!(supplied instanceof Set)){
|
|
24
|
+
throw new TypeError(
|
|
25
|
+
`Allowed AI preference values for ${AI_PREFERENCE_SLOT_KEYS[index]} must be an array or Set.`
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return new Set(
|
|
30
|
+
Array.from(supplied,preferenceToken).filter(Boolean)
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Normalizes the shared six-slot AI preference contract without choosing any
|
|
36
|
+
* provider or model policy. Applications supply their own defaults, allowed
|
|
37
|
+
* values, and legacy aliases.
|
|
38
|
+
*
|
|
39
|
+
* Slot order:
|
|
40
|
+
* [LLM provider, STT provider, TTS provider, LLM model, TTS model, STT model]
|
|
41
|
+
*/
|
|
42
|
+
export function normalizeAIPreferenceTuple(
|
|
43
|
+
value,
|
|
44
|
+
{
|
|
45
|
+
defaults,
|
|
46
|
+
allowedValues=[],
|
|
47
|
+
aliases=[]
|
|
48
|
+
}={}
|
|
49
|
+
){
|
|
50
|
+
if(!Array.isArray(defaults)||defaults.length!==AI_PREFERENCE_SLOT_KEYS.length){
|
|
51
|
+
throw new TypeError(
|
|
52
|
+
`AI preference defaults must contain exactly ${AI_PREFERENCE_SLOT_KEYS.length} slots.`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const source=Array.isArray(value)?value:[];
|
|
57
|
+
|
|
58
|
+
return AI_PREFERENCE_SLOT_KEYS.map((slot,index)=>{
|
|
59
|
+
const fallback=preferenceToken(defaults[index]);
|
|
60
|
+
|
|
61
|
+
if(!fallback){
|
|
62
|
+
throw new TypeError(`The default AI preference for ${slot} must be a non-empty string.`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const slotAliases=aliases[index]||{};
|
|
66
|
+
let candidate=preferenceToken(source[index]);
|
|
67
|
+
|
|
68
|
+
if(candidate&&Object.prototype.hasOwnProperty.call(slotAliases,candidate)){
|
|
69
|
+
candidate=preferenceToken(slotAliases[candidate]);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const allowed=allowedTokensForSlot(allowedValues,index);
|
|
73
|
+
|
|
74
|
+
if(allowed&&!allowed.has(fallback)){
|
|
75
|
+
throw new TypeError(`The default AI preference for ${slot} must be allowed.`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if(!candidate||(allowed&&!allowed.has(candidate))){
|
|
79
|
+
return fallback;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return candidate;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function aiPreferenceTuplesEqual(left,right){
|
|
87
|
+
return Array.isArray(left)
|
|
88
|
+
&&Array.isArray(right)
|
|
89
|
+
&&left.length===AI_PREFERENCE_SLOT_KEYS.length
|
|
90
|
+
&&right.length===AI_PREFERENCE_SLOT_KEYS.length
|
|
91
|
+
&&left.every((value,index)=>value===right[index]);
|
|
92
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const RESPONSE_LENGTH_HEADING='## Application-selected response length';
|
|
2
|
+
|
|
3
|
+
export const AI_RESPONSE_LENGTH_DEFAULT='medium';
|
|
4
|
+
|
|
5
|
+
export const AI_RESPONSE_LENGTH_OPTIONS=Object.freeze([
|
|
6
|
+
Object.freeze({value:'low',label:'Low (1–5 sentences)',minSentences:1,maxSentences:5}),
|
|
7
|
+
Object.freeze({value:'medium',label:'Medium (6–10 sentences)',minSentences:6,maxSentences:10}),
|
|
8
|
+
Object.freeze({value:'high',label:'High (11–20 sentences)',minSentences:11,maxSentences:20})
|
|
9
|
+
]);
|
|
10
|
+
|
|
11
|
+
const RESPONSE_LENGTH_BY_VALUE=new Map(
|
|
12
|
+
AI_RESPONSE_LENGTH_OPTIONS.map(option=>[option.value,option])
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
export function normalizeAIResponseLength(value){
|
|
16
|
+
const normalized=typeof value==='string'?value.trim().toLowerCase():'';
|
|
17
|
+
return RESPONSE_LENGTH_BY_VALUE.has(normalized)
|
|
18
|
+
?normalized
|
|
19
|
+
:AI_RESPONSE_LENGTH_DEFAULT;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function aiResponseLengthInstruction(value){
|
|
23
|
+
const option=RESPONSE_LENGTH_BY_VALUE.get(normalizeAIResponseLength(value));
|
|
24
|
+
const sentenceTarget=`Aim for ${option.minSentences} to ${option.maxSentences} sentences.`;
|
|
25
|
+
|
|
26
|
+
return `${RESPONSE_LENGTH_HEADING}
|
|
27
|
+
${sentenceTarget} A more specific response-length request in the current user message overrides this saved target. Application requirements, tool or function calls, structured response schemas, safety or crisis requirements, evidence and source attribution, uncertainty, warnings, and next steps override the sentence target. Do not omit required information, invent information, or pad the response merely to reach the target.`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function applyAIResponseLength(systemPrompt,value){
|
|
31
|
+
if(typeof systemPrompt!=='string'){
|
|
32
|
+
throw new TypeError('systemPrompt must be a string');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const prompt=systemPrompt.trimEnd();
|
|
36
|
+
if(prompt.includes(RESPONSE_LENGTH_HEADING)){
|
|
37
|
+
return prompt;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const instruction=aiResponseLengthInstruction(value);
|
|
41
|
+
return prompt?`${prompt}\n\n${instruction}`:instruction;
|
|
42
|
+
}
|