@cassiomc1/forgeloop 1.9.0 → 1.10.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.
Files changed (57) hide show
  1. package/AGENT_COMPATIBILITY.md +15 -0
  2. package/DELEGATION_PROTOCOL.md +6 -0
  3. package/DOCS_INDEX.md +4 -2
  4. package/LOOP_ENGINEERING.md +13 -0
  5. package/LOOP_SYSTEM_DESIGN.md +33 -0
  6. package/ORCHESTRATOR_INTEGRATION.md +9 -0
  7. package/PROTOCOL_INTEGRATION.md +31 -0
  8. package/README.md +40 -0
  9. package/TERMINOLOGY.md +12 -0
  10. package/THREAT_MODEL.md +24 -0
  11. package/completions/_forgeloop +2 -1
  12. package/completions/forgeloop.bash +3 -1
  13. package/completions/forgeloop.fish +9 -1
  14. package/docs/ADVISORY_CONTEXT.md +174 -0
  15. package/docs/AGENT_PROTOCOL_SUMMARY.md +28 -2
  16. package/docs/ARTIFACT_REFERENCE.md +14 -0
  17. package/docs/CLI_REFERENCE.md +40 -0
  18. package/docs/CROSS_HARNESS_CONTINUITY.md +85 -0
  19. package/docs/DOCUMENTATION_GUIDE.md +7 -0
  20. package/docs/GETTING_STARTED.md +22 -0
  21. package/docs/KNOWLEDGE_SOURCES.md +10 -0
  22. package/docs/MCP.md +17 -1
  23. package/docs/RECIPES.md +80 -0
  24. package/docs/RELEASE_CHECKLIST.md +14 -0
  25. package/docs/TROUBLESHOOTING.md +54 -2
  26. package/docs/UNIVERSAL_INTEGRATION.md +60 -0
  27. package/package.json +2 -1
  28. package/schemas/handoff-envelope.schema.json +1 -0
  29. package/scripts/check-changelog-freshness.mjs +27 -3
  30. package/scripts/generate-agent-protocol-summary.mjs +18 -0
  31. package/src/cli.js +6 -0
  32. package/src/commands/handoff-accept.js +36 -0
  33. package/src/commands/handoff-list.js +28 -2
  34. package/src/commands/handoff-show.js +27 -2
  35. package/src/commands/reconcile-continuity.js +4 -0
  36. package/src/core/advisory-context/constants.js +74 -0
  37. package/src/core/advisory-context/provider.js +287 -0
  38. package/src/core/advisory-context/service.js +140 -0
  39. package/src/core/cli-command-definitions.js +17 -0
  40. package/src/core/command-executors.js +12 -0
  41. package/src/core/command-input.js +11 -1
  42. package/src/core/continuity-lint.js +89 -0
  43. package/src/core/continuity-reconciliation.js +16 -0
  44. package/src/core/continuity.js +10 -11
  45. package/src/core/error-codes.js +113 -0
  46. package/src/core/events.js +32 -0
  47. package/src/core/execution-profile-context.js +15 -1
  48. package/src/core/filesystem.js +18 -2
  49. package/src/core/handoff-acceptance.js +277 -0
  50. package/src/core/handoff.js +41 -8
  51. package/src/core/integration-invocation-policy.js +19 -2
  52. package/src/core/integration-resources.js +21 -1
  53. package/src/core/portable-context.js +103 -0
  54. package/src/core/protocol-info.js +18 -2
  55. package/src/core/runtime-context.js +31 -0
  56. package/src/integration.d.ts +116 -0
  57. package/src/integration.js +22 -0
@@ -61,6 +61,65 @@ export interface ForgeLoopContext {
61
61
  verificationExecutionPolicy?: { requiredIsolation: string };
62
62
  usageProvider?: ForgeLoopUsageProvider;
63
63
  structuralQualityProviders?: Readonly<Record<string, ForgeLoopStructuralQualityProvider | ForgeLoopStructuralQualityProviderFactory>>;
64
+ advisoryContextProviders?: Readonly<Record<string, ForgeLoopAdvisoryContextProvider | ForgeLoopAdvisoryContextProviderFactory>>;
65
+ }
66
+
67
+ export interface ForgeLoopAdvisoryContextItem {
68
+ title?: string;
69
+ summary: string;
70
+ sourceRef?: string;
71
+ observedAt?: string;
72
+ confidence?: number;
73
+ itemFingerprint?: string;
74
+ }
75
+
76
+ export interface ForgeLoopAdvisoryContextRecallInput {
77
+ projectPath: string;
78
+ taskId: string;
79
+ query: string;
80
+ limit?: number;
81
+ maxItemChars?: number;
82
+ maxTotalChars?: number;
83
+ timeoutMs?: number;
84
+ }
85
+
86
+ export interface ForgeLoopAdvisoryContextRecallOutput {
87
+ items: Array<{
88
+ title?: string;
89
+ summary: string;
90
+ sourceRef?: string;
91
+ observedAt?: string;
92
+ confidence?: number;
93
+ }>;
94
+ }
95
+
96
+ export interface ForgeLoopAdvisoryRecallOptions {
97
+ limit: number;
98
+ maxItemChars: number;
99
+ maxTotalChars: number;
100
+ timeoutMs: number;
101
+ }
102
+
103
+ export interface ForgeLoopAdvisoryContextProvider {
104
+ id: string;
105
+ version?: string;
106
+ recall(input: ForgeLoopAdvisoryContextRecallInput): Promise<ForgeLoopAdvisoryContextRecallOutput> | ForgeLoopAdvisoryContextRecallOutput;
107
+ }
108
+
109
+ export type ForgeLoopAdvisoryContextProviderFactory = () => ForgeLoopAdvisoryContextProvider | Promise<ForgeLoopAdvisoryContextProvider>;
110
+
111
+ export interface ForgeLoopNormalizedAdvisoryContextResult {
112
+ provider: {
113
+ id: string;
114
+ version?: string;
115
+ };
116
+ taskId: string | null;
117
+ authority: "ADVISORY";
118
+ evidenceAuthority: "NONE";
119
+ actionability: "NON_EXECUTABLE";
120
+ trustRole: "NON_EVIDENCE_ADVISORY_CONTEXT";
121
+ persisted: false;
122
+ items: readonly ForgeLoopAdvisoryContextItem[];
64
123
  }
65
124
 
66
125
  export interface ForgeLoopStructuralQualityProviderInput {
@@ -198,3 +257,60 @@ export declare function classifyForgeLoopInvocation(command: string, input?: For
198
257
  export declare function readForgeLoopIntegrationResource(uri: string, input?: Record<string, unknown>): Promise<Record<string, unknown>>;
199
258
  export declare function resolveForgeLoopProjectRoot(projectPath?: string, input?: { cwd?: string }): Promise<string>;
200
259
  export declare function createForgeLoopContext(input?: Record<string, unknown>): ForgeLoopContext;
260
+ export declare function recallAdvisoryContext(input: {
261
+ target: string;
262
+ taskId: string;
263
+ providerName: string;
264
+ query: string;
265
+ limit?: number;
266
+ maxItemChars?: number;
267
+ maxTotalChars?: number;
268
+ timeoutMs?: number;
269
+ runtimeContext?: ForgeLoopContext | Record<string, unknown>;
270
+ }): Promise<ForgeLoopNormalizedAdvisoryContextResult>;
271
+ export declare const ADVISORY_CONTEXT_LIMITS: Readonly<Record<string, number>>;
272
+ export declare const ADVISORY_CONTEXT_TRUST: Readonly<Record<string, unknown>>;
273
+ export declare function normalizeAdvisoryRecallOptions(input?: Partial<ForgeLoopAdvisoryRecallOptions>): ForgeLoopAdvisoryRecallOptions;
274
+ export declare function assertAdvisoryContextProvider(provider: unknown): ForgeLoopAdvisoryContextProvider;
275
+ export declare function assertAdvisoryContextProviderIdentity(provider: unknown, expectedId: string): ForgeLoopAdvisoryContextProvider;
276
+ export declare function createAdvisoryContextProviderRegistry(options?: { providers?: Record<string, unknown> }): {
277
+ get(id: string): unknown;
278
+ has(id: string): boolean;
279
+ list(): string[];
280
+ };
281
+ export declare function resolveAdvisoryContextProvider(options: {
282
+ providers?: Record<string, unknown> | Map<string, unknown> | { get(id: string): unknown; has(id: string): boolean };
283
+ providerName: string;
284
+ }): Promise<ForgeLoopAdvisoryContextProvider | null>;
285
+ export declare function normalizeAdvisoryContextResult(raw: unknown, options?: Record<string, unknown>): ForgeLoopNormalizedAdvisoryContextResult;
286
+ export declare function normalizePortableText(value: unknown, options?: { label?: string; maxLength?: number; optional?: boolean }): string | null;
287
+ export declare function assertPortableContextSafe<T = unknown>(value: T, options?: { label?: string }): T;
288
+ export declare class PortableContextError extends Error {
289
+ code: string;
290
+ }
291
+ export declare function acceptCanonicalHandoff(target: string, options: {
292
+ taskId: string;
293
+ handoffId: string;
294
+ consumerId: string;
295
+ harness?: string | null;
296
+ packageRoot?: string;
297
+ }): Promise<{
298
+ accepted: boolean;
299
+ idempotent: boolean;
300
+ handoffId: string;
301
+ consumerId: string;
302
+ harness: string | null;
303
+ acceptedAt: string;
304
+ }>;
305
+ export declare function resolveHandoffAcceptance(input: {
306
+ events?: readonly unknown[];
307
+ handoff: unknown;
308
+ ledgerValid?: boolean;
309
+ ledgerErrors?: readonly ({ code?: string } | string)[];
310
+ }): {
311
+ status: "OPEN" | "ACCEPTED" | "INCONSISTENT" | "UNBOUND";
312
+ consumerId?: string;
313
+ harness?: string;
314
+ acceptedAt?: string;
315
+ reasonCodes?: readonly string[];
316
+ };
@@ -79,5 +79,27 @@ export {
79
79
  VERIFICATION_EXECUTION_POLICY_MODES,
80
80
  VERIFICATION_ISOLATION_MODES,
81
81
  } from "./core/verification-execution.js";
82
+ export { recallAdvisoryContext } from "./core/advisory-context/service.js";
83
+ export {
84
+ ADVISORY_CONTEXT_LIMITS,
85
+ ADVISORY_CONTEXT_TRUST,
86
+ normalizeAdvisoryRecallOptions,
87
+ } from "./core/advisory-context/constants.js";
88
+ export {
89
+ assertAdvisoryContextProvider,
90
+ assertAdvisoryContextProviderIdentity,
91
+ createAdvisoryContextProviderRegistry,
92
+ normalizeAdvisoryContextResult,
93
+ resolveAdvisoryContextProvider,
94
+ } from "./core/advisory-context/provider.js";
95
+ export {
96
+ normalizePortableText,
97
+ assertPortableContextSafe,
98
+ PortableContextError,
99
+ } from "./core/portable-context.js";
100
+ export {
101
+ acceptCanonicalHandoff,
102
+ resolveHandoffAcceptance,
103
+ } from "./core/handoff-acceptance.js";
82
104
 
83
105
  export const FORGELOOP_INTEGRATION_API_VERSION = FORGELOOP_INTEGRATION_RUNTIME_VERSION;