nsmcp::QuestionService method poll (public)
<instance of nsmcp::QuestionService> poll context handle
Defined in /usr/local/ns/tcl/nsmcp/question-service.tcl
Describe an owned conversation and its retained turns. Apply ownership and expiry checks before exposing bounded question, tool, evidence and usage metadata.
- Parameters:
- context (required)
- Authenticated request context carrying the principal, grants and selected server.
- handle (required)
- Retained job or conversation handle; ownership and expiry checks still apply.
- Returns:
- A rooted JSON conversation-status object.
- Testcases:
- No testcase defined.
Source code: ns_mutex lock ${:mutex} try { set record [:owned $context $handle] } finally { ns_mutex unlock ${:mutex} } set canContinue [expr {[llength [:continuationJobs $record]]>0 && [llength [dict get $record turns]]<${:maxTurns}}] set turns {} set i 0 foreach entry [dict get $record turns] { set tools {} set j 0 foreach call [dict get $entry tools] { lappend tools $j object [list name string [dict get $call name] status string [dict get $call status] arguments string [dict get $call arguments] result string [dict get $call result] truncated boolean [dict get $call truncated]] set timing [::nsmcp::questionToolTiming $call] set fields [lindex $tools end] foreach {key type} {durationMs number durationSource string} { if {[dict exists $timing $key]} { lappend fields $key $type [dict get $timing $key] } else { lappend fields $key null {} } } set tools [lreplace $tools end end $fields] if {[dict exists $call evidenceHandle]} { set fields [lindex $tools end] lappend fields evidenceHandle string [dict get $call evidenceHandle] set tools [lreplace $tools end end $fields] } incr j } set jobs {} set k 0 if {[dict exists $entry jobs]} { dict for {jobHandle job} [dict get $entry jobs] { set fields [list jobHandle string $jobHandle name string [dict get $job name] status string [dict get $job status]] if {[dict exists $job progress]} { set progress {} foreach key {wallMs examinedBytes sourceBytes scanBudgetBytes updatedAt filesCompleted filesProcessed filesSelected filesDiscovered filesSkipped filesScanned filesPending timeIndexSkippedBytes timeIndexValidationBytes selectedFromOffset selectedToOffset selectionProbeBytes aggregationDiskBytes aggregationDiskBudgetBytes aggregationPoolWaitCount aggregationPoolWaitMilliseconds aggregationPoolWaitLimitMilliseconds currentFileIndex currentFileNumber currentFileSize currentFileOffset currentFileSnapshotBytes} { if {[dict exists $job progress $key]} { set value [dict get $job progress $key] lappend progress $key [expr {$value eq "" ? "null" : "number"}] $value } } foreach key {phase offsetBasis scanStatus completionSummary aggregationBackend aggregationStatus aggregationFailurePhase aggregationFailureClass aggregationDiagnosticId} { if {[dict exists $job progress $key]} { lappend progress $key string [dict get $job progress $key] } } if {[dict exists $job progress currentFileCompressed]} { lappend progress currentFileCompressed boolean [dict get $job progress currentFileCompressed] } if {[dict exists $job progress truncatedByLimits]} { lappend progress truncatedByLimits boolean [dict get $job progress truncatedByLimits] } lappend fields progress object $progress } lappend jobs $k object $fields incr k } } lassign [:questionPresentation $record $entry] displayed editable lappend turns $i object [list id string [dict get $entry id] question string $displayed editQuestion string $editable answer string [dict get $entry answer] status string [dict get $entry status] elapsedMs [expr {[dict exists $entry elapsedMs] ? "number" : "null"}] [:dict getdef $entry elapsedMs {}] error string [dict get $entry error] tools array $tools jobs array $jobs canContinue boolean [expr {$canContinue && [dict get $entry id] eq [dict get $record current]}]] incr i } set backendName [:defaultBackend] if {[dict exists $record backend]} { set backendName [dict get $record backend] } return [list {} object [list conversation string $handle server string [dict get $record server] backend string $backendName status string [dict get $record status] expires number [dict get $record expires] turns array $turns]]XQL Not present: Generic, PostgreSQL, Oracle
![[i]](/resources/acs-subsite/ZoomIn16.gif)