nowaikit 2.5.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +89 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/direct/executor.d.ts +28 -0
- package/dist/direct/executor.d.ts.map +1 -0
- package/dist/direct/executor.js +228 -0
- package/dist/direct/executor.js.map +1 -0
- package/dist/direct/llm-client.d.ts +32 -0
- package/dist/direct/llm-client.d.ts.map +1 -0
- package/dist/direct/llm-client.js +122 -0
- package/dist/direct/llm-client.js.map +1 -0
- package/dist/prompts/capabilities/build-app.d.ts +4 -0
- package/dist/prompts/capabilities/build-app.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-app.js +238 -0
- package/dist/prompts/capabilities/build-app.js.map +1 -0
- package/dist/prompts/capabilities/build-business-rule.d.ts +4 -0
- package/dist/prompts/capabilities/build-business-rule.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-business-rule.js +93 -0
- package/dist/prompts/capabilities/build-business-rule.js.map +1 -0
- package/dist/prompts/capabilities/build-catalog.d.ts +4 -0
- package/dist/prompts/capabilities/build-catalog.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-catalog.js +350 -0
- package/dist/prompts/capabilities/build-catalog.js.map +1 -0
- package/dist/prompts/capabilities/build-client-script.d.ts +4 -0
- package/dist/prompts/capabilities/build-client-script.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-client-script.js +157 -0
- package/dist/prompts/capabilities/build-client-script.js.map +1 -0
- package/dist/prompts/capabilities/build-flow.d.ts +4 -0
- package/dist/prompts/capabilities/build-flow.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-flow.js +243 -0
- package/dist/prompts/capabilities/build-flow.js.map +1 -0
- package/dist/prompts/capabilities/build-portal.d.ts +4 -0
- package/dist/prompts/capabilities/build-portal.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-portal.js +250 -0
- package/dist/prompts/capabilities/build-portal.js.map +1 -0
- package/dist/prompts/capabilities/build-rest-api.d.ts +4 -0
- package/dist/prompts/capabilities/build-rest-api.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-rest-api.js +293 -0
- package/dist/prompts/capabilities/build-rest-api.js.map +1 -0
- package/dist/prompts/capabilities/build-test-plan.d.ts +4 -0
- package/dist/prompts/capabilities/build-test-plan.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-test-plan.js +162 -0
- package/dist/prompts/capabilities/build-test-plan.js.map +1 -0
- package/dist/prompts/capabilities/build-uib.d.ts +4 -0
- package/dist/prompts/capabilities/build-uib.d.ts.map +1 -0
- package/dist/prompts/capabilities/build-uib.js +309 -0
- package/dist/prompts/capabilities/build-uib.js.map +1 -0
- package/dist/prompts/capabilities/docs-app.d.ts +4 -0
- package/dist/prompts/capabilities/docs-app.d.ts.map +1 -0
- package/dist/prompts/capabilities/docs-app.js +234 -0
- package/dist/prompts/capabilities/docs-app.js.map +1 -0
- package/dist/prompts/capabilities/docs-release.d.ts +4 -0
- package/dist/prompts/capabilities/docs-release.d.ts.map +1 -0
- package/dist/prompts/capabilities/docs-release.js +197 -0
- package/dist/prompts/capabilities/docs-release.js.map +1 -0
- package/dist/prompts/capabilities/docs-runbook.d.ts +4 -0
- package/dist/prompts/capabilities/docs-runbook.d.ts.map +1 -0
- package/dist/prompts/capabilities/docs-runbook.js +223 -0
- package/dist/prompts/capabilities/docs-runbook.js.map +1 -0
- package/dist/prompts/capabilities/docs-script.d.ts +4 -0
- package/dist/prompts/capabilities/docs-script.d.ts.map +1 -0
- package/dist/prompts/capabilities/docs-script.js +242 -0
- package/dist/prompts/capabilities/docs-script.js.map +1 -0
- package/dist/prompts/capabilities/ops-deploy.d.ts +4 -0
- package/dist/prompts/capabilities/ops-deploy.d.ts.map +1 -0
- package/dist/prompts/capabilities/ops-deploy.js +193 -0
- package/dist/prompts/capabilities/ops-deploy.js.map +1 -0
- package/dist/prompts/capabilities/ops-risk.d.ts +4 -0
- package/dist/prompts/capabilities/ops-risk.d.ts.map +1 -0
- package/dist/prompts/capabilities/ops-risk.js +227 -0
- package/dist/prompts/capabilities/ops-risk.js.map +1 -0
- package/dist/prompts/capabilities/ops-triage.d.ts +4 -0
- package/dist/prompts/capabilities/ops-triage.d.ts.map +1 -0
- package/dist/prompts/capabilities/ops-triage.js +183 -0
- package/dist/prompts/capabilities/ops-triage.js.map +1 -0
- package/dist/prompts/capabilities/review-acls.d.ts +4 -0
- package/dist/prompts/capabilities/review-acls.d.ts.map +1 -0
- package/dist/prompts/capabilities/review-acls.js +142 -0
- package/dist/prompts/capabilities/review-acls.js.map +1 -0
- package/dist/prompts/capabilities/review-code.d.ts +4 -0
- package/dist/prompts/capabilities/review-code.d.ts.map +1 -0
- package/dist/prompts/capabilities/review-code.js +155 -0
- package/dist/prompts/capabilities/review-code.js.map +1 -0
- package/dist/prompts/capabilities/review-flows.d.ts +4 -0
- package/dist/prompts/capabilities/review-flows.d.ts.map +1 -0
- package/dist/prompts/capabilities/review-flows.js +413 -0
- package/dist/prompts/capabilities/review-flows.js.map +1 -0
- package/dist/prompts/capabilities/review-scripts.d.ts +4 -0
- package/dist/prompts/capabilities/review-scripts.d.ts.map +1 -0
- package/dist/prompts/capabilities/review-scripts.js +160 -0
- package/dist/prompts/capabilities/review-scripts.js.map +1 -0
- package/dist/prompts/capabilities/scan-automation.d.ts +4 -0
- package/dist/prompts/capabilities/scan-automation.d.ts.map +1 -0
- package/dist/prompts/capabilities/scan-automation.js +449 -0
- package/dist/prompts/capabilities/scan-automation.js.map +1 -0
- package/dist/prompts/capabilities/scan-cmdb.d.ts +4 -0
- package/dist/prompts/capabilities/scan-cmdb.d.ts.map +1 -0
- package/dist/prompts/capabilities/scan-cmdb.js +450 -0
- package/dist/prompts/capabilities/scan-cmdb.js.map +1 -0
- package/dist/prompts/capabilities/scan-debt.d.ts +4 -0
- package/dist/prompts/capabilities/scan-debt.d.ts.map +1 -0
- package/dist/prompts/capabilities/scan-debt.js +287 -0
- package/dist/prompts/capabilities/scan-debt.js.map +1 -0
- package/dist/prompts/capabilities/scan-health.d.ts +4 -0
- package/dist/prompts/capabilities/scan-health.d.ts.map +1 -0
- package/dist/prompts/capabilities/scan-health.js +235 -0
- package/dist/prompts/capabilities/scan-health.js.map +1 -0
- package/dist/prompts/capabilities/scan-security.d.ts +4 -0
- package/dist/prompts/capabilities/scan-security.d.ts.map +1 -0
- package/dist/prompts/capabilities/scan-security.js +370 -0
- package/dist/prompts/capabilities/scan-security.js.map +1 -0
- package/dist/prompts/capabilities/scan-upgrade.d.ts +4 -0
- package/dist/prompts/capabilities/scan-upgrade.d.ts.map +1 -0
- package/dist/prompts/capabilities/scan-upgrade.js +327 -0
- package/dist/prompts/capabilities/scan-upgrade.js.map +1 -0
- package/dist/prompts/index.d.ts +24 -2
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +160 -14
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/knowledge.d.ts +10 -0
- package/dist/prompts/knowledge.d.ts.map +1 -0
- package/dist/prompts/knowledge.js +604 -0
- package/dist/prompts/knowledge.js.map +1 -0
- package/dist/prompts/types.d.ts +38 -0
- package/dist/prompts/types.d.ts.map +1 -0
- package/dist/prompts/types.js +8 -0
- package/dist/prompts/types.js.map +1 -0
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/servicenow/client.d.ts +15 -0
- package/dist/servicenow/client.d.ts.map +1 -1
- package/dist/servicenow/client.js +107 -0
- package/dist/servicenow/client.js.map +1 -1
- package/dist/tools/core.d.ts +68 -0
- package/dist/tools/core.d.ts.map +1 -1
- package/dist/tools/core.js +58 -0
- package/dist/tools/core.js.map +1 -1
- package/dist/tools/fluent.d.ts +161 -0
- package/dist/tools/fluent.d.ts.map +1 -0
- package/dist/tools/fluent.js +277 -0
- package/dist/tools/fluent.js.map +1 -0
- package/dist/tools/index.d.ts +214 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +12 -6
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/now-assist.d.ts.map +1 -1
- package/dist/tools/now-assist.js +8 -0
- package/dist/tools/now-assist.js.map +1 -1
- package/dist/tools/script.d.ts.map +1 -1
- package/dist/tools/script.js +12 -0
- package/dist/tools/script.js.map +1 -1
- package/package.json +11 -3
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const FLOW_DESIGNER_KNOWLEDGE = "\n## Flow Designer \u2014 Platform Reference\n\n### Trigger Types\n- **Record Triggers**: Before Insert, After Insert, Before Update, After Update, Before Delete, After Delete\n - Conditions: field-level conditions, advanced scripting conditions\n - Run-as: System or triggering user (security context matters)\n- **Scheduled Triggers**: Run once, daily, weekly, monthly, or cron expression\n - Time zone aware, supports repeat-until and count-based limits\n- **Application Triggers**: REST trigger (inbound webhook), Email trigger (inbound email parse),\n Custom trigger (raised by script via sn_fd.FlowAPI.startFlow)\n- **Inbound Email Trigger**: Matches on subject, sender, body regex; parses attachments\n\n### Action Types\n- **Core Actions**: Create Record, Update Record, Delete Record, Log, Assign Record, Request Approval,\n Wait for Approval, Send Notification, Set Value, Ask for Input\n- **Flow Logic**: If / Else If / Else, For Each (loop), Wait For (duration/condition),\n Do Until (loop with condition), Parallel (fan-out), Collect (fan-in)\n- **Advanced Actions**: Run Script (GlideRecord, GlideQuery, scoped APIs), Call REST (outbound HTTP),\n Call Subflow (reusable logic), Publish Event (event queue), Transform (data mapping),\n Call Action (custom spoke actions), Raise Error (halt execution)\n\n### Error Handling\n- **Try / Catch / Finally**: Wrap actions in try-catch; catch outputs error.message, error.detail\n- **Rollback Actions**: Delete or revert records created before error\n- **Error Outputs**: Every action exposes .error_message and .is_error output variables\n- **Compensation**: Use catch block to trigger compensating subflows\n\n### Variables & Data\n- **Input/Output Variables**: Defined on flow/subflow signature; typed (string, reference, integer, etc.)\n- **Scratch Variables**: Temporary flow-scoped storage, not exposed externally\n- **Dot-Walking**: Access related record fields via dot notation (e.g., trigger.current.caller_id.email)\n- **Data Pills**: Visual references to any upstream action output or trigger field\n\n### Limits & Performance\n- Maximum 100 actions per flow; 200 actions per subflow\n- Execution depth limit: 500 (nested subflow calls)\n- Synchronous flow timeout: 60 seconds\n- Asynchronous flow timeout: 24 hours (configurable)\n- Batch operations: use For Each with limit, or GlideQuery bulk operations in Run Script\n- Avoid GlideRecord loops in Run Script; prefer GlideQuery with .toArray()\n";
|
|
2
|
+
export declare const PORTAL_WIDGET_KNOWLEDGE = "\n## Service Portal Widget \u2014 Platform Reference\n\n### Lifecycle\n1. **Server Script** executes first (server-side, GlideRecord access, secure)\n2. **Client Controller** initializes with data from server (`c.data` binding)\n3. **HTML Template** renders using AngularJS directives and `c.data`\n4. Interactions trigger `c.server.update()` for round-trip back to server\n\n### Server Script\n- **data object**: Populate `data.fieldName = value` to pass to client\n- **input object**: Receive client-sent data via `input.fieldName`\n- **$sp API**: getParameter(name), getPortalRecord(), getUser(), getWidget(widgetId, options),\n getStream(table, sys_id), getValues(gr, fieldList), setRedirectURL(url),\n getDisplayValue(fieldName), getInstanceRecord(), getKBCategoryArticles(kbId, categoryId)\n- **GlideRecord**: Full server-side access; always enforce ACLs with gr.canRead()\n- **Options**: Widget instance options accessible via `options.optionName`\n\n### Client Controller\n- **`c.data`**: Two-way bound to server data object\n- **`c.options`**: Read-only widget instance options\n- **`c.server.update()`**: Send c.data back to server; returns promise\n- **`c.server.get({action: 'name'})`**: Call server with specific action; returns promise\n- **spUtil API**: update(widget), addInfoMessage(msg), addErrorMessage(msg),\n addTrivialMessage(msg), createChangeHandler(scope, data, callback),\n recordWatch(scope, table, filter, callback), format(template, data), get(widgetId, options)\n- **$scope**: AngularJS scope; use `$scope.$on('event', handler)` for cross-widget communication\n- **$rootScope.$broadcast('event', data)**: Emit events to all widgets on page\n\n### HTML Template\n- **Directives**: ng-repeat, ng-if, ng-show/ng-hide, ng-click, ng-model, ng-class, ng-style,\n ng-change, ng-submit, ng-disabled, ng-href, ng-src\n- **Widget Embedding**: `<sp-widget widget=\"c.data.myWidget\"></sp-widget>`\n- **Filters**: {{ value | limitTo:50 }}, {{ date | date:'yyyy-MM-dd' }}, {{ text | uppercase }}\n- **Translation**: `${Message text}` syntax for internationalization\n\n### CSS / SCSS\n- Scoped to widget automatically (no bleed to other widgets)\n- SCSS variables: $sp-primary, $sp-secondary, $sp-navbar-bg, $sp-tagline-color\n- BEM convention recommended: .widget-name__element--modifier\n- Bootstrap 3 grid system available (col-xs, col-sm, col-md, col-lg)\n\n### Security\n- **XSS Prevention**: Use ng-bind (not ng-bind-html) for untrusted data; use $sanitize service\n- **Server-Side Validation**: Always validate input on server; client validation is bypassable\n- **ACL Enforcement**: Use gr.canRead()/canWrite() before returning data\n- **Sensitive Data**: Never send sys_ids of admin records; filter server-side\n";
|
|
3
|
+
export declare const UIB_COMPONENT_KNOWLEDGE = "\n## UI Builder (UIB) / Now Experience \u2014 Platform Reference\n\n### Architecture\n- **Macroponent**: Top-level container component; composes child components\n- **Child Components**: Reusable elements within a macroponent\n- **Data Resources**: Feed data into components (GraphQL, REST, Script, Record Watcher, Transform)\n- **Variants**: Different configurations of a macroponent for different use cases\n- **Page**: Collection of macroponents arranged in layout regions\n\n### @seismic/core (Now Experience Framework)\n- `createCustomElement(tag, { ...config })`: Register a custom web component\n- `actionTypes.COMPONENT_PROPERTY_CHANGED`: Dispatched when a property value changes\n- `actionTypes.COMPONENT_CONNECTED`: Component attached to DOM\n- `actionTypes.COMPONENT_DISCONNECTED`: Component removed from DOM\n- `actionTypes.COMPONENT_BOOTSTRAPPED`: Component first initialized\n- Action handlers: `actionHandlers: { [actionType]: (coeffects) => newState }`\n- Coeffects: `{ action, state, dispatch, updateState, properties }`\n\n### Data Resources\n- **GraphQL**: Query Now Platform GraphQL APIs; supports variables and fragments\n- **REST**: Call REST APIs (internal or external); configure auth and headers\n- **Script**: Server-side Script Include execution; returns JSON\n- **Record Watcher**: Real-time updates via AMB (Ambient Messaging Bus) channel\n- **Transform**: Map and reshape data from other resources\n\n### Now Experience Design System (NEDS)\n- Core components: now-button, now-heading, now-card, now-card-hero, now-dropdown,\n now-modal, now-icon, now-avatar, now-badge, now-toggle, now-input, now-textarea,\n now-select, now-radio-buttons, now-checkbox, now-tabs, now-alert, now-loading,\n now-rich-text, now-label-value, now-template-card\n- Layout: now-grid, now-split, now-stack (flexbox-based)\n- Theming: CSS custom properties (--now-color-*, --now-font-*, --now-spacing-*)\n\n### Properties & Events\n- `@property({ type: String }) label`: Declare configurable properties\n- Properties configurable via Variant Editor in UI Builder\n- `dispatch('EVENT_NAME', { detail: payload })`: Emit custom events\n- `update({ propName: newValue })`: Update component state\n- Lifecycle: connected -> bootstrapped -> property changes -> disconnected\n\n### Responsive Design\n- Breakpoints: mobile (<768px), tablet (768-1024px), desktop (>1024px)\n- CSS grid and flexbox for layout; container queries for component-level responsiveness\n- Use now-grid regions for adaptive layouts\n";
|
|
4
|
+
export declare const CMDB_KNOWLEDGE = "\n## CMDB (Configuration Management Database) \u2014 Platform Reference\n\n### Class Hierarchy (Inheritance)\n- `cmdb` (base) -> `cmdb_ci` (Configuration Item base)\n - `cmdb_ci_hardware` -> `cmdb_ci_computer` -> `cmdb_ci_server` / `cmdb_ci_vm_instance`\n - `cmdb_ci_hardware` -> `cmdb_ci_computer` -> `cmdb_ci_pc_hardware`\n - `cmdb_ci_hardware` -> `cmdb_ci_netgear` -> `cmdb_ci_ip_router` / `cmdb_ci_ip_switch` / `cmdb_ci_ip_firewall`\n - `cmdb_ci_service` -> `cmdb_ci_service_auto` / `cmdb_ci_service_technical` / `cmdb_ci_service_business`\n - `cmdb_ci_appl` -> `cmdb_ci_app_server` (Tomcat, WebSphere, etc.)\n - `cmdb_ci_db_instance` (MySQL, Oracle, SQL Server, PostgreSQL)\n - `cmdb_ci_cloud_service_account` (AWS, Azure, GCP)\n - `cmdb_ci_kubernetes_cluster`, `cmdb_ci_kubernetes_node`, `cmdb_ci_kubernetes_pod`\n - `cmdb_ci_storage_device`, `cmdb_ci_network_adapter`, `cmdb_ci_disk`\n\n### Relationship Types (cmdb_rel_type)\n- **Depends on::Used by** \u2014 Service A depends on Server B\n- **Runs on::Runs** \u2014 Application runs on Server\n- **Housed in::Houses** \u2014 Server housed in Rack\n- **Connected to::Connected by** \u2014 Network adjacency\n- **Cluster of::Cluster is** \u2014 Cluster membership\n- **Provided by::Provides** \u2014 Cloud service provider relationship\n- **Members::Member of** \u2014 Group membership\n- **Hosted on::Hosts** \u2014 VM hosted on Hypervisor\n\n### IRE (Identification & Reconciliation Engine)\n- **Identification Rules**: Match incoming CI data to existing CIs using identifier fields (e.g., serial_number + name)\n- **Reconciliation Rules**: Determine which data source wins conflicts (priority-based)\n- **Data Source Priority**: Discovery > SCCM > Manual > Import Set (configurable)\n- **Duplicate Detection**: IRE flags potential duplicates via identification mismatches\n- **Reclassification**: Automatically moves CIs to correct class based on discovered attributes\n\n### Discovery\n- **Schedule Types**: Full, Incremental, Quick (IP range limited)\n- **MID Server Roles**: Discovery, ITOM, Event Management, Orchestration\n- **Horizontal Discovery**: IP-based; finds devices on network (ping, SNMP, WMI, SSH)\n- **Vertical Discovery** (Pattern-based): Deep application topology; uses Service Mapping patterns\n- **Cloud Discovery**: AWS, Azure, GCP via service account credentials\n- **Credential-less Discovery**: Agent-based (ACC-M) for environments without shared credentials\n\n### CMDB Health\n- **Data Completeness**: Percentage of required fields populated per CI class\n- **Staleness**: CIs not updated within defined threshold (e.g., 30 days)\n- **Orphan CIs**: CIs with no relationships (isolated in the graph)\n- **Relationship Density**: Average relationships per CI; low density indicates poor mapping\n- **Compliance Score**: Combined metric of completeness + freshness + relationship health\n- **Duplicate Rate**: Percentage of CIs flagged as potential duplicates\n";
|
|
5
|
+
export declare const GLIDE_QUERY_PATTERNS = "\n## Glide Query Patterns \u2014 Platform Reference\n\n### GlideQuery (Modern \u2014 Preferred for new development, scoped apps)\n```javascript\n// Basic select\nvar results = new GlideQuery('incident')\n .where('priority', 1)\n .where('state', '!=', 6)\n .orderByDesc('sys_created_on')\n .select('number', 'short_description', 'caller_id$DISPLAY')\n .toArray(100);\n\n// Select one record\nvar record = new GlideQuery('sys_user')\n .where('user_name', 'admin')\n .selectOne('sys_id', 'name', 'email')\n .orElse({ name: 'Not found' });\n\n// Aggregates\nvar counts = new GlideQuery('incident')\n .where('state', '!=', 7)\n .aggregate('COUNT')\n .groupBy('priority')\n .select();\n\n// Insert\nvar sysId = new GlideQuery('incident')\n .insert({\n short_description: 'New incident',\n caller_id: callerSysId,\n priority: 3\n })\n .get('sys_id');\n\n// Update (returns count of updated records)\nnew GlideQuery('incident')\n .where('sys_id', incidentId)\n .update({ state: 2, assigned_to: userSysId });\n\n// Null checks\nnew GlideQuery('cmdb_ci')\n .whereNull('assigned_to')\n .whereNotNull('name')\n .select('name')\n .toArray(50);\n\n// Disable business rules for bulk operations\nnew GlideQuery('table').disableWorkflow().where(...).update({...});\n```\n\n### GlideRecord (Legacy \u2014 still dominant in global scope and existing code)\n```javascript\n// Basic query\nvar gr = new GlideRecord('incident');\ngr.addQuery('priority', 1);\ngr.addQuery('state', '!=', 6);\ngr.orderByDesc('sys_created_on');\ngr.setLimit(100);\ngr.query();\nwhile (gr.next()) {\n var number = gr.getValue('number');\n var desc = gr.getDisplayValue('short_description');\n}\n\n// Encoded query (complex conditions)\nvar gr = new GlideRecord('incident');\ngr.addEncodedQuery('priority=1^stateNOT IN6,7^sys_created_on>=javascript:gs.daysAgo(30)');\ngr.query();\n\n// Get single record\nvar gr = new GlideRecord('incident');\nif (gr.get('number', 'INC0010001')) {\n // record found\n}\n```\n\n### Best Practices\n- **Use getDisplayValue()** for reference fields, choice fields (returns label not sys_id)\n- **Use getValue()** when you need the raw stored value (sys_id, integer, etc.)\n- **Always setLimit()** before query() to prevent unbounded result sets\n- **getRowCount() is expensive** \u2014 it queries all rows; use GlideAggregate COUNT instead\n- **addEncodedQuery** for complex OR conditions, date math, CONTAINS, STARTSWITH\n- **toString() caution**: gr.field returns GlideElement, not string; use getValue() or toString()\n\n### GlideAggregate\n```javascript\nvar ga = new GlideAggregate('incident');\nga.addQuery('active', true);\nga.addAggregate('COUNT');\nga.addAggregate('AVG', 'reassignment_count');\nga.groupBy('priority');\nga.query();\nwhile (ga.next()) {\n var priority = ga.getValue('priority');\n var count = ga.getAggregate('COUNT');\n var avgReassign = ga.getAggregate('AVG', 'reassignment_count');\n}\n```\n\n### GlideAjax (Client-to-Server round-trip)\n```javascript\n// Client-side call\nvar ga = new GlideAjax('MyScriptInclude');\nga.addParam('sysparm_name', 'myMethod');\nga.addParam('sysparm_my_param', 'value');\nga.getXMLAnswer(function(answer) {\n // answer is the string returned by the script include\n var result = JSON.parse(answer);\n});\n\n// Server-side Script Include (must extend AbstractAjaxProcessor)\nvar MyScriptInclude = Class.create();\nMyScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {\n myMethod: function() {\n var param = this.getParameter('sysparm_my_param');\n return JSON.stringify({ success: true, data: param });\n },\n type: 'MyScriptInclude'\n});\n```\n";
|
|
6
|
+
export declare const COMMON_ANTI_PATTERNS = "\n## Common ServiceNow Anti-Patterns \u2014 Reference\n\n### Query Anti-Patterns\n- **GlideRecord in a loop (N+1 problem)**: Each iteration fires a separate SQL query.\n Fix: Use addEncodedQuery with IN operator, or GlideQuery with a single query returning all needed records.\n- **No query limit**: Unbounded queries can return millions of rows, causing performance degradation and timeouts.\n Fix: Always call setLimit() or use .toArray(maxCount) with GlideQuery.\n- **getRowCount() for existence check**: Queries ALL matching rows just to check if any exist.\n Fix: Use setLimit(1) + query() + hasNext(), or GlideQuery .selectOne().isPresent().\n- **String concatenation for queries**: Building query strings manually is error-prone and vulnerable to injection.\n Fix: Use addQuery(), addOrCondition(), or addEncodedQuery() with proper escaping.\n- **SELECT * pattern**: Retrieving all fields when only a few are needed wastes memory and bandwidth.\n Fix: Use GlideQuery .select('field1', 'field2') or setDisplayValue(false) with specific getValue() calls.\n\n### Scripting Anti-Patterns\n- **Hardcoded sys_ids**: Break across instances (dev/test/prod) and upgrades.\n Fix: Use system properties (gs.getProperty), GlideRecord lookups by name, or sys_properties.\n- **eval() usage**: Severe security risk; allows arbitrary code execution.\n Fix: Never use eval(). Use JSON.parse() for data, function references for dynamic dispatch.\n- **gs.print() in production**: Writes to system log inefficiently, not filterable.\n Fix: Use gs.log(), gs.debug(), gs.info(), gs.warn(), gs.error() with source parameter.\n- **current.update() in Before business rules**: Triggers another update, causing infinite recursion.\n Fix: Set field values directly on current (current.field = value); the platform saves automatically in Before rules.\n- **Synchronous GlideAjax**: Blocks the browser UI thread, causes freezing.\n Fix: Always use getXMLAnswer(callback) or getXMLWait() with async patterns.\n- **Direct DOM manipulation in client scripts**: Breaks on form redesign, not upgrade-safe.\n Fix: Use g_form API exclusively (setValue, setDisplay, setVisible, setMandatory, etc.).\n\n### Business Rule Anti-Patterns\n- **No condition on business rule**: Fires on EVERY insert/update/delete regardless of relevance.\n Fix: Always set a condition (filter or script condition) to narrow execution scope.\n- **Heavy computation in synchronous rules**: Blocks the user transaction, causes slow form saves.\n Fix: Move heavy logic to async business rules or Flow Designer scheduled flows.\n- **Not using setWorkflow(false)**: Bulk operations without disabling business rules cause cascading performance issues.\n Fix: Call gr.setWorkflow(false) for bulk data loads; re-enable after.\n\n### Architecture Anti-Patterns\n- **Business logic in UI policies**: UI policies are client-only; logic can be bypassed via API, imports, or scripting.\n Fix: Enforce logic in business rules (server-side) and use UI policies only for form UX.\n- **Excessive client scripts**: Too many onChange/onLoad scripts slow form rendering.\n Fix: Consolidate into fewer scripts; use UI policies for simple show/hide/mandatory.\n- **Not using update sets**: Making changes directly in production without tracking.\n Fix: Always use update sets; move changes through dev -> test -> prod pipeline.\n- **Circular references in script includes**: Script Include A calls B which calls A.\n Fix: Refactor to remove circular dependency; use a shared utility Script Include.\n";
|
|
7
|
+
export declare const API_REFERENCE = "\n## ServiceNow API Quick Reference\n\n### g_form (Client-Side Form API)\n- **Get/Set Values**: getValue(field), setValue(field, value), clearValue(field)\n- **Display Control**: setDisplay(field, bool), setVisible(field, bool), setReadOnly(field, bool),\n setMandatory(field, bool), setDisabled(field, bool)\n- **Labels/Options**: setLabel(field, label), getLabelOf(field), addOption(field, value, label),\n removeOption(field, value), clearOptions(field), getOption(field, value)\n- **Messages**: showFieldMsg(field, msg, type), hideFieldMsg(field), hideAllFieldMsgs(),\n addInfoMessage(msg), addErrorMessage(msg), clearMessages()\n- **References**: getReference(field, callback) \u2014 async; returns GlideRecord of referenced record\n- **Visual**: flash(field, color, count), setSectionDisplay(section, bool)\n- **State**: isNewRecord(), isDatabaseReady(), isLiveUpdating(), isMandatory(field), isReadOnly(field)\n- **Sections**: getSections(), setSectionDisplay(sectionName, display), isSectionVisible(sectionName)\n- **Save**: save(), submit()\n\n### g_list (Client-Side List API)\n- **Get Info**: getQuery(), getTableName(), getTitle(), getOrderBy(), getGroupBy()\n- **Set Info**: setQuery(encodedQuery), setOrderBy(orderBy), setGroupBy(groupBy)\n- **Refresh**: refresh(), refreshWithOrderBy(orderBy)\n- **Row Count**: getRowCount(), getTotalRows()\n\n### GlideRecord (Server-Side Record API)\n- **Query Building**: addQuery(field, operator, value), addOrCondition(field, operator, value),\n addEncodedQuery(query), addNullQuery(field), addNotNullQuery(field), orderBy(field),\n orderByDesc(field), setLimit(max), chooseWindow(start, end)\n- **Execution**: query(), next(), hasNext(), get(sysId), get(field, value)\n- **CRUD**: insert(), update(), deleteRecord(), deleteMultiple(), initialize(), newRecord()\n- **Field Access**: getValue(field), setValue(field, value), getDisplayValue(field),\n getElement(field), getUniqueValue(), getRecordClassName(), getTableName()\n- **Security**: canRead(), canWrite(), canCreate(), canDelete(), setAbortAction(bool)\n- **Workflow**: setWorkflow(bool), autoSysFields(bool), setForceUpdate(bool)\n- **Utility**: getEncodedQuery(), getRowCount(), getLink(noStack), getClassDisplayValue(),\n isValid(), isValidField(field), isNewRecord(), isActionAborted(), hasAttachments()\n\n### GlideSystem \u2014 gs (Server-Side System API)\n- **User Context**: getUserID(), getUserName(), getUser().getFullName(), hasRole(role),\n hasRoleInGroup(role, groupSysId), isLoggedIn(), isInteractive(), getSession()\n- **Date/Time**: beginningOfToday(), endOfToday(), beginningOfYesterday(), endOfYesterday(),\n daysAgo(days), daysAgoStart(days), daysAgoEnd(days), hoursAgo(hours), minutesAgo(minutes),\n monthsAgo(months), quartersAgo(quarters), yearsAgo(years), now(), nowDateTime(),\n dateGenerate(date, range)\n- **Logging**: log(msg, source), debug(msg, source), info(msg, source), warn(msg, source),\n error(msg, source)\n- **Messages**: addInfoMessage(msg), addErrorMessage(msg)\n- **Properties**: getProperty(name, defaultValue), setProperty(name, value, description)\n- **Utility**: nil(obj), include(scriptIncludeName), tableExists(tableName),\n generateGUID(), getDisplayColumn(table), eventQueue(eventName, gr, parm1, parm2),\n sleep(ms), urlEncode(url), urlDecode(url), xmlToJSON(xml), base64Encode(str), base64Decode(str)\n- **Scoped**: getCallerScopeName(), getCurrentScopeName()\n\n### GlideQuery (Server-Side Modern Query API)\n- **Build**: new GlideQuery(table), where(field, operator, value), whereNull(field),\n whereNotNull(field), orWhere(field, operator, value)\n- **Order**: orderBy(field), orderByDesc(field), limit(count)\n- **Execute**: select(field1, field2, ...), selectOne(field1, ...), toArray(maxCount)\n- **Aggregate**: aggregate(operation, field), groupBy(field), having(operation, field, operator, value)\n- **Mutate**: insert(record), update(record), updateMultiple(record), deleteMultiple()\n- **Control**: disableWorkflow(), withAcls(), forceUpdate()\n- **Optional (selectOne result)**: get(field), isPresent(), isEmpty(), orElse(default),\n ifPresent(callback), map(callback), flatMap(callback)\n\n### $sp (Portal Server-Side API)\n- getParameter(name), getPortalRecord(), getUser(), getUserInitials()\n- getWidget(widgetSysId, options), getWidgetFromInstance(instanceSysId)\n- getStream(table, sysId), getValues(gr, fieldString)\n- setRedirectURL(url), getDisplayValue(field)\n- getInstanceRecord(), getRecordElements(gr, fieldNames)\n- getKBCategoryArticles(kbSysId, categorySysId), getKBCount(kbSysId)\n\n### spUtil (Portal Client-Side Utility)\n- update(widget) \u2014 send c.data to server and refresh\n- get(widgetSysId, options) \u2014 fetch widget model from server\n- addInfoMessage(msg), addErrorMessage(msg), addTrivialMessage(msg)\n- createChangeHandler(scope, dataObject, callback)\n- recordWatch(scope, table, filter, callback) \u2014 real-time record updates\n- format(templateString, dataObject) \u2014 string interpolation\n";
|
|
8
|
+
export declare const CATALOG_KNOWLEDGE = "\n## Service Catalog \u2014 Platform Reference\n\n### Catalog Structure\n- **Catalog** (sc_catalog): Top-level container; an instance can have multiple catalogs\n- **Category** (sc_category): Organizational grouping within a catalog; supports nesting (parent/child)\n- **Item** (sc_cat_item): Orderable service; can be Record Producer, Order Guide, or standard item\n- **Variable Set** (item_option_new_set): Reusable group of variables shared across items\n- **Variable** (item_option_new): Individual form field on a catalog item\n\n### Variable Types\n- **Text**: Single Line Text (string), Multi-Line Text (textarea), Email, URL, IP Address\n- **Numeric**: Integer, Decimal, Currency, Duration, Percent\n- **Selection**: Select Box (dropdown), Radio Button, Checkbox, Lookup Select Box (query-driven dropdown)\n- **Reference Types**: Reference (single record), List Collector (multi-select reference)\n- **Date Types**: Date, Date/Time, Time\n- **Rich Content**: HTML, Label (read-only text), Macro, Macro with Label\n- **Layout**: Container Start, Container End, Container Split (visual grouping)\n- **Advanced**: Multi-Row Variable Set (MRVS \u2014 repeatable row groups), Requested For,\n Masked (password-type), Custom (UI Macro based)\n\n### Variable Attributes (Semicolon-delimited on variable record)\n- ref_qual_elements=field: Dynamic reference qualifier based on another variable\n- ref_auto_completer=AJAXTableCompleter: Auto-complete for reference fields\n- max_length=100: Character limit for text fields\n- default_value=value: Pre-populated value\n- hidden=true: Hide from form (still submitted)\n- read_only=true: Display but not editable\n- mandatory=true: Require before submission\n- include_none=true: Add \"-- None --\" option to select boxes\n- glide_list=true: Enable comma-separated multi-value entry\n- no_filter=true: Disable list filter on reference fields\n\n### Request Model (Fulfillment Chain)\n- **sc_request**: Parent request record (one per cart checkout)\n- **sc_req_item** (RITM): One per catalog item ordered; contains variable values\n- **sc_task**: Fulfillment tasks generated from the RITM; assigned to groups\n- **Flow**: sc_req_item triggers fulfillment flow (preferred) or legacy workflow\n\n### Approval Engine\n- **Approval Rules** (sysapproval_approver): Define who approves and under what conditions\n- **States**: Not Yet Requested -> Requested -> Approved / Rejected / Cancelled\n- **Types**: User approval, Group approval (any member can act), Scripted approval\n- **Generated vs Required**: Generated = system-created; Required = manually added\n- **Approval Policies**: Anyone (first responder), Everyone (unanimous), Majority (>50%)\n\n### Fulfillment\n- **Flow Designer** (preferred): Trigger on sc_req_item insert; automate task creation, notifications\n- **Workflow** (legacy): Visual workflow editor; being replaced by Flow Designer\n- **Direct Task Creation**: Execution plan creates sc_task records automatically\n\n### Catalog Client Scripts\n- **onChange**: Fires when a variable value changes; receives variableName, oldValue, newValue\n Use: Cascade variable values, dynamic filtering, show/hide variables\n- **onLoad**: Fires when the catalog item form loads\n Use: Set default values, initialize variable states, hide sections\n- **onSubmit**: Fires on form submission; return false to prevent submit\n Use: Validation, confirmation dialogs, data formatting\n\n### Catalog UI Policies\n- Conditions based on variable values (no scripting needed for simple cases)\n- Actions: Set mandatory, set visible, set read-only on target variables\n- Reverse if false: Automatically undo actions when condition no longer met\n- Script-based: Advanced conditions via script expression for complex logic\n- Run on load: Execute policy when form first opens (not just on change)\n";
|
|
9
|
+
export declare const REST_API_KNOWLEDGE = "\n## REST API \u2014 Platform Reference\n\n### Scripted REST API Structure\n- **API Definition** (sys_ws_definition): Top-level API with base path, namespace, version\n - Path: /api/{namespace}/{api_id}/v{version}\n - Namespace: Scoped app namespace (e.g., x_myapp) or global (now)\n- **Resource** (sys_ws_operation): Individual endpoint within an API\n - Path: Relative to API base; supports path parameters with {param_name}\n - HTTP Method: GET, POST, PUT, PATCH, DELETE (one method per resource)\n\n### Request Object (Scripted REST)\n```javascript\n// Path parameters: /api/x_app/users/{user_id}\nvar userId = request.pathParams.user_id;\n\n// Query parameters: ?active=true&limit=10\nvar active = request.queryParams.active;\nvar limit = request.queryParams.limit;\n\n// Request body (POST/PUT/PATCH)\nvar body = request.body.data; // Parsed JSON object\nvar rawBody = request.body.dataString; // Raw string\n\n// Headers\nvar authHeader = request.getHeader('Authorization');\nvar contentType = request.getHeader('Content-Type');\n\n// Request metadata\nvar method = request.getMethod(); // GET, POST, etc.\nvar uri = request.uri;\nvar queryString = request.queryString;\n```\n\n### Response Object (Scripted REST)\n```javascript\n// Set status code\nresponse.setStatus(200); // 200 OK, 201 Created, 204 No Content, etc.\n\n// Set response body\nresponse.setBody({\n result: { id: sysId, name: name },\n status: 'success'\n});\n\n// Set headers\nresponse.setHeader('X-Custom-Header', 'value');\nresponse.setContentType('application/json');\n\n// Streaming (large responses)\nvar writer = response.getStreamWriter();\nwriter.writeString('data chunk');\n```\n\n### Error Handling\n```javascript\n// Built-in error classes (sn_ws_err namespace)\nthrow new sn_ws_err.NotFoundError('Record not found'); // 404\nthrow new sn_ws_err.BadRequestError('Invalid input'); // 400\nthrow new sn_ws_err.ServiceError('Internal error'); // 500\nthrow new sn_ws_err.UnsupportedMediaTypeError('Use JSON'); // 415\nthrow new sn_ws_err.ConflictError('Record already exists'); // 409\n\n// Custom error with details\nvar error = new sn_ws_err.ServiceError();\nerror.setStatus(422);\nerror.setMessage('Validation failed');\nerror.setDetail('Field \"name\" is required');\nthrow error;\n```\n\n### Authentication Methods\n- **Basic Authentication**: Username/password in Authorization header (Base64)\n- **OAuth 2.0**: Client credentials, authorization code, or refresh token grant\n - Token endpoint: /oauth_token.do\n - Authorize endpoint: /oauth_auth.do\n- **API Key**: Custom header (x-api-key) validated in Scripted REST preprocessing\n- **Mutual TLS**: Client certificate authentication for high-security integrations\n- **Session-based**: Cookie-based (jsessionid) for browser clients after login\n\n### Versioning\n- Path-based: /api/x_scope/v1/resource vs /api/x_scope/v2/resource\n- Each version is a separate API definition or resource set\n- Maintain backward compatibility; deprecate old versions with sunset headers\n\n### Best Practices\n- **Input Validation**: Always validate request body fields, types, and ranges before processing\n- **Try-Catch**: Wrap all logic in try-catch; return consistent error format\n- **Status Codes**: Use correct HTTP status codes (200, 201, 204, 400, 401, 403, 404, 409, 500)\n- **Pagination**: Support limit and offset query params; return total count and next/prev links\n - response.setBody({ result: records, meta: { total: count, limit: limit, offset: offset } })\n- **ETags**: Return ETag header for cacheable responses; support If-None-Match for conditional requests\n- **Rate Limiting**: Configure via system property glide.rest.rate_limit.* or custom Scripted REST logic\n- **CORS**: Configure via sys_cors_rule; specify allowed origins, methods (GET, POST, etc.), headers\n - Preflight: OPTIONS request auto-handled when CORS rule exists\n - Credentials: Set allow_credentials to true for cookie-based auth from browsers\n- **Security**: Never expose internal sys_ids unnecessarily; use display values or mapped identifiers\n- **Logging**: Log request/response in Scripted REST for debugging; use gs.debug() not gs.log()\n";
|
|
10
|
+
//# sourceMappingURL=knowledge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/prompts/knowledge.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,uBAAuB,86EAyCnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,4rFA+CnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,k9EA6CnC,CAAC;AAEF,eAAO,MAAM,cAAc,+4FA+C1B,CAAC;AAEF,eAAO,MAAM,oBAAoB,glHAyHhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,49GA8ChC,CAAC;AAEF,eAAO,MAAM,aAAa,m6JA8EzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,owHAiE7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,ooIAkG9B,CAAC"}
|