parse-stack-next 5.6.0 → 5.7.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +409 -0
- data/README.md +378 -6
- data/docs/caching.md +748 -0
- data/examples/basic_client.rb +3 -3
- data/examples/basic_server.rb +3 -3
- data/examples/live_query_listener.rb +12 -12
- data/examples/rag_chatbot.rb +14 -14
- data/examples/transaction_example.rb +44 -45
- data/examples/webhook_server.rb +3 -3
- data/lib/parse/access.rb +493 -0
- data/lib/parse/acl_scope.rb +125 -52
- data/lib/parse/agent/approval_gate.rb +0 -0
- data/lib/parse/agent/cancellation_token.rb +3 -3
- data/lib/parse/agent/constraint_translator.rb +4 -4
- data/lib/parse/agent/describe.rb +34 -34
- data/lib/parse/agent/errors.rb +9 -9
- data/lib/parse/agent/mcp_client.rb +61 -59
- data/lib/parse/agent/mcp_dispatcher.rb +89 -101
- data/lib/parse/agent/mcp_rack_app.rb +92 -93
- data/lib/parse/agent/mcp_server.rb +1 -1
- data/lib/parse/agent/mcp_subscriptions.rb +22 -22
- data/lib/parse/agent/metadata_audit.rb +1 -2
- data/lib/parse/agent/metadata_dsl.rb +7 -7
- data/lib/parse/agent/metadata_registry.rb +12 -12
- data/lib/parse/agent/prompt_hardening.rb +4 -4
- data/lib/parse/agent/prompts.rb +10 -10
- data/lib/parse/agent/result_formatter.rb +4 -4
- data/lib/parse/agent/tools.rb +493 -400
- data/lib/parse/agent.rb +157 -116
- data/lib/parse/api/hooks.rb +1 -1
- data/lib/parse/api/server.rb +2 -2
- data/lib/parse/api/users.rb +2 -2
- data/lib/parse/atlas_search/index_manager.rb +1 -1
- data/lib/parse/atlas_search/session.rb +40 -218
- data/lib/parse/atlas_search.rb +181 -60
- data/lib/parse/authorization.rb +466 -0
- data/lib/parse/cache/invalidation.rb +167 -0
- data/lib/parse/cache/keyspace.rb +306 -0
- data/lib/parse/cache/moneta_surface.rb +126 -0
- data/lib/parse/cache/pool.rb +48 -5
- data/lib/parse/cache/redis.rb +425 -10
- data/lib/parse/cache/scoped_view.rb +443 -0
- data/lib/parse/cache/sub_cache.rb +264 -0
- data/lib/parse/cache/upstream_roles.rb +230 -0
- data/lib/parse/client/authentication.rb +1 -1
- data/lib/parse/client/body_builder.rb +1 -2
- data/lib/parse/client/caching.rb +84 -5
- data/lib/parse/client.rb +327 -189
- data/lib/parse/clp_scope.rb +225 -28
- data/lib/parse/console.rb +3 -3
- data/lib/parse/embeddings/batch_embedder.rb +3 -3
- data/lib/parse/embeddings/cache.rb +17 -17
- data/lib/parse/embeddings/cohere.rb +21 -22
- data/lib/parse/embeddings/image_fetch.rb +22 -21
- data/lib/parse/embeddings/jina.rb +21 -21
- data/lib/parse/embeddings/local_http.rb +6 -7
- data/lib/parse/embeddings/media_file.rb +5 -4
- data/lib/parse/embeddings/openai.rb +5 -5
- data/lib/parse/embeddings/provider.rb +1 -1
- data/lib/parse/embeddings/qwen.rb +10 -10
- data/lib/parse/embeddings/spend_cap.rb +2 -3
- data/lib/parse/embeddings/streaming_body.rb +11 -11
- data/lib/parse/embeddings/video_source.rb +7 -6
- data/lib/parse/embeddings/voyage.rb +59 -61
- data/lib/parse/embeddings.rb +28 -27
- data/lib/parse/graphql/type_generator.rb +1 -1
- data/lib/parse/graphql.rb +5 -5
- data/lib/parse/live_query/client.rb +1 -1
- data/lib/parse/live_query.rb +1 -1
- data/lib/parse/lock.rb +15 -18
- data/lib/parse/lock_backend.rb +1 -1
- data/lib/parse/lookup_rewriter.rb +6 -6
- data/lib/parse/model/classes/role.rb +227 -28
- data/lib/parse/model/classes/user.rb +60 -1
- data/lib/parse/model/clp.rb +4 -4
- data/lib/parse/model/core/actions.rb +97 -15
- data/lib/parse/model/core/create_lock.rb +0 -2
- data/lib/parse/model/core/describe.rb +57 -57
- data/lib/parse/model/core/embed_managed.rb +21 -23
- data/lib/parse/model/core/fetching.rb +2 -0
- data/lib/parse/model/core/indexing.rb +14 -14
- data/lib/parse/model/core/parse_reference.rb +1 -1
- data/lib/parse/model/core/properties.rb +2 -2
- data/lib/parse/model/core/querying.rb +1 -1
- data/lib/parse/model/core/schema.rb +2 -2
- data/lib/parse/model/core/search_indexing.rb +2 -2
- data/lib/parse/model/core/vector_searchable.rb +4 -5
- data/lib/parse/model/file.rb +21 -15
- data/lib/parse/model/geojson.rb +2 -2
- data/lib/parse/model/geopoint.rb +1 -0
- data/lib/parse/model/object.rb +132 -66
- data/lib/parse/model/pointer.rb +2 -0
- data/lib/parse/model/polygon.rb +3 -6
- data/lib/parse/model/push.rb +2 -2
- data/lib/parse/model/vector.rb +3 -1
- data/lib/parse/mongodb.rb +512 -282
- data/lib/parse/pipeline_security.rb +3 -0
- data/lib/parse/query/constraints.rb +46 -46
- data/lib/parse/query.rb +146 -59
- data/lib/parse/retrieval/agent_tool.rb +34 -20
- data/lib/parse/retrieval/chunk.rb +1 -0
- data/lib/parse/retrieval/reranker/cohere.rb +11 -11
- data/lib/parse/retrieval/reranker.rb +3 -4
- data/lib/parse/retrieval/retriever.rb +4 -6
- data/lib/parse/schema/index_migrator.rb +26 -26
- data/lib/parse/schema/search_index_migrator.rb +19 -19
- data/lib/parse/stack/tasks.rb +6 -6
- data/lib/parse/stack/version.rb +1 -1
- data/lib/parse/stack.rb +10 -10
- data/lib/parse/vector_search/hybrid.rb +66 -41
- data/lib/parse/vector_search.rb +14 -11
- data/lib/parse/webhooks/payload.rb +1 -0
- data/lib/parse/webhooks/registration.rb +4 -4
- data/lib/parse/webhooks/trigger_audit.rb +50 -49
- data/lib/parse/webhooks.rb +22 -4
- data/parse-stack-next.gemspec +6 -6
- metadata +10 -1
data/lib/parse/agent/prompts.rb
CHANGED
|
@@ -198,10 +198,10 @@ module Parse
|
|
|
198
198
|
},
|
|
199
199
|
|
|
200
200
|
"find_relationship" => ->(args) {
|
|
201
|
-
pc
|
|
202
|
-
pid = Validators.validate_object_id!(args["parent_id"],
|
|
203
|
-
cc
|
|
204
|
-
pf
|
|
201
|
+
pc = Validators.validate_identifier!(args["parent_class"], "parent_class")
|
|
202
|
+
pid = Validators.validate_object_id!(args["parent_id"], "parent_id")
|
|
203
|
+
cc = Validators.validate_identifier!(args["child_class"], "child_class")
|
|
204
|
+
pf = Validators.validate_identifier!(args["pointer_field"], "pointer_field")
|
|
205
205
|
where = { pf => { "__type" => "Pointer", "className" => pc, "objectId" => pid } }
|
|
206
206
|
"Find #{cc} objects whose #{pf} field points to #{pc} #{pid}. " \
|
|
207
207
|
"First call count_objects with class_name=\"#{cc}\" and where=#{where.to_json}. " \
|
|
@@ -210,7 +210,7 @@ module Parse
|
|
|
210
210
|
},
|
|
211
211
|
|
|
212
212
|
"created_in_range" => ->(args) {
|
|
213
|
-
cn
|
|
213
|
+
cn = Validators.validate_identifier!(args["class_name"], "class_name")
|
|
214
214
|
since = Validators.validate_iso8601!(args["since"], "since")
|
|
215
215
|
upper = Validators.validate_iso8601!(args["until"], "until", required: false)
|
|
216
216
|
date_constraint = { "$gte" => { "__type" => "Date", "iso" => since } }
|
|
@@ -268,17 +268,17 @@ module Parse
|
|
|
268
268
|
|
|
269
269
|
if result.is_a?(Hash)
|
|
270
270
|
description = (result[:description] || result["description"]).to_s
|
|
271
|
-
text
|
|
271
|
+
text = (result[:text] || result["text"]).to_s
|
|
272
272
|
else
|
|
273
273
|
description = "Parse analytics prompt: #{name}"
|
|
274
|
-
text
|
|
274
|
+
text = result.to_s
|
|
275
275
|
end
|
|
276
276
|
|
|
277
277
|
{
|
|
278
278
|
"description" => description,
|
|
279
279
|
"messages" => [
|
|
280
280
|
{
|
|
281
|
-
"role"
|
|
281
|
+
"role" => "user",
|
|
282
282
|
"content" => { "type" => "text", "text" => text },
|
|
283
283
|
},
|
|
284
284
|
],
|
|
@@ -294,9 +294,9 @@ module Parse
|
|
|
294
294
|
# Hash with :description and :text keys
|
|
295
295
|
def register(name:, description:, arguments: [], renderer:)
|
|
296
296
|
prompt = {
|
|
297
|
-
"name"
|
|
297
|
+
"name" => name.to_s,
|
|
298
298
|
"description" => description.to_s,
|
|
299
|
-
"arguments"
|
|
299
|
+
"arguments" => arguments,
|
|
300
300
|
}
|
|
301
301
|
REGISTRY_MUTEX.synchronize do
|
|
302
302
|
@registry[name.to_s] = { prompt: prompt, renderer: renderer }
|
|
@@ -160,8 +160,8 @@ module Parse
|
|
|
160
160
|
# @param include [Array<String>, nil] pointer includes from the original call
|
|
161
161
|
# @return [Hash] formatted results
|
|
162
162
|
def format_query_results(class_name, results, limit:, skip:,
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
where: nil, keys: nil, order: nil, include: nil,
|
|
164
|
+
truncated_include_fields: nil)
|
|
165
165
|
total = results.size
|
|
166
166
|
truncated = total > MAX_RESULTS_DISPLAY
|
|
167
167
|
has_more = total >= limit
|
|
@@ -190,8 +190,7 @@ module Parse
|
|
|
190
190
|
# dotted paths (`keys: ["user.iconImage"]`) if it needs fields
|
|
191
191
|
# that were dropped. Suppress the key when nothing was auto-
|
|
192
192
|
# projected — keeps the envelope minimal for the common case.
|
|
193
|
-
truncated_includes_payload =
|
|
194
|
-
if truncated_include_fields && !truncated_include_fields.empty?
|
|
193
|
+
truncated_includes_payload = if truncated_include_fields && !truncated_include_fields.empty?
|
|
195
194
|
truncated_include_fields.transform_values { |meta| meta[:dropped] }.compact
|
|
196
195
|
end
|
|
197
196
|
|
|
@@ -404,6 +403,7 @@ module Parse
|
|
|
404
403
|
acc[key] = simplify_value(value)
|
|
405
404
|
end
|
|
406
405
|
end
|
|
406
|
+
|
|
407
407
|
public :simplify_object
|
|
408
408
|
|
|
409
409
|
# Simplify a single value
|